当初毕业设计的题目选了视频直播,真是一时冲动啊。
于是想到用ffmpeg,它太出名了。找到的资料一大堆,看了一下又没有自己想要的,那时候的自己只是想了解如何入门,如何使用ffmpeg。如今毕业答辩已过,分数以出,空闲之余记录下心得。
ffmpeg开源,下载到源码后,编译是个问题。特别是在window下编译花费了很多时间,具体步骤有人已经总结了:http://www.360doc.com/content/12/0719/18/2660674_225285935.shtml
其实window下的编译不是必要的,因为已经有人帮忙编译了,http://ffmpeg.zeranoe.com/builds/
static版本是静态编译版本,shared是有动态链接库,dev这个是开发版本。
linux下的编译就简单了,装好yasm这些环境,对ffmpeg源码configure,make,make install,make clean就好了。
目标:搭建一个视频直播系统,c/s架构,服务端运行在linux系统下,录制客户端和播放客户端都在window下。
测试环境:window系统,linux虚拟机。
程序:window需要ffmpeg.exe(可以在static那里得到),播放器(ffplay.exe,vlc等都可以)
linux需要ffserver。
首先要编写好配置文件ffserver.conf:
Port 9999
BindAddress 0.0.0.0
MaxClients 1000
MaxBandwidth 100000
<Feed feed1.ffm>
File feed1.ffm
noAudio
FileMaxSize 100K
</Feed>
<Stream test.flv>
Feed feed1.ffm
Format flv
noAudio
StartSendOnKey
</Stream>
<Stream movie.flv>
file /root/work/rtspSer/vod/movie.flv
Format flv
</Stream>
<Stream stat.html>
Format status
</Stream>
9999是服务端口,feed1.ffm和test.flv是直播部分,movie.flv是点播部分,stat.html是一个概览页面,可以用http://ip:9999/stat.html来访问它。
更多配置可以参考http://www.ffmpeg.org/ffserver.html
然后运行ffserver -f ffserver.conf
接着在window下录制视频,并上传到服务器,vfwcap是采集设备设备,也可以用dshow,具体可以用那些设备,参考http://www.ffmpeg.org/ffmpeg-devices.html
还可以指定分辨率和码率等各种参数,这里用默认的参数。
注意这里只采集了视频,没有音频。
最后一步,播放
直播效果如下,时延根据ffserver.conf里的
FileMaxSize 100K
数据不同而有不同的影响。
总之,这是利用ffmpeg现有程序搭建直播系统的最简单的例子。(简单到我后来舍弃掉它,因为毕业题目要自己写代码)
而ffmpeg.exe,ffserver这些都是利用ffmpeg库写出来的程序,我们可以参考它里面的代码,完成自己的程序。