经常使用的流媒体协议主要有 HTTP 渐进下载和基于 RTSP/RTP 的实时流媒体协议,这两种基本是彻底不一样的东西,目前比较方便又好用的是用 HTTP 渐进下载方法。在这个中 apple 公司的 HTTP Live Streaming 是这个方面的表明。它最初是苹果公司针对iPhone、iPod、iTouch和iPad等移动设备而开发的流.如今见到在桌面也有不少应用了,HTML5 是直接支持这个。 html
这里介绍hls协议的点播和直播。环境为windows7系统,使用nginx搭建http服务器,使用ffmpeg处理视频和流,使用VLC软件发出流,使用iphone5手机观看直播视频。 nginx
点播:准备好视频文件MP4,使用ffmpeg将其转成TS格式文件,而后继续使用ffmpeg将其切片并生成播放列表M3U8文件,将所得TS分片与M3U8文件放到nginx服务器目录下,开启http服务器后,同一局域网内用手机输入网络地址可查看点播视频。
直播:使用VLC软件将视频以UDP流的形式发出,使用ffmpeg接收这个UDP流并实时切割到http服务器下,开启服务器后,同一局域网内用手机输入网络地址可查看直播视频。 windows
官网下载windows版Nginx
打开配置文件nginx\conf\mime.types,为了支持hls协议,须要修改内容: 浏览器
在 application/zip zip; 这一行后面增长2行:
application/x-mpegURL m3u8;
application/vnd.apple.mpegurl m3u8; 服务器
在 video/x-msvideo avi;行后,增长1行:
video/MP2T ts; 网络
(1)开启http服务器:双击nginx.exe
(2)使用ffmpeg将mp4格式文件转成TS格式文件: app
ffmpeg -y -i input.mp4 -vcodec copy -acodec copy -vbsf h264_mp4toannexb output.ts iphone
(3)使用ffmpeg将TS文件切成ts分片并产生m3u8文件: ide
ffmpeg -i file.ts -c copy -map 0 -f segment -segment_list playlist.m3u8 -segment_time 2 output%03d.ts 加密
(4)将所得的ts分片和m3u8文件放到nginx\html 目录下
(5)手机浏览器输入[ http://192.168.1.110:80/playlist.m3u8 ]便可看到点播视频
注:192.168.1.110是本机的局域网ip,也即http服务器的ip
(1)开启http服务器:双击nginx.exe
(2)将视频以udp流的形式从vlc上发出来(具体方法请自查)
(3)使用ffmpeg接收udp流并自动实时切片到http服务器下:
ffmpeg -i udp://127.0.0.1:1234 -c copy -f hls -hls_time 2.0 -hls_list_size 5 -hls_wrap 5 G:\nginx\html\test.m3u8
(4)手机浏览器输入[ http://192.168.1.110:80/playlist.m3u8 ]便可看到直播视频