如何使用GStreamer通过'搜索'和'变速'功能在网络上复制本地显示?

时间:2015-03-27 16:38:02

标签: gstreamer

我正在使用Gstreamer1几天。从教程中,我编写了一个C应用程序,用以下命令播放文件:

  • 播放/暂停,使用gst_element_set_state()
  • 文本叠加,使用g_object_set()
  • 使用gst_element_seek()
  • 更改速度并进行搜索

gst_element_seek(data->pipeline, data->rate, GST_FORMAT_TIME, GST_SEEK_FLAG_FLUSH, GST_SEEK_TYPE_SET, data->newpos, GST_SEEK_TYPE_SET, GST_CLOCK_TIME_NONE);

适用于本地显示器。管道看起来像:

filesrc location="/myfile.ts" ! decodebin ! videoconvert ! textoverlay ! autovideosink

现在,我想通过本地网络广播流,使用h264 / mpeg2-ts(这是一项要求),使用VLC在其他PC上复制autovideosink。

我找到了一个减少延迟的示例(http://www.z25.org/static/rd/videostreaming_intro_plab/)。我的新管道看起来像:

gst-launch-1.0 filesrc location="/myfile.ts" ! decodebin ! videoconvert ! textoverlay ! tee name="local" 
! queue ! videoconvert ! autovideosink  local. 
! queue ! x264enc biterate=10000 tune=zerolatency byte-stream=true ! h264parse config-interval=1 
! mpegtsmux ! rndbuffersize max=1316 min=1316 ! udpsink host=192.168.1.255 port=5000 async=false

播放,暂停,文字叠加都可以。但是,寻求和速度改变不起作用:VLC冻结。

使用Wireshark,我看到帧到达遥远的PC,但它们看起来与寻找之前不同。

由维基百科(http://en.wikipedia.org/wiki/MPEG_transport_stream)帮助,我看到,例如,没有更多的PMT或PAT帧。作为视频的初学者,我很难详细分析帧。

我假设gst_element_seek()在流中制动某些东西,但我找不到如何解决这个问题。

0 个答案:

没有答案