视频流应用程序使用GStreamer的要求

时间:2011-04-27 19:48:33

标签: video-streaming h.264 gstreamer rtp

我想使用GStreamer创建一个无线流视频应用程序。 我的要求是: H.264编解码器,RTP / MPEG2-TS流和网络上的RTP协议 任何人都可以解释我需要为此创建任何插件,或者现有的插件可以提供所有功能吗?如果是,那么我应该使用哪些插件? 我想补充一点,我将使用手机捕获视频,并通过网络从该设备传输到一个或多个特定地址。 请回复 。 提前谢谢。

2 个答案:

答案 0 :(得分:3)

gstrtpbin应该可以处理所有的流媒体需求。它允许您将RTP流传输到一个或多个地址。有关如何使用它的说明,gstreamer source code有几个不同语言的几个例子。 Gstreamer还允许您使用x264将视频编码为H.264流。这包含在“丑陋”的插件包中。

答案 1 :(得分:1)

考虑RTP(根据需要更改主机/ IP),以下管道应该有所帮助。根据您的要求,您可以将ffenc_mpeg4替换为x264enc pass=qual quantizer=20 tune=zerolatency,将rtpmp4vpay替换为rtph264pay。同样,在解码器方面,您可以将ffdec_mpeg4替换为x264dec,将rtpmp4vdepay替换为rtph264depay。很少有其他事情可能需要调整。

1)RTP发送网络摄像头和音频

gst-launch gstrtpbin name=rtpbin latency=0 v4l2src device=/dev/video0 ! typefind ! ffmpegcolorspace ! videoscale ! video/x-raw-yuv, width=640, height=480 ! videorate ! video/x-raw-yuv, framerate=30/1 ! ffenc_mpeg4 ! rtpmp4vpay send-config=true ! rtpbin.send_rtp_sink_0 rtpbin.send_rtp_src_0 ! udpsink port=5502 host=127.0.0.1 rtpbin.send_rtcp_src_0 ! udpsink port=5510 host=127.0.0.1 sync=false async=false udpsrc port=5510 ! rtpbin.recv_rtcp_sink_0 autoaudiosrc samplesperbuffer=1000 ! alawenc ! rtppcmapay ! rtpbin.send_rtp_sink_1 rtpbin.send_rtp_src_1 ! udpsink port=5504 host=127.0.0.1 rtpbin.send_rtcp_src_1 ! udpsink port=5512 host=127.0.0.1 sync=false async=false udpsrc port=5512 ! rtpbin.recv_rtcp_sink_1

2)RTP接收网络摄像头和音频

gst-launch gstrtpbin name=rtpbin2 latency=0 udpsrc caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)MP4V-ES, profile-level-id=(string)1" port=5502 ! rtpbin2.recv_rtp_sink_0 rtpbin2. ! rtpmp4vdepay ! ffdec_mpeg4 ! videoscale ! video/x-raw-yuv, width=640, height=480 ! videorate ! video/x-raw-yuv, framerate=30/1 ! ffmpegcolorspace ! autovideosink udpsrc port=5510 ! rtpbin2.recv_rtcp_sink_0 rtpbin2.send_rtcp_src_0 ! udpsink host=127.0.0.1 port=5510 sync=false async=false udpsrc caps="application/x-rtp,media=(string)audio, clock-rate=(int)8000, encoding-name=(string)PCMA" port=5504 ! rtpbin2.recv_rtp_sink_1 rtpbin2. ! rtppcmadepay ! alawdec ! autoaudiosink buffer-time=10000 udpsrc port=5512 ! rtpbin2.recv_rtcp_sink_1 rtpbin2.send_rtcp_src_1 ! udpsink host=127.0.0.1 port=5512 sync=false async=false