Ffmpeg 如何将mjpeg文件流式传输为rtsp

Ffmpeg 如何将mjpeg文件流式传输为rtsp,ffmpeg,video-streaming,gstreamer,video-processing,Ffmpeg,Video Streaming,Gstreamer,Video Processing,我们有一个mjpeg视频,从网络摄像头获得并存储到*.avi文件中,仍然编码为mjpeg 我们需要将该文件重新格式化为rtsp(并且仍然保留mjpeg,即不解码)。目标是为处理视频的软件模拟从中获取此视频的网络摄像头。该文件可以用vlc/ffplay打开,没有问题。ffmpeg的行为类似于流式传输,但ffplay/vlc无法打开此流 我们试着用gstreamer传输if 1) 我们没有为gstreamer管道提供免费rtsp接收器元件。那么,rtspsink是否有一个免费的类似物,可以通过gst

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

我们需要将该文件重新格式化为rtsp(并且仍然保留mjpeg,即不解码)。目标是为处理视频的软件模拟从中获取此视频的网络摄像头。该文件可以用vlc/ffplay打开,没有问题。ffmpeg的行为类似于流式传输,但ffplay/vlc无法打开此流

我们试着用gstreamer传输if

1) 我们没有为gstreamer管道提供免费rtsp接收器元件。那么,rtspsink是否有一个免费的类似物,可以通过gst启动此管道?我们需要并且只需要cast,所以我们不需要像rtspsink这样高级的元素

2) 我们还尝试构建自己的简单rtsp服务器,如中所述

用filesrc替换videotestsrc;但是我们应该在那里使用什么样的元素呢?仅使用filesrc没有帮助;我们遇到的问题与使用ffmpeg进行流传输一样。但是,如果我们不想对其进行解码/编码,只想对文件进行流式传输(再现网络摄像头的实际功能),那么我们需要什么样的元素呢


当我尝试使用示例中构建的gstreamer服务器时,一切都正常,即使用videotestsrc

仅使用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

仅使用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!阿维德莫斯!rtpjpegpay name=pay0 pt=96,因为我希望流式传输仍然很好!非常感谢。这有帮助;我意识到我错过了任何*.avi处理;我需要的真正管道是filesrc location=/home/ilya/file.avi!阿维德莫斯!rtpjpegpay name=pay0 pt=96,因为我想将其流式传输为mjpeg