各直播网站直播教程都有提到OBS(Open Broadcaster Software),但在archlinux编译成功,运行却报错. 后来了解到ffmpeg可以推流,花了一两天简单的了解ffmpeg的命令参数.并成功在斗鱼上面直播.

主要参考 ffmpeg 的 wiki 的 Encoding for streaming sites

斗鱼的rtmp推流地址是 rtmp地址 加 / 加 直播码. 示例: rtmp://send3.douyutv.com/live/209282rr9tq83W9I?wsSecret=6d7cb31146e722d561e55eb75f9b6e6f&wsTime=54e051be. 注意此直播码每次关闭直播后会变动.

关于码率

请参考此文章 斗鱼TV游戏直播教程-OBS直播软件篇[推荐]

1Mbps左右的请设置最大码率为500kbps,压缩分辨率为720x480或与480接近。 2Mbps左右的请设置最大码率为1500kbps,压缩分辨率为1280x720或与720接近。 低于0.5Mbps的,还是去看直播吧。

对应的参数为 maxrate 与 bufsize, bufsize 斗鱼是推荐是 maxrate 一样.

ffmpeg 示例

捕获桌面,麦克风,摄像头命令参数示例:

$ ffmpeg -f x11grab -video_size 1680x1050 -framerate 30 -i :0.0 \
-f v4l2 -video_size 320x240 -framerate 30 -i /dev/video0 \
-f alsa -ac 2 -i hw:0,0 -filter_complex \
"[0:v]scale=1024:-1,setpts=PTS-STARTPTS[bg]; \
 [1:v]scale=120:-1,setpts=PTS-STARTPTS[fg]; \
 [bg][fg]overlay=W-w-10:10,format=yuv420p[out]"
-map "[out]" -map 2:a -vcodec libx264 -preset veryfast \
-maxrate 3000k -bufsize 4000k -acodec libmp3lame -ar 44100 -b:a 128k \
-f flv rtmp://send3.douyutv.com/live/209282rr9tq83W9I?wsSecret=6d7cb31146e722d561e55eb75f9b6e6f&wsTime=54e051be

循环播放文件示例,使用的是 concat 特性.

ffmpeg -re -f concat -i playlist.txt \
-vcodec libx264 -preset veryfast -maxrate 500k -bufsize 500k \
-vf "format=yuv420p:scale=720:-1" -g 48 -acodec libmp3lame -b:a 96k -ar 44100 \
-f flv "rtmp://send3.douyutv.com/live/209282rezHd16aNm?wsSecret=f759db6daa4137c184e2f16125d8af5d&wsTime=54dd5819"

视频加文字示例,使用的是 drawtext 特性.

ffmpeg -re -f concat -i playlist.txt \
-vcodec libx264 -preset veryfast -maxrate 500k -bufsize 500k \
-vf "format=yuv420p:scale=720:-1" -g 48 -acodec libmp3lame -b:a 96k -ar 44100 \
-filter:v "drawtext=fontsize=12:fontcolor=red:fontfile=/usr/share/fonts/TTF/DejaVuSans.ttf:text='CodeMonkeys %{localtime\:%T}':y=17:x=900" \
-f flv "rtmp://send3.douyutv.com/live/209282rezHd16aNm?wsSecret=f759db6daa4137c184e2f16125d8af5d&wsTime=54dd5819"

大部分功能ffmpeg wiki都有示例,比如配置摄像头,配置捕获桌面的,请记住 wiki 地址 https://trac.ffmpeg.org/wiki

另外 ffmpeg 的参数排列你要看懂.

usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...

ffmpeg 通用选项 输入文件选项 输入文件 很多的输入文件 输出文件选项 输出文件 很多的输出文件 也就是说,可以有多个输入,也可以有多个输出.这样可以实现推流到网站时同时本地保存一份.

关于在linux服务器播放视频.

安装可以直接安装静态编译包,解压后就可以运行了, 而且一般比较新. http://johnvansickle.com/ffmpeg/

测试过在阿里云的最低配置,码率设置为500k,差不多刚好够播放. 通过ifstat命令测试,2M带宽播放码率1500k也够了,就实时转码CPU不够用. 请提前把文件转换成flv格式,这样应该就不卡了.

关于在斗鱼上面播放视频

貌似大部分有版权问题的视频都不能放,但不清楚别人为什么能放.