好久没发过技术类文章了啊(((
嘛,最近会多发的
使用的方案是ffmpeg(解编码)hls(协议)[+livego(转换)flv(流)]+nginx(前端)
搭建时遇到了一些问题
在开始搭建的时候,对于ffmpeg的使用咱只会合并音视频(((虽然以前也有使用ffmpeg推流过
因为不清楚参数有什么用,导致中途出现了很多错误的用法。。。
一开始先是使用rtmp,然而rtmp没有合适的网页播放器(其实是咱不喜欢那个播放器),所以就改成使用nginx-rtmp-module的hls功能
然而很是奇怪的是按照官方教的方法写好参数之后,根本无法生成需求的文件。。。
后发现ffmpeg自己就可以使用hls,所以直接使用ffmpeg进行解编码,nginx只用来承载网站
使用ffmpeg串流时,发现多个不同的视频(包括音频)如果不进行量化,将会在两个视频之间出现PTS和DTS不适配问题,所以需要进行批处理(还是手动。。。)
一开始出现这个问题的时候,咱是将所有视频合并成同一个视频使用,但是非常臃肿并且在增加视频的时候会非常痛苦,故弃用
进行多个视频播放的时候,需要ffmpeg使用concat输入播放列表,咱使用了无限循环的方法进行重播,演示如下
(假设该文件名为list.txt)
ffconcat version 1.0
file 1.mp4
file 2.mp4
file list.txt
最后是输出多个画质,然后就是播放器部分了
以下是本次使用的ffmpeg命令
ffmpeg -threads 16 -re -f concat -i "/path/to/file/list.txt" \
-r 30 -s 1920x1080 -b:a 320k -ar 44100 -crf 23 -f hls -hls_time 4 -hls_list_size 4 -hls_wrap 8 /path/to/file/1080p.m3u8 \
-r 30 -s 1280x720 -b:a 320k -ar 44100 -crf 26 -f hls -hls_time 4 -hls_list_size 4 -hls_wrap 8 /path/to/file/720p.m3u8 \
-r 30 -s 854x480 -b:a 320k -ar 44100 -crf 28 -f hls -hls_time 4 -hls_list_size 4 -hls_wrap 8 /path/to/file/480p.m3u8
2019.19.19
修正一下,之前的命令已经被魔改
ffmpeg -threads 8 -max_interleave_delta 0 -re -f concat -i "/path/to/file/list.txt" \
-c:v libx264 -crf 25 -r 30 -s 1280x720 -b:a 320k -ar 44100 -f hls -hls_time 2 -hls_list_size 12 -hls_wrap 50 /path/to/file/720p.m3u8 \
-c:v libx264 -crf 30 -r 1 -s 2x2 -b:a 320k -ar 44100 -f hls -hls_time 2 -hls_list_size 12 -hls_wrap 50 /path/to/file/music.m3u8 \
-c copy -f hls -hls_time 2 -hls_list_size 12 -hls_wrap 50 /path/to/file/main.m3u8 \
-c copy -f flv "rtmp://127.0.0.1/live/full"
关于新版命令的说明:
第一行是导入视频和初始设定
第二行是转成720p
第三行是只播放音频,但是实际因为无法只输出音频所以加上了被处理后的视频(2x2
第四行是拷贝原视频的音视频流之后直接切片
第五行是输出到livego
播放器使用DPlayer,手机端其实可以直接输入m3u8地址进行收听
关于DPlayer的部署及使用,在其官网都有说明
不过咱是直接去公用cdn里找的相关文件,因为官网说的那两种安装方法咱都无法使用。。。
毕竟咱很菜,要是有谁能告诉咱到底该如何安装就好了。。。
剩下的就是映射到公网,收听即可
不过并没有用80和443端口,毕竟不想被查水表(送外卖)。。。
2019.8.31更新:行了,白研究了,可以说一个livego搞定一切,使用flv延迟还比hls低。。。。。。。。。。。。。。
2019.9.7更新:实际使用时发现flv并没有hls稳定,同时发现实时转换多分辨率对服务器负担也是比较大的,故改回hls并减少了可选分辨率
2019.10.19更新:更新了后续使用时的参数修改
2020.7.4更新:前两天看到了一张被送外卖的图(
这篇文章还没有人发言,快抢第一!