服务器上发送带声音文件,GStreamer发送视频/音频流至服务器端并播放、保存

又捣鼓了一天,终于算是可以了,在服务器端视频、声音都能播放,并保存到文件中。

本来想是用vorbis的音频流,但是一直没成功,在gstreaer-devel上发贴也没人回,。。。

所以没办法音频用了AAC,也就是Audio/MPEG4。

还有就是服务器端的音频流从rtp包中解出来后不能直接mux到文件中,没办法就自己先decode,再code,最后再mux就可以了。真是个笨办法,我想应该有好的方法,但是没找到,在gstreamer-devel里翻也没找到好的方法。希望等以后研究的深入了再说吧!先这样用着。

先把代码贴出来

client:

gst-launch -v  gstrtpbin name=rtpbin latency=100 \

uridecodebin uri=file:///home/xingmin/qianyuqianxun.rmvb name=decoder \

decoder. ! tee name=tee0 \

tee0. ! queue2 ! ffmpegcolorspace ! videoscale ! autovideosink \

tee0. ! queue2 ! ffmpegcolorspace ! x264enc ! rtph264pay pt=96 ! queue2 ! rtpbin.send_rtp_sink_0 \

rtpbin.send_rtp_src_0 ! queue2 ! udpsink host=211.64.20.87 port=5000  async=false\

rtpbin.send_rtcp_src_0 ! queue2 ! udpsink host=211

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Qt中接收GStreamer发送视频流,可以通过使用GStreamer的Qt插件来实现。具体步骤如下: 1. 安装GStreamer和Qt插件。可以在官网下载安装包,或者通过包管理工具进行安装。 2. 在Qt项目中添加GStreamer的库和头文件路径,并链接相应的库文件。 3. 使用GStreamer的Qt插件创建一个QGst::Pipeline对象,并连接相应的信号槽。 4. 在信号槽中处理接收到的视频帧,并将其显示在界面上。 下面是一个简单的代码示例: ```cpp #include <QGst/Pipeline> #include <QGst/Ui/VideoWidget> QGst::Pipeline *pipeline; QGst::Element *source; QGst::Element *decoder; QGst::Element *sink; QGst::init(nullptr, nullptr); pipeline = QGst::Pipeline::create(); source = QGst::ElementFactory::make("udpsrc"); decoder = QGst::ElementFactory::make("h264parse ! avdec_h264"); sink = QGst::ElementFactory::make("autovideosink"); source->setProperty("port", 5000); pipeline->add(source, decoder, sink); source->link(decoder); decoder->link(sink); QGst::Ui::VideoWidget *videoWidget = new QGst::Ui::VideoWidget(); videoWidget->setAspectRatioMode(Qt::KeepAspectRatio); QObject::connect(pipeline, &QGst::Pipeline::busMessage, [](const QGst::MessagePtr &msg) { if (msg->type() == QGst::MessageEos) { // End of stream } else if (msg->type() == QGst::MessageError) { // Error handling } }); QObject::connect(sink, &QGst::Element::newBuffer, videoWidget, &QGst::Ui::VideoWidget::onNewBuffer); pipeline->setState(QGst::StatePlaying); ``` 在上述代码中,我们创建了一个QGst::Pipeline对象,并添加了三个元素:`udpsrc`、`h264parse ! avdec_h264`和`autovideosink`。其中,`udpsrc`元素用于接收UDP协议传输的视频流,`h264parse ! avdec_h264`元素用于解析H.264格式的视频流并解码,`autovideosink`元素用于自动选择合适的视频显示方式。 我们还创建了一个QGst::Ui::VideoWidget对象,用于显示接收到的视频帧。通过连接`newBuffer`信号和`onNewBuffer`槽,我们将接收到的视频帧传递给视频显示窗口,实现视频的实时显示。 最后,我们将管道设置为播放状态,开始接收和显示视频流。需要注意的是,我们还连接了`busMessage`信号,用于处理管道中的消息,如错误消息和流结束消息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值