如何从FFMPEG生成SDP文件

Mob*_*Lab 8 windows ffmpeg rtp video-streaming sdp

因此,我一直在与FFMPEG合作开展一个项目,该项目涉及使用RTP将视频从一台计算机流式传输到另一台计算机.我想把它带到ffmpeg并使用ffserver在本地网络上显示它.

据我了解,您需要有一个SDP信息,以便接收ffmpeg实例可以解释RTP流.尽管网页说什么,但我无法在打印到控制台的信息中找到SDP信息.

如何强制传输ffmpeg实例输出SDP信息,以便我可以用它来配置我的接收端?

现在,我正在测试Windows 7,但最终的解决方案将在Linux上.

我正在运行测试的命令是

ffmpeg -fflags +genpts -i files\2005-SFSD-sample-mpeg1.mpg -threads 0 -r 10 -g 45
-s 352x240 -deinterlace -y 2005.mp4 -an -threads 0 -r 10 -g 45 -s 352x240 
-deinterlace -f rtp rtp://192.168.200.198:9008
Run Code Online (Sandbox Code Playgroud)

我的ffmpeg信息是......

ffmpeg version 0.8, Copyright (c) 2000-2011 the FFmpeg developers built on Jun 23 2011 14:22:23 with gcc 4.5.3 
configuration: 
--disable-static  
--enable-shared 
--enable-gpl  
--enable-version3 
--enable-memalign-hack  
--enable-runtime-cpudetect 
--enable-avisynth 
--enable-bzlib 
--enable-frei0r 
--enable-libopencore-amrnb 
--enable-libopencore-amrwb 
--enable-libfreetype 
--enable-libgsm 
--enable-libmp3lame 
--enable-libopenjpeg 
--enable-librtmp 
--enable-libschroedinger 
--enable-libspeex 
--enable-libtheora 
--enable-libvorbis 
--enable-libvpx 
--enable-libx264 
--enable-libxavs 
--enable-libxvid 
--enable-zlib 
--disable-outdev=sdl 
  libavutil    51.  9. 1 / 51.  9. 1 
  libavcodec   53.  7. 0 / 53.  7. 0 
  libavformat  53.  4. 0 / 53.  4. 0 
  libavdevice  53.  1. 1 / 53.  1. 1 
  libavfilter   2. 23. 0 /  2. 23. 0 
  libswscale    2.  0. 0 /  2.  0. 0 
  libpostproc  51.  2. 0 / 51.  2. 0 
Run Code Online (Sandbox Code Playgroud)

Cam*_*une 5

/sf/answers/1152856491/更详细地解释了如何制作.sdp文件以及如何将其传递给ffplay.


小智 2

通常,当输出是一个 rtp 流时,ffmpeg 会在控制台中打印 sdp 信息,因此您只需重定向它(然后使用 sdp ):

ffmpeg -fflags +genpts -i files\2005-SFSD-sample-mpeg1.mpg  -an -threads 0 -r 10 -g 45 -s 352x240 -deinterlace -f rtp rtp://192.168.200.198:9008 > config.sdp
Run Code Online (Sandbox Code Playgroud)

但从你的命令看来,你想对两个输出进行一种编码...如果两个输出是 rtp (对视频+音频有用),它工作得很好,但当 1 个输出是 rtp 时,我无法让它打印 sdp和另一个 mp4 ...不确定是否可能

无论如何,您可以做的是第一次生成 sdp 文件,只要您不更改视频特性(分辨率格式...)或 rtp 地址,此 sdp 文件将有效,并且您之前的命令将与它一起工作!

希望这可以帮助