Skip to content

Commit

Permalink
add post
Browse files Browse the repository at this point in the history
  • Loading branch information
mangege committed Feb 15, 2015
1 parent a20d442 commit 7b044d6
Showing 1 changed file with 84 additions and 0 deletions.
84 changes: 84 additions & 0 deletions _posts/2015-02-15-1.md
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格式,这样应该就不卡了.


#### 关于在斗鱼上面播放视频
貌似大部分有版权问题的视频都不能放,但不清楚别人为什么能放.

0 comments on commit 7b044d6

Please sign in to comment.