如何从 FFMPEG 生成 SDP 文件

Posted

技术标签:

【中文标题】如何从 FFMPEG 生成 SDP 文件【英文标题】:How to generate SDP file from FFMPEG 【发布时间】:2012-04-12 10:53:57 【问题描述】:

因此,我一直在与 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

我的 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 

【问题讨论】:

【参考方案1】:

当使用-sdp_file path/to/file 指定时,FFMPG 会生成一个 SDP 文件

文档摘录:

-sdp_file file (global) Print sdp information for an output stream to file. This allows dumping sdp information when at least one output isn’t an rtp stream. (Requires at least one of the output formats to be rtp).

【讨论】:

我爱你 o/ 你让我免于烦恼【参考方案2】:

以防万一有人想找到如何使用 ffmpeg C 代码执行此操作,您可以使用 av_sdp_create 到 generate an sdp string

【讨论】:

【参考方案3】:

https://***.com/a/16469378/2097284 更详细地解释了如何制作.sdp 文件,以及如何将其传递给ffplay

【讨论】:

【参考方案4】:

通常当输出是一个 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

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

无论如何,你可以做的是第一次生成 sdp 文件,只要你不改变视频特性(分辨率格式......)或 rtp 地址,这个 sdp 文件将是有效的,并且你的以前的命令可以使用它!

希望对你有帮助

【讨论】:

lucabe72.blogspot.com/2010/04/rtp-streaming-with-ffmpeg.html 可能相关 这是我的命令: ffmpeg -i rtp://239.255.42.42:5004 c:/33030ooo.mp4 > c:/config.sdp ----- 但使 config.sdp 为空! @Mr.Hyde 您想通过 rtp 流式传输 mp4 视频,对吗?试试这个(我没有用新的 ffmpeg cli 测试过)ffmpeg -i c:/33030ooo.mp4 rtp://239.255.42.42:5004 > c:/config.sdp

以上是关于如何从 FFMPEG 生成 SDP 文件的主要内容,如果未能解决你的问题,请参考以下文章

安装 FFMPEG 以从虚拟主机上的视频文件生成缩略图

使用ffmpeg生成视频缩略图;从 RTMP 服务器抓取

将图像编码为 h264 和 rtp 输出:没有 sprop-parameter-sets 的 SDP 文件无法播放

如何在服务器上使用 ffmpeg 从 WebRTC 流中获取音频和视频

ffmpeg 从 avi 文件生成无法播放的 MP4 文件

FFMPEG 音频封装编码