RTMP是一种设计用来进行实时数据通信的网络协议,主要用来在Flash/AIR平台和支持RTMP协议的流媒体/交互服务器之间进行音视频和数据通信。支持该协议的软件包括Adobe Media ServerUltrant Media Serverred5nginx

HTTP Live Streaming(HLS)是苹果公司(Apple Inc.)实现的基于HTTP的流媒体传输协议,可实现流媒体的直播和点播,相对于常见的流媒体直播协议,例如RTMP协议、RTSP协议、MMS协议 等,HLS直播最大的不同在于,直播客户端获取到的,并不是一个完整的数据流。HLS协议在服务器端将直播数据流存储为连续的、很短时长的媒体文件 (MPEG-TS格式),而客户端则不断的下载并播放这些小文件,因为服务器端总是会将最新的直播数据生成新的小文件,这样客户端只要不停的按顺序播放从服务器获取到的文件,就实现了直播。由此可见,基本上可以认为,HLS是以点播的技术方式来实现直播。由于数据通过HTTP协议传输,所以完全不用考虑防火墙或者代理的问题,而且分段文件的时长很短,客户端可以很快的选择和切换码率,以适应不同带宽条件下的播放。不过HLS的这种技术特点,决定了它的延迟 一般总是会高于普通的流媒体直播协议。

nginx配合ffmpeg做流媒体服务器的原理是: nginx通过rtmp模块提供rtmp服务, ffmpeg推送一个rtmp流到nginx, 然后客户端通过访问nginx来收看实时视频流. HLS也是差不多的原理,只是最终客户端是通过HTTP协议来访问的,但是ffmpeg推送流仍然是rtmp的。

1、推送视频文件到rtmp上

ffmpeg -re -i "D:\videos\test1.mp4"-vcodec libx264 -vprofile baseline -acodec aac -ar 44100 -strict -2 -ac 1 -f flv-s 1280x720 -q 10 rtmp://127.0.0.1:1935/live/test1

2、推送到视频文件到hls上

ffmpeg -re -i "D:\videos\test1.mp4"-vcodec libx264 -vprofile baseline -acodec aac -ar 44100 -strict -2 -ac 1 -f flv-s 1280x720 -q 10 rtmp://127.0.0.1:1935/hls/test2

3、执行ffmpeg命令进行rtsp协议转成rtmp:

ffmpeg -i"rtsp://admin:[email protected]/h264/ch1/main/av_stream" -f flv -r25 -s 640x480 -an "rtmp://127.0.0.1:1935/live/test3"

-i:后面是我所需要的摄像头协议

-f flv:后面是我要转到nginxrtmp服务器上

-s:视频解析度:(分配率)也就是能调视屏的清晰度,如果在本机上测试建议640*480就好,改变视屏流的解析式cpu会消耗很大

(rtmp服务地址:rtmp://127.0.0.1:1935/myapp/test2)

127.0.0.1nginx启动的机器ip

1935:端口号(之前在nginx.conf里配置的)

live:是application 后面的名称

test3:可以随便起,记得到时候访问rtmp时要一致