在Gstreamer上传输MP4视频文件

时间:2015-04-22 09:59:54

标签: udp video-streaming gstreamer mp4 rtp

我第一次使用gstreamer并尝试使用Gstreamer(RTP和UDP)将MP4视频文件从服务器传输到客户端。 我试图使用的命令行:

在服务器端:

gst-launch-1.0 -v filesrc location = file_name.mp4 ! decodebin ! x264enc ! rtph264pay ! udpsink host=192.1XX.XX.XX port=9001

在客户端:

gst-launch-1.0 -v udpsrc port=9001 caps = "application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, payload=(int)96" ! rtpstreamdepay ! decodebin ! videoconvert ! autovideosink

我能够成功流式传输视频。但是,我不希望在服务器端进行decodebinx264enc操作。 因此,我删除了这些操作并在服务器端使用了此命令行

gst-launch-1.0 -v filesrc location =file_name.MP4 !  rtpstreampay ! udpsink host=192.1XX.XX.XX port=9001

我无法播放视频。

有人可以指导我,为什么我们需要在发送数据时在这种情况下进行解码和编码操作。 有没有办法在不使用这些操作的情况下发送数据。

感谢。

2 个答案:

答案 0 :(得分:3)

无需解码和重新编码。你所追求的元素是多路分解器,在这种情况下,@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (data != null) { if(requestCode == 1) { ... ... } else if (requestCode == 2) { ... ... } } }

这是来自它的文件夹:

  

将QuickTime文件解复用为音频和视频流ISO基础   媒体文件格式支持(mp4,3gpp,qt,mj2)

将视频容器解压缩到足以直接从容器读取编码视频流就足够了。 qtdemux容器通常包含mp4个编码视频,因此您的服务器端管道将简化为:

H.264

答案 1 :(得分:0)

确保您知道您尝试流式传输的视频的编码。使用 VLC,您可以获得编解码器信息:

对于 H264:

enter image description here

以下管道有效:

filesrc location=<video location>.mp4 ! qtdemux ! h264parse config-interval=-1 ! rtph264pay pt=96 name=pay0

对于 mp4v:

enter image description here

以下管道有效:

filesrc location=<video location>.mp4 ! qtdemux ! mpeg4videoparse ! rtpmp4vpay pt=96 name=pay0

如果您只关心按原样流式传输视频,则上述示例也适用。如果您想更改编码或任何其他视频属性,则需要不同的管道。