我第一次使用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
我能够成功流式传输视频。但是,我不希望在服务器端进行decodebin
和x264enc
操作。
因此,我删除了这些操作并在服务器端使用了此命令行
gst-launch-1.0 -v filesrc location =file_name.MP4 ! rtpstreampay ! udpsink host=192.1XX.XX.XX port=9001
我无法播放视频。
有人可以指导我,为什么我们需要在发送数据时在这种情况下进行解码和编码操作。 有没有办法在不使用这些操作的情况下发送数据。
感谢。
答案 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:
以下管道有效:
filesrc location=<video location>.mp4 ! qtdemux ! h264parse config-interval=-1 ! rtph264pay pt=96 name=pay0
对于 mp4v:
以下管道有效:
filesrc location=<video location>.mp4 ! qtdemux ! mpeg4videoparse ! rtpmp4vpay pt=96 name=pay0
如果您只关心按原样流式传输视频,则上述示例也适用。如果您想更改编码或任何其他视频属性,则需要不同的管道。