Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用appsrc通过gstreamer udpsink进行流式处理_C_Video Streaming_Gstreamer - Fatal编程技术网

使用appsrc通过gstreamer udpsink进行流式处理

使用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

我的源代码主要来自于通过XimageSink在本地播放时工作良好的源代码

此示例应用程序将使用appsrc作为源,并使用caps强制格式,将黑/白(每秒切换一次)视频生成为Xv窗口输出。我们使用colorspace转换元素来确保向X服务器提供正确的格式。我们用可变帧速率(0/1)配置视频流,并在输出缓冲区上设置时间戳,以便每秒播放2帧

管道在本地播放时喜欢这样:

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