【问题标题】:Streaming MP4 Video File on Gstreamer在 Gstreamer 上流式传输 MP4 视频文件
【发布时间】:2015-06-29 21:41:18
【问题描述】:

我第一次使用 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

我无法流式传输视频。

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

谢谢。

【问题讨论】:

    标签: udp video-streaming gstreamer mp4 rtp


    【解决方案1】:

    不需要解码和重新编码。您所追求的元素是多路分解器,在本例中为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
    

    【讨论】:

      【解决方案2】:

      确保您知道要流式传输的视频的编码。使用 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
      

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

      【讨论】:

        猜你喜欢
        • 2012-10-25
        • 2019-01-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-17
        • 2016-06-20
        • 2023-03-31
        • 1970-01-01
        相关资源
        最近更新 更多