ffmpeg+ffserver搭建流媒体服务器

http://blog.chinaunix.net/uid-9688646-id-3399113.html

ffmpeg和ffserver配合使用可以实现实时的流媒体服务。
 
一、理解
里边主要有如下四个东西,搞清楚他们之间的关系就差不多明白了。
1. ffmpeg
 
2. ffserver
 
3. ffserver.conf
 
4. feed1.ffm
 
 
1. ffmpeg,负责媒体文件的transcode工作,把你服务器上的源媒体文件转换成要发送出去的流媒体文件。
 
2. ffserver,负责响应客户端的流媒体请求,把流媒体数据发送给客户端。
 
3. ffserver.conf,ffserver启动时的配置文件,在这个文件中主要是对网络协议,缓存文件feed1.ffm(见下述)和要发送的流媒体文件的格式参数做具体的设定。
 
4. feed1.ffm,可以看成是一个流媒体数据的缓存文件,ffmpeg把转码好的数据发送给ffserver,如果没有客户端连接请求,ffserver把数据缓存到该文件中。
 
 
二、http的建立流程
1. 配置ffserver.conf文件(初次接触可以参考ffmpeg源码中的doc/ffserver.conf,里边有详细的注释)
如下写一个示例
Port 10535
RTSPPort 5454
BindAddress 0.0.0.0、
MaxHTTPConnections 2000
MaxClients 1000
MaxBandwidth 1000
CustomLog -
NoDaemon
 
#实时流数据配置(参考源码ffmpeg/test/下的ffserver.conf)
<Feed feed1.ffm>
File /tmp/feed1.ffm
FileMaxSize 1M
ACL allow 127.0.0.1
</Feed>
 
<Stream test.avi>
Feed feed1.ffm
Format avi
#
BitExact
DctFastint
IdctSimple
VideoFrameRate 10
VideoSize 352x288
VideoBitRate 100
VideoGopSize 30
NoAudio
 
PreRoll 10
StartSendOnKey
MaxTime 100
 
</Stream>
 
#已经存在的文件而非实时流
 
<Stream test.flv>
File "/project/apps/ffserver/test.flv"
Format flv
</Stream>
 
 
2、如何实现播放
(1)实时流用http传输
如果传输硬盘上的文件,则:
ffserver -f myfile/ffmpeg0.8.9/ffserver.conf & ffmpeg -i inputfile(输入文件) http://localhost:10535/feed1.ffm
如何传输摄像头捕获的实时流,则: