一篇文章带你FFmpeg到流媒体服务器开发( 二 )


[java] view plaincopy
ffmpeg -re -i "D:downloadfilmaqgy2.mp4" -vcodec libx264 -vprofile baseline -acodec aac
-ar 44100 -strict -2 -ac 1 -f flv -s 1280x720 -q 10 rtmp://ip:1935/
hls/test2
现在我们的流媒体服务器有两个实时流了,一个是rtmp的,另一个是hls的,用流媒体播放器播放一下,流媒体播放器可以用vlc也可以用ffmpeg带的ffplay.手机也是可以播放的.
上面这两个流的地址分别是:
第一个就是推送的地址: 
rtmp://serverIp:1935/myapp/test1
第二个是HTTP地址: 
http://serverIp:8080/hls/test2.m3u8
最后贴上一段对于HLS这个比较特殊的流媒体协议的解释:
HTTP Live Streaming(HLS)是苹果公司(Apple Inc.)实现的基于HTTP的流媒体传输协议,可实现流媒体的直播和点播,相对于常见的流媒体直播协议,例如RTMP协议、RTSP协议、MMS协议等,HLS直播最大的不同在于,直播客户端获取到的,并不是一个完整的数据流 。HLS协议在服务器端将直播数据流存储为连续的、很短时长的媒体文件(MPEG-TS格式),而客户端则不断的下载并播放这些小文件,因为服务器端总是会将最新的直播数据生成新的小文件,这样客户端只要不停的按顺序播放从服务器获取到的文件,就实现了直播 。由此可见,基本上可以认为,HLS是以点播的技术方式来实现直播 。由于数据通过HTTP协议传输,所以完全不用考虑防火墙或者代理的问题,而且分段文件的时长很短,客户端可以很快的选择和切换码率,以适应不同带宽条件下的播放 。不过HLS的这种技术特点,决定了它的延迟一般总是会高于普通的流媒体直播协议
用开源nginx-rtmp-module搭建flash直播环境
1、将nginx和nginx-rtmp-module的源码包解压PS:nginx-rtmp-module网址
https://github.com/arut/nginx-rtmp-module
 
2、进入nginx的源代码目录,编译./configure --add-module= 
--without-http_rewrite_modulemakemake install
3、写一个测试配置文件#user nobody;worker_processes 1;
error_log logs/error.log debug;#error_log logs/error.log notice;#error_log logs/error.log info;
#pid logs/nginx.pid;
events {worker_connections 1024;}
rtmp {server {listen 1935;
chunk_size 4096;
application myapp {live on;}}}
http {server {listen 8080;
location /stat {rtmp_stat all;rtmp_stat_stylesheet stat.xsl;}
location /stat.xsl {root /home/arut-nginx-rtmp-module-e5d61f2/;}
location / {root /home/arut-nginx-rtmp-module-e5d61f2/test/rtmp-publisher;}}}
4、启动
nginx/usr/local/nginx/sbin/nginx -c 
/home/arut-nginx-rtmp-module-e5d61f2/test/nginx.conf
5、用ffmpeg产生一个模拟直播源,向rtmp服务器推送ffmpeg -re -i ~/2012.flv -f flv 
rtmp://192.168.11.75/myapp/test1注意,源文件必须是H.264+AAC编码的 。192.168.11.75是运行nginx的服务器IP
6、访问
http://192.168.11.75:8080/stat,可以看到统计情况
7、网页播放测试,用nginx-rtmp-module自带的一个例子修改,
8、HLS测试(2013-4-20更新)修改测试的配置文件
nginx-rtmp-module还有许多其他特性,例如支持FLV/MP4的点播、HLS直播、多worker工作模式、push and pull工作模式等,以后慢慢挖掘
Nginx-RTMP功能调研:
1. RTMP协议介绍...2
2.RTMP server.3
2.1当前的流媒体server.3
2.2Wowza功能...3
3.Nginx-based RTMP server.5
3.1 Nginx rtmp 功能点...5
3.2编译nginx rtmp模块...6
3.3配置以及功能介绍...6
3.4用nginx-rtmp-module搭建直播环境...8
3.5Nginx rtmp对于HLS支持...13
协议介绍RTMP(Real Time Messaging Protocol)实时消息传送协议是Adobe Systems公司为Flash播放器和服务器之间音频、视频和数据传输开发的私有协议 。
它有三种变种:
1)工作在TCP之上的明文协议,使用端口1935;
2)RTMPT封装在HTTP请求之中,可穿越防火墙;
3)RTMPS类似RTMPT,但使用的是HTTPS连接;需要可以后台私信‘资料’
RTMP协议就像一个用来装数据包的容器,这些数据可以是AMF格式的数据,也可以是FLV中的视/音频数据 。一个单一的连接可以通过不同的通道传输多路网络流 。这些通道中的包都是按照固定大小的包传输的 。
一篇文章带你FFmpeg到流媒体服务器开发

文章插图
 
关注,私信【资料】免费获取!
大厂C++面试题库、BAT架构技术资料库(关注小编,后台私信【资料】)资料内容涵盖BAT架构技术与面试真题,减少你到处搜索资料的时间,成体系的实战技术知识,让你面试、进阶都更加容易!


推荐阅读