fmpeg进行推流,把服务器上的源媒体文件转换成要发送出去的流媒体文件,
ffserver则负责响应客户端的流媒体请求,把流媒体数据发送给客户端。
ffserver.conf,ffserver启动时的配置文件,在这个文件中主要是对网络协议,缓存文件feed1.ffm和要发送的流媒体文件的格式参数做具体的设定。
feed1.ffm,可以看成是一个流媒体数据的缓存文件,ffmpeg把转码好的数据发送给ffserver,如果没有客户端连接请求,ffserver把数据缓存到该文件中。
ffserver.conf示例如下:
Port 8090 BindAddress 0.0.0.0 MaxHTTPConnections 2000 MaxClients 1000 MaxBandwidth 30000 CustomLog - NoDaemon #NoDefaults <Feed feed1.ffm> File /tmp/feed1.ffm FileMaxSize 1M ACL allow 127.0.0.1 </Feed> <Stream test1.ts> Feed feed1.ffm #File btv2.ts Format mpegts #BitExact #DctFastint #IdctSimple VideoFrameRate 25 #VideoBufferSize 4096 #VideoSize 720x576 VideoSize 1920x1080 VideoBitRate 9000 NoAudio </Stream> <Stream stat.html> Format status ACL allow localhost ACL allow 192.168.0.0 192.168.255.255 </Stream>
主要分为4个部分,服务器端口配置,ffm配置,流配置及stat.html。
可以参考ffmpeg源码中的doc/ffserver.conf,里边有详细的注释
启动ffserver和ffmpeg。ffserver先于ffmpeg启动,它在启动的时候需要加参数-f指定其配置文件ffserver.conf。ffserver启动后,feed1.ffm就会被创建,发现feed1.ffm开始的部分已经写入了内容,可以找到关键字ffm以及向客户端传送流的配置信息,在feed1.ffm做缓冲用的时候,这些信息是不会被覆盖掉的,就把它们理解为feed1.ffm文件的头吧。
ffserver启动后,ffmpeg启动,它启动时加的一个关键参数就是“http://ip:10535/feed1.ffm”,其中ip是运行ffserver主机的ip,如果ffmpeg和ffserver都在同一系统中运行的话,用localhost也行。ffmpeg启动后会与ffserver建立一个连接(短暂的连接),通过这第一次的连接,ffmpeg从ffserver那里获取了向客户端输出流的配置,并把这些配置作为自己编码输出的配置,然后ffmpeg断开了这次连接,再次与ffserver建立连接(长久的连接),利用这个连接ffmpeg会把编码后的数据发送给ffserver。
3.VLC控件
ActiveX VLC Player是基于ActiveX控件的播放器。有VLC作支持,VLC控件播放支持HTTP、RTMP、HLS,而且支持MMS、RTSP以及UDP这些协议(VLC Media Player支持的协议它都支持)。
新版本VLC安装时,会有vlc activeX控件安装选项,注意一下就行了。古早版本的vlc控件安装麻烦点。
但是由于ActiveX控件,除了IE,其他浏览器并不支持(自 Chrome 45 起,将不再提供 NPAPI 支持;Google和Adobe将致力于直接内建于新接口(PPAPI)的Flash功能)。
所以网页播放提供一下几种播放器,参考大神的文章:http://blog.csdn.net/leixiaohua1020/article/details/43936415。
4.实现过程
ffserver先启动起来,
ffserver -f ffserver.conf
其中的参数配置可参照上面,/tmp/feed1.ffm
ffmpeg -i output.ts http://localhost:8090/feed1.ffm
输出的视频地址为
http://推流机器IP:8090/test1.ts