使用appsrc通过gstreamer udpsink进行流式处理
我的源代码主要来自于通过XimageSink在本地播放时工作良好的源代码 此示例应用程序将使用appsrc作为源,并使用caps强制格式,将黑/白(每秒切换一次)视频生成为Xv窗口输出。我们使用colorspace转换元素来确保向X服务器提供正确的格式。我们用可变帧速率(0/1)配置视频流,并在输出缓冲区上设置时间戳,以便每秒播放2帧 管道在本地播放时喜欢这样:使用appsrc通过gstreamer udpsink进行流式处理,c,video-streaming,gstreamer,C,Video Streaming,Gstreamer,我的源代码主要来自于通过XimageSink在本地播放时工作良好的源代码 此示例应用程序将使用appsrc作为源,并使用caps强制格式,将黑/白(每秒切换一次)视频生成为Xv窗口输出。我们使用colorspace转换元素来确保向X服务器提供正确的格式。我们用可变帧速率(0/1)配置视频流,并在输出缓冲区上设置时间戳,以便每秒播放2帧 管道在本地播放时喜欢这样: gst\u bin\u add\u many(gst\u bin(管道)、appsrc、conv、videosink、NULL); g
gst\u bin\u add\u many(gst\u bin(管道)、appsrc、conv、videosink、NULL);
gst元素链接多(appsrc、conv、videosink、NULL);
然后我尝试使用udpsink替换视频接收器,如下所示:
gst\u bin\u add\u many(gst\u bin(管道)、appsrc、conv、videoenc、payloader、udpsink、NULL);
gst元素链接多(appsrc、conv、videoenc、payloader、udpsink、NULL);
它不起作用。对于调试级别3,它会给我以下警告:
0:00:00.033631637 10534 0x1f4d4a0 FIXME default gstutils.c:3643:gst_pad_create_stream_id_internal:<source:src> Creating random stream-id, consider implementing a deterministic way of creating a stream-id
0:00:00.034634957 10534 0x1f4d4a0 WARN basesrc gstbasesrc.c:2933:gst_base_src_loop:<source> error: Internal data flow error.
0:00:00.034664369 10534 0x1f4d4a0 WARN basesrc gstbasesrc.c:2933:gst_base_src_loop:<source> error: streaming task paused, reason not-linked (-1)
用于测试的.sdp文件:
v=0
m=video 5000 RTP/AVP 96
c=IN IP4 127.0.0.1
a=rtpmap:96 MP4V-ES/90000
谢谢 最后我用gstreamer1.0解决了这个问题 我想问题在于颜色空间。切换到gst1.0并将videoenc更改为avenc_mpeg4后,它就可以工作了。对于gst0.10,我认为在videoenc能够完成同样的任务之前添加一个ffmpegcolorspace 可在上找到工作代码 编译时使用:
gcc app1.c -o app1 `pkg-config --cflags --libs gstreamer-base-1.0` `pkg-config --cflags --libs gstreamer-1.0` -g -lgstapp-1.0
使用以下各项进行测试:
vlc test.sdp
请参阅我问题中的sdp文件
vlc test.sdp