0

我们有一个 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/中所述

用 filesrc 替换 videotestsrc;但是我们应该在那里使用什么样的元素?仅使用 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

4

1 回答 1

3

仅使用 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
于 2013-08-23T22:39:55.697 回答