最近,有个小项目要求在PC端时时播放监控设备视频。
在网上找了资料,发现视频直播格式的地址有三种格式:rtsp、rtmp、以及http协议中的.m3u8
在这之前一直不知道这几种格式在做视频直播中的区别是什么:
把网上查的资料复制一小段:
RTSP协议:是流媒体协议,RTSP协议是公有协议,有专门的机构维护RTSP协议一般传输的是ts、mp4格式流
RTMP协议:是流媒体协议,RTMP是Adobe的私有协议,没有完全公开,一般传输的是flv、f4v格式流
转载:什么是RTMP 和 RTSP?它们之间有什么区别?_rtmp和rtsp的区别_一口Linux的博客-CSDN博客
本实例拿rtsp格式的直播视频做讲解:
(1) 我是从第三方做监控视频那获取的视频流地址,地址为:
(2)拿到这个地址后,通过ffmpeg转化为在浏览器上可以识别的.m3u8格式的地址
ffmpeg -i rtsp://121.xxxxxxxxxxxxx:554/xxxxxxxxxxxd8-0-0 -c copy -f hls -hls_list_size 0 -hls_time 5 -hls_list_size 50 -hls_flags 50 你本地根目录地址\test\hls\test.m3u8
执行成功后,会一直在对对应的目录下 生成一个test.m3u8视频文件和顺序生成的ts文件
注意:这个执行的进程不要停止,停止后就不生成ts文件,视频直播也会停止播放
参数说明:
- -hls_time n: 设置每片的长度,默认值为2。单位为秒
- -hls_list_size n:设置播放列表保存的最多条目,设置为0会保存有所片信息,默认值为5
- -hls_wrap n:设置多少片之后开始覆盖,如果设置为0则不会覆盖,默认值为0.这个选项能够避免在磁盘上存储过多的片,而且能够限制写入磁盘的最多的片的数量(这个参数存在争议,有的说用-hls_wrap n可以分片,可是我用这个参数报错,看文档发现可以运用-hls_flags n来分片覆盖)
- -hls_start_number n:设置播放列表中sequence number的值为number,默认值为0
具体其他ffmpeg参数可以参考:https://www.cnblogs.com/fieldtianye/p/13427303.html
(3)生成的文件在本地就是这样
(4)建立一个test.html文件,进行测试
结果:就可以时时播放监控设备的视频了
这种操作需要在专门做视屏直播服务器下进行操作。因为通过ffmpeg rtsp转m3u8是实时进行的,如果多个视频同时进行转,播放可能有些卡顿,这个可自行测试效果