我正在使用Gstreamer1几天。从教程中,我编写了一个C应用程序,用以下命令播放文件:
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()在流中制动某些东西,但我找不到如何解决这个问题。