ffmpeg的使用,及发送媒体流的一些简单介绍

在以前的文章谈过对ffmpeg的编译。这里谈谈ffmpeg的最简单的使用。

ffmpeg使用语法:

ffmpeg [[options][`-i' input_file]]... {[options] output_file}...

最简单的使用:ffmpeg –i test_mp4.mp4 test_mpg.mpg (将输入的mp4容器格式的文件转换成mpg格式文件)

我在做一些机器人控制实验时常常会得到很多的jpg格式的文件,将这些文件改成连续的名称,例如test_jpg00001, test_jpg00002等等,然后可以通过ffmpeg生成一个视频文件,这会很方便演示,例如: 
  ffmpeg -r 15 -b 1800 -i test_jpg00%03d.jpg test_mp4.mp4 (这里,-r 代表fps 设置帧频;–b 代表bitrate 设置比特率; test_jpg00%03d.jpg中%03d代表最后三位数字)

做实验时,直接通过摄像头可以得到raw picture(也就是YUV或RGB文件),这时也可以通过ffmpeg将它们转换成mpg或任意容器格式。例如:ffmpeg -s 320*240 -i test_yuv.yuv test_mpg.mpg (这里请注意在写入输入文件之前,必须给ffmpeg传入帧大小,也就是通过 –s 来设置帧大小)。当然了,你也可以将例如mpg格式的文件转换成YUV文件,即,ffmpeg -i test_mpg.mpg test_yuv.yuv。 
 

除了转换格式ffmpeg还可以做更多的事,例如发送媒体流,通过rtp协议,可以输入以下的命令:

ffmpeg -fflags +genpts -re -i test.mpg -vcodec copy -an -f rtp rtp://127.0.0.1:10000 -vn -acodec copy -f rtp rtp://127.0.0.1:20000 -newaudio

其中,-re 代表本地帧频读数据;-an 代表不使能音频纪录;127.0.0.1也就是本地回环地址,我们常常使用它来测试本机的网络配置,通过PING127.0.0.1来检测本机的网卡和IP协议;当然我们还可以使用它来代替SERVER的IP地址,这样程序就可以在同一台机器上运行,所有的SERVER的资源就可以装在本机,我们程序就可以运行。

使用ffmpeg发送了媒体流后,我们可以在写字板里写一个SDP文件(附注:文件的后缀也是.sdp),例如:

v=0 
  o=- 0 0 IN IPV4 127.0.0.1 
  t=0 0 
  s=No Name  
  a=tool:libavformat 52.23.1 
  m=video 10000 RTP/AVP 32 
  c=IN IP4 127.0.0.1 
  b=AS:104857 
  m=audio 20000 RTP/AVP 14 
  c=IN IP4 127.0.0.1 
  b=AS:64

然后通过vlc就打开这个sdp文件,就可以播放我们发送的媒体流了。

#####    #####

谈到了媒体流的发送,我想继续延伸聊聊:我们也可以使用以前介绍过的LIVE555.COM提供的LIVE555 Media Server,来发送媒体流,很简单:可以直接下载live555MediaServer.exe,然后输入: “live555MediaServer 你的文件”,例如live555MediaServer D:\test.mpg。媒体流就发送了。然后可以使用vlc来播放,vlc rtsp://本机IP/文件名(附注:在Window里通过ipconfig可以看本机IP), 例如 vlc rtsp://131.***.**.101/D:\test.mpg。

结语:播放媒体流使用vlc或一些其他的工具就在GUI里可以简单的执行了,这篇文章最后一部分是希望给读者提供一些思路,例如使用ffmpeg,LIVE555发送,并使用不同的发送方式和接受方式。