在Gstreamer上流式传输MP4视频文件

Pra*_*wal 9 mp4 udp rtp video-streaming gstreamer

我是第一次使用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
Run Code Online (Sandbox Code Playgroud)

在客户端:

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
Run Code Online (Sandbox Code Playgroud)

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

gst-launch-1.0 -v filesrc location =file_name.MP4 !  rtpstreampay ! udpsink host=192.1XX.XX.XX port=9001
Run Code Online (Sandbox Code Playgroud)

我无法播放视频.

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

谢谢.

Han*_* R. 5

无需解码和重新编码。您需要的元素是解复用器,在这种情况下为qtdemux

这里是文档的片段:

将QuickTime文件多路分解为音频和视频流ISO基本媒体文件格式支持(mp4、3gpp,qt,mj2)

只需解开打开的视频容器并直接从容器中读取编码的视频流就足够了。mp4容器通常包含H.264编码的视频,因此您的服务器端管道可以简化为:

gst-launch-1.0 -v filesrc location = file_name.mp4 ! qtdemux ! video/x-h264 ! rtph264pay ! udpsink host=192.1XX.XX.XX port=9001
Run Code Online (Sandbox Code Playgroud)