【问题标题】:How can I stream mjpeg file as rtsp如何将 mjpeg 文件流式传输为 rtsp
【发布时间】:2013-08-22 07:52:27
【问题描述】:

我们有一个 mjpeg 视频,从网络摄像头获取并存储到 *.avi 文件中,仍然编码为 mjpeg。

我们需要将此文件作为 rtsp 重新流式传输(并且仍将 mjpeg 保留在那里,即不解码)。目标是为处理视频的软件模拟获取此视频的网络摄像头。该文件可以用 vlc/ffplay 打开,没有任何问题。 ffmpeg 的行为就像它正在流式传输一样,但是,ffplay/vlc 无法打开此流。

我们尝试使用 gstreamer 进行流式传输。

1) 我们没有为 gstreamer 管道找到免费的 rtsp sink 元素。那么,rtspsink 是否有免费的类似物来使用 gst-launch 启动这个管道?我们需要并且只需要演员,所以我们不需要像 rtspsink 那样高级的元素。

2) 我们还尝试构建自己的简单 rtsp 服务器,如http://weeklybuild.com/2013/01/creating-an-rtsp-stream-with-gstreamer/ 中所述

将 videotestsrc 替换为 filesrc;但是我们应该在那里使用什么样的元素?仅使用 filesrc 无济于事;我们会遇到与使用 ffmpeg 流式传输相同的问题。但是我们需要什么样的元素,如果我们不想解码/编码它,只是为了流式传输文件(重现网络摄像头实际所做的事情)。

 $ ffplay rtsp://127.0.0.1:8554/test -loglevel debug
 avplay version 0.8.5-6:0.8.5-1, Copyright (c) 2003-2012 the Libav developers
 built on Jan 13 2013 12:05:48 with gcc 4.7.2
 configuration: --arch=amd64 --enable-pthreads --enable-runtime-cpudetect --extra-version='6:0.8.5-1' --libdir=/usr/lib/x86_64-linux-gnu --prefix=/usr --enable-bzlib --enable-libdc1394 --enable-libdirac --enable-libfreetype --enable-frei0r --enable-gnutls --enable-libgsm --enable-libmp3lame --enable-librtmp --enable-libopencv --enable-libopenjpeg --enable-libpulse --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-vaapi --enable-vdpau --enable-libvorbis --enable-libvpx --enable-zlib --enable-gpl --enable-postproc --enable-swscale --enable-libcdio --enable-x11grab --enable-libx264 --enable-libxvid --shlibdir=/usr/lib/x86_64-linux-gnu --enable-shared --disable-static
 avutil      configuration: --arch=amd64 --enable-pthreads --enable-runtime-cpudetect --extra-version='6:0.8.4-1' --libdir=/usr/lib/x86_64-linux-gnu --prefix=/usr --enable-bzlib --enable-libdc1394 --enable-libdirac --enable-libfreetype --enable-frei0r --enable-gnutls --enable-libgsm --enable-libmp3lame --enable-librtmp --enable-libopencv --enable-libopenjpeg --enable-libpulse --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-vaapi --enable-vdpau --enable-libvorbis --enable-libvpx --enable-zlib --enable-gpl --enable-postproc --enable-swscale --enable-libcdio --enable-x11grab --enable-libx264 --enable-libxvid --shlibdir=/usr/lib/x86_64-linux-gnu --enable-shared --disable-static
 avcodec     configuration: --arch=amd64 --enable-pthreads --enable-runtime-cpudetect --extra-version='6:0.8.4-1' --libdir=/usr/lib/x86_64-linux-gnu --prefix=/usr --enable-bzlib --enable-libdc1394 --enable-libdirac --enable-libfreetype --enable-frei0r --enable-gnutls --enable-libgsm --enable-libmp3lame --enable-librtmp --enable-libopencv --enable-libopenjpeg --enable-libpulse --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-vaapi --enable-vdpau --enable-libvorbis --enable-libvpx --enable-zlib --enable-gpl --enable-postproc --enable-swscale --enable-libcdio --enable-x11grab --enable-libx264 --enable-libxvid --shlibdir=/usr/lib/x86_64-linux-gnu --enable-shared --disable-static
 avformat    configuration: --arch=amd64 --enable-pthreads --enable-runtime-cpudetect --extra-version='6:0.8.4-1' --libdir=/usr/lib/x86_64-linux-gnu --prefix=/usr --enable-bzlib --enable-libdc1394 --enable-libdirac --enable-libfreetype --enable-frei0r --enable-gnutls --enable-libgsm --enable-libmp3lame --enable-librtmp --enable-libopencv --enable-libopenjpeg --enable-libpulse --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-vaapi --enable-vdpau --enable-libvorbis --enable-libvpx --enable-zlib --enable-gpl --enable-postproc --enable-swscale --enable-libcdio --enable-x11grab --enable-libx264 --enable-libxvid --shlibdir=/usr/lib/x86_64-linux-gnu --enable-shared --disable-static
 swscale     configuration: --arch=amd64 --enable-pthreads --enable-runtime-cpudetect --extra-version='6:0.8.4-1' --libdir=/usr/lib/x86_64-linux-gnu --prefix=/usr --enable-bzlib --enable-libdc1394 --enable-libdirac --enable-libfreetype --enable-frei0r --enable-gnutls --enable-libgsm --enable-libmp3lame --enable-librtmp --enable-libopencv --enable-libopenjpeg --enable-libpulse --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-vaapi --enable-vdpau --enable-libvorbis --enable-libvpx --enable-zlib --enable-gpl --enable-postproc --enable-swscale --enable-libcdio --enable-x11grab --enable-libx264 --enable-libxvid --shlibdir=/usr/lib/x86_64-linux-gnu --enable-shared --disable-static
postproc    configuration: --arch=amd64 --enable-pthreads --enable-runtime-cpudetect --extra-version='6:0.8.4-1' --libdir=/usr/lib/x86_64-linux-gnu --prefix=/usr --enable-bzlib --enable-libdc1394 --enable-libdirac --enable-libfreetype --enable-frei0r --enable-gnutls --enable-libgsm --enable-libmp3lame --enable-librtmp --enable-libopencv --enable-libopenjpeg --enable-libpulse --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-vaapi --enable-vdpau --enable-libvorbis --enable-libvpx --enable-zlib --enable-gpl --enable-            postproc --enable-swscale --enable-libcdio --enable-x11grab --enable-libx264 --enable-libxvid --shlibdir=/usr/lib/x86_64-linux-gnu --enable-shared --disable-static
libavutil    51. 22. 1 / 51. 22. 1
libavcodec   53. 35. 0 / 53. 35. 0
libavformat  53. 21. 1 / 53. 21. 0
libavdevice  53.  2. 0 / 53.  2. 0
libavfilter   2. 15. 0 /  2. 15. 0
libswscale    2.  1. 0 /  2.  1. 0
libpostproc  52.  0. 0 / 52.  0. 0
[rtsp @ 0x7f558c0008c0] method DESCRIBE failed: 503 Service Unavailable
[rtsp @ 0x7f558c0008c0] CSeq: 2
 Server: GStreamer RTSP server
 Date: Thu, 22 Aug 2013 07:49:30 GMT

 rtsp://127.0.0.1:8554/test: Invalid data found when processing input

当我尝试按照示例构建的 gstreamer 服务器时,一切都很好,即使用 videotestsrc

【问题讨论】:

    标签: ffmpeg video-streaming gstreamer video-processing


    【解决方案1】:

    仅使用 filesrc 元素是行不通的,因为它没有提供适当的上限来描述它生成的缓冲区的内容。您需要使用的实际元素取决于容器和编解码器。如果例如容器是avi,视频编解码器是mjpeg,你需要这样一个管道:

    filesrc location=video.avi ! avidemux ! jpegdec ! x264enc ! rtph264pay name=pay0 pt=96
    

    还有一个通用元素decodebin2,自动检测容器和编解码器:

    filesrc location=video.avi ! decodebin2 ! x264enc ! rtph264pay name=pay0 pt=96
    

    【讨论】:

    • 太棒了!谢谢你!这有帮助;我意识到我错过了任何 *.avi 处理;我需要的真正管道是 filesrc location=/home/ilya/file.avi ! AVIDUX ! rtpjpegpay name=pay0 pt=96 因为我还想以 mjpeg 流式传输它
    猜你喜欢
    • 2011-11-30
    • 2015-06-24
    • 1970-01-01
    • 2013-01-26
    • 1970-01-01
    • 2020-10-06
    • 2020-06-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多