ffmpeg+ffserver搭建流媒体服务器
2016-06-21 09:16
471 查看
刚开始学习组播、直播方面的东西,简单总结一下利用ffmpeg+ffserver做电视信号流媒体实时直播。
总体架构就是dvb-IP网关将电视cable信号解扰解复用之后,读到ARM的内存缓冲区中,之后利用ffmpeg做视频推流,ffserver作为流媒体服务器。而在客户端,可以通过VLC或者ffplay打开直播视频,也可以利用IE加载VLC activex控件实现网页上播放。这样的纯HTTP播放方式,由于ts封装在网页实现播放可能比较麻烦,hls的实现可以参考下一篇文章《ffmpeg+nginx搭建HLS服务器及基于ARM实现的简单hls解决方案》
**1.视频编码格式、封装格式
2.ffserver.conf
3.VLC activeX
4.实现过程**
1.视频编码格式、封装格式:
AVI:可用MPEG-2, DIVX, XVID, WMV3, WMV4, WMV9, H.264
WMV:可用WMV3, WMV4, WMV9
RM/RMVB:可用RV40, RV50, RV60, RM8, RM9, RM10
MOV:可用MPEG-2, MPEG4-ASP(XVID), H.264
而目前HTML5直接可以播放的视频封装格式是3种:
第一,MP4,H264+AAC
第二,OGV,Ogg Theora+Ogg Vorbis
第三,WEBM,VP8
而rtmp好像只能传输flv和MP4视频格式,所以对于mpeg2video编码的视频,直接rtmp不行,这个希望大神指教一下。
2.ffserver
整体结构就如上图所示,
ffmpeg进行推流,把服务器上的源媒体文件转换成要发送出去的流媒体文件,
ffserver则负责响应客户端的流媒体请求,把流媒体数据发送给客户端。
ffserver.conf,ffserver启动时的配置文件,在这个文件中主要是对网络协议,缓存文件feed1.ffm和要发送的流媒体文件的格式参数做具体的设定。
feed1.ffm,可以看成是一个流媒体数据的缓存文件,ffmpeg把转码好的数据发送给ffserver,如果没有客户端连接请求,ffserver把数据缓存到该文件中。
ffserver.conf示例如下:
主要分为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先启动起来,
其中的参数配置可参照上面,/tmp/feed1.ffm
ffmpeg
总体架构就是dvb-IP网关将电视cable信号解扰解复用之后,读到ARM的内存缓冲区中,之后利用ffmpeg做视频推流,ffserver作为流媒体服务器。而在客户端,可以通过VLC或者ffplay打开直播视频,也可以利用IE加载VLC activex控件实现网页上播放。这样的纯HTTP播放方式,由于ts封装在网页实现播放可能比较麻烦,hls的实现可以参考下一篇文章《ffmpeg+nginx搭建HLS服务器及基于ARM实现的简单hls解决方案》
**1.视频编码格式、封装格式
2.ffserver.conf
3.VLC activeX
4.实现过程**
1.视频编码格式、封装格式:
AVI:可用MPEG-2, DIVX, XVID, WMV3, WMV4, WMV9, H.264
WMV:可用WMV3, WMV4, WMV9
RM/RMVB:可用RV40, RV50, RV60, RM8, RM9, RM10
MOV:可用MPEG-2, MPEG4-ASP(XVID), H.264
而目前HTML5直接可以播放的视频封装格式是3种:
第一,MP4,H264+AAC
第二,OGV,Ogg Theora+Ogg Vorbis
第三,WEBM,VP8
而rtmp好像只能传输flv和MP4视频格式,所以对于mpeg2video编码的视频,直接rtmp不行,这个希望大神指教一下。
2.ffserver
整体结构就如上图所示,
ffmpeg进行推流,把服务器上的源媒体文件转换成要发送出去的流媒体文件,
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
ffmpeg -i output.ts http://localhost:8090/feed1.ffm[/code]
输出的视频地址为
http://IP:8090/test1.ts
相关文章推荐
- #新闻拍一拍# IBM 招聘广告要求应聘者具备至少 12 年 K8S 使用经验
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- vivi下重新调整分区
- OCX打包成CAB包以及签名发布
- Managed Media Aggregation using Rtsp and Rtp
- ARM Linux系统启动
- Linux及ARM Linux程序开发笔记(零基础入门篇)
- [总结]FFMPEG视音频编解码零基础学习方法
- web下载的ActiveX控件自动更新
- C#编写ActiveX网页截图控件
- activex 控件制作成cab包的问题
- 利用Ffmpeg获得flv视频缩略图和视频时间的代码
- JScript中调用ActiveX获取访客网卡MAC地址实现代码
- 给ActiveX签名的实现方法详解
- codeigniter教程之上传视频并使用ffmpeg转flv示例
- JavaScript监测ActiveX控件是否已经安装过的代码
- 使用VS2010创建MFC ActiveX工程项目
- 使用VS2010 C#开发ActiveX控件(下),完整代码打包下载
- 使用VS2010 C#开发ActiveX控件(上)
- PHP使用ffmpeg给视频增加字幕显示的方法