-
Notifications
You must be signed in to change notification settings - Fork 5
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
mangege
committed
Feb 15, 2015
1 parent
a20d442
commit 7b044d6
Showing
1 changed file
with
84 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,84 @@ | ||
--- | ||
layout: post | ||
title: "Linux使用ffmpeg直播推流" | ||
date: 2015-02-15 15:44:21 | ||
categories: tech | ||
--- | ||
|
||
各直播网站直播教程都有提到OBS(Open Broadcaster Software),但在archlinux编译成功,运行却报错. | ||
后来了解到ffmpeg可以推流,花了一两天简单的了解ffmpeg的命令参数.并成功在斗鱼上面直播. | ||
|
||
主要参考 ffmpeg 的 wiki 的 [Encoding for streaming sites](http://trac.ffmpeg.org/wiki/EncodingForStreamingSites) | ||
|
||
斗鱼的rtmp推流地址是 *rtmp地址 加 / 加 直播码*. | ||
示例: `rtmp://send3.douyutv.com/live/209282rr9tq83W9I?wsSecret=6d7cb31146e722d561e55eb75f9b6e6f&wsTime=54e051be`. | ||
注意此直播码每次关闭直播后会变动. | ||
|
||
|
||
#### 关于码率 | ||
请参考此文章 [斗鱼TV游戏直播教程-OBS直播软件篇[推荐]](http://www.douyutv.com/cms/zhibo/201311/13/250.shtml) | ||
|
||
> 1Mbps左右的请设置最大码率为500kbps,压缩分辨率为720x480或与480接近。 | ||
> 2Mbps左右的请设置最大码率为1500kbps,压缩分辨率为1280x720或与720接近。 | ||
> 低于0.5Mbps的,还是去看直播吧。 | ||
对应的参数为 maxrate 与 bufsize, bufsize 斗鱼是推荐是 maxrate 一样. | ||
|
||
#### ffmpeg 示例 | ||
|
||
捕获桌面,麦克风,摄像头命令参数示例: | ||
|
||
```shell | ||
$ 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](https://trac.ffmpeg.org/wiki/Concatenate) 特性. | ||
|
||
```shell | ||
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](https://ffmpeg.org/ffmpeg-filters.html#drawtext-1) 特性. | ||
|
||
```shell | ||
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 的参数排列你要看懂. | ||
```text | ||
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}... | ||
``` | ||
ffmpeg 通用选项 输入文件选项 输入文件 很多的输入文件 输出文件选项 输出文件 很多的输出文件 | ||
也就是说,可以有多个输入,也可以有多个输出.这样可以实现推流到网站时同时本地保存一份. | ||
|
||
|
||
#### 关于在linux服务器播放视频. | ||
安装可以直接安装静态编译包,解压后就可以运行了, 而且一般比较新. <http://johnvansickle.com/ffmpeg/> | ||
|
||
测试过在阿里云的最低配置,码率设置为500k,差不多刚好够播放. | ||
通过ifstat命令测试,2M带宽播放码率1500k也够了,就实时转码CPU不够用. | ||
请提前把文件转换成flv格式,这样应该就不卡了. | ||
|
||
|
||
#### 关于在斗鱼上面播放视频 | ||
貌似大部分有版权问题的视频都不能放,但不清楚别人为什么能放. |