作者a34021501 (CARD)
看板Live
标题[心得] 个人实况伺服器与高画质转码
时间Tue Mar 21 04:24:56 2017
各位好,小弟的电脑又被GANK了!
所以来分享一下之前实况的参数!
希望大家可以提升画质增加母数!
毕竟似乎只有一些高画质被GANK!
需要一台空闲不使用的前游戏机!
几乎只有显示卡加速转码画质好!
简单解释一下: CPU CPU CPU CPU v.s. GPU GPU GPU GPU GPU GPU
(通常匹配记忆体颗粒的数量)
BUT..GPU里面有至少数百个CPU
以我的前显卡Bart为例共960个CPU
而CPU基本上越多核心越适合~转档
硬碟容量就看要不要自己录影留存
接下来将一步一步安装实况转档机
1.安装Linux系统
我是使用Debain8.3.0共13张DVD全部拔县断网安装
如果你不在意网路上自动更新伺服器可以连网安装
总之一定要断网安装後修改/etc/apt/source.list
将里13张ISO档之路径资料夹放进source.list里面
deb file:/opt/repo/debian-8.3.0-amd64-DVD-1 jessie main contrib
deb file:/opt/repo/debian-8.3.0-amd64-DVD-2 jessie main contrib
deb file:/opt/repo/debian-8.3.0-amd64-DVD-3 jessie main contrib
deb file:/opt/repo/debian-8.3.0-amd64-DVD-4 jessie main contrib
deb file:/opt/repo/debian-8.3.0-amd64-DVD-5 jessie main contrib
deb file:/opt/repo/debian-8.3.0-amd64-DVD-6 jessie main contrib
deb file:/opt/repo/debian-8.3.0-amd64-DVD-7 jessie main contrib
deb file:/opt/repo/debian-8.3.0-amd64-DVD-8 jessie main contrib
deb file:/opt/repo/debian-8.3.0-amd64-DVD-9 jessie main contrib
deb file:/opt/repo/debian-8.3.0-amd64-DVD-10 jessie main contrib
deb file:/opt/repo/debian-8.3.0-amd64-DVD-11 jessie main contrib
deb file:/opt/repo/debian-8.3.0-amd64-DVD-12 jessie main contrib
deb file:/opt/repo/debian-8.3.0-amd64-DVD-13 jessie main contrib
当然要先把每张ISO光碟之内容物复制进指定资料夹
之後要执行 # apt-get update 指令扫描整个清单
我的意思是若没改清单,预设会连上网扫描云端更新 (有中毒风险)
建议大家装完系统後执行 apt-get install build-essential 即可安装基本的编译器
2.安装 nginx 与 nginx-rtmp-module (即实况转播伺服器的rtmp通讯兵)
nginx
http://nginx.org/
http://nginx.org/download/
nginx-rtmp-module
http://github.com/arut/nginx-rtmp-module
这部分是最麻烦的,若碰到系统缺少lbrary时会错误 (*1.电脑也要查一下图书馆)
总之缺少library的时候使用 apt-cache search [******] 即可找到相关的图书馆
若找到 ******-dev 就是代表这是一个用於建构你的程式码所需要的图书建议安装
举个例子我常常编译 nginx 时会出现 libssl 的错误 ,我会先输入指令试着搜寻
apt-cache search libssl 通常会跳出 libssl-dev 这个图书可以供我安装解问题
即 apt-get install libssl-dev 即可以安装 libssl-dev 然後让我的编译器闭嘴
我好像忘了说编译 nginx with rtmp module 的指令,我觉得我提供的网站更详细
不过我还是说一下,在 nginx 的原始码资料夹下输入以下指令并加入 rtmp-module
不过还是先看一下清单选择一下 nginx-rtmp-module 目前推荐的 nginx 版本较好
# mkdir -p /opt/src
# cd /opt/src
/opt/src# wget
http://nginx.org/download/nginx-1.11.5.tar.gz
/opt/src# tar -xzf nginx-1.11.5.tar.gz
/opt/src# wget
http://github.com/arut/nginx-rtmp-module/archive/master.zip
/opt/src# unzip master.zip
/opt/src# cd nginx-1.11.5/
/opt/src/nginx-1.11.5# ./configure --add-module=/opt/src/nginx-rtmp-module-master
/opt/src/nginx-1.11.5# make
/opt/src/nginx-1.11.5# make install
如果以上安装流程出现任何问题可以在下方推文发问,我会尽可能回答大家的问题
接下来就可以到 /usr/local/nginx/conf/nginx.conf 修改设定档,请参考网页吧
如果想要有不错的连线与流量显示页面可以参考 rtmp-module 中 stat.xsl之用法
3. 安装 libx264 与 ffmpeg (即实况转码伺服器的h264翻译官)
x264 (含lib)
http://www.videolan.org/developers/x264.html
ffmpeg
http://ffmpeg.org/
总之先下载最新版的程式码,因为通常x264都是经常在更新保持最佳编码效率与效能兼顾
当然ffmpeg也很重要因为有时候会编码失败通通都是ffmpeg的错!除非你的电脑有稳题!
这次我就不提供详细的解决方案了,我只提供下载路径与编译的方式还有最後要如何用!
/opt/src# wget ftp://ftp.videolan.org/pub/x264/snapshots/last_x264.tar.bz2
/opt/src# tar -xvjf last_x264.tar.bz2
/opt/src# wget
http://ffmpeg.org/releases/ffmpeg-3.2.4.tar.bz2
/opt/src# tar -xvjf ffmpeg-3.2.4.tar.bz2
一定有人问为什麽解压缩的参数不同,因为我也不知道为何tar能解压缩其实还蛮神奇的
总之tar与bz2的关系就像ffmpeg与x264的关系,如果有闲可以去下载tar与bz2的原始码!
/opt/src# cd x264-snapshot-20170319-2245/ (*时间流逝可能让路径不同请自行修正)
/opt/src/x264-snapshot-20170319-2245# cd ..
为了确保下载到今天的最新版本的 x264 所以我要选择使用另一个方法下载 x264 好吗?
/opt/src# git clone
http://git.videolan.org/git/x264.git
/opt/src# cd x264
/opt/src/x264# ./configure --enable-static --enable-shared --enable-lto --enable-strip --enable-pic
/opt/src/x264# make
/opt/src/x264# make install
说明一下static library与shared library的不同好了,就差在.a是塞进执行档.so放系统
不过通常我都是用 $LD_LIBRARY_PATH 指定要用哪个版本的.so,还可以排PATH的优先顺序
不过一般人如果要将自己的 lib/*.so 列入清单,只要在 /etc/ld.so.conf.d/ 加lib路径
然後执行 ldconfig 就可以更新,而且 /etc/profile.d/ 可以放登入时要执行的系统参数
例如置换 $PATH 与 $LD_LIBRARY_PATH 可以用 export PATH=myPATH:$PATH 让myPATH优先
好了废话讲太多了,不过还可以加在个人的 ~/.bashrc 或 ~/.profile 等相关方式设定之
接下来我们要安装ffmpeg并引入libx264的函式库(图书馆)让ffmpeg可以使用x264压缩编码
/opt/src/x264# cd ../ffmpeg-3.2.4/
/opt/src/ffmpeg-3.2.4# ./configure --enable-gpl --enable-libx264 --enable-pic --enable-hardcoded-tables -enable-memalign-hack --enable-memory-poisoning
(不理新版x264) --extra-ldflags=-static
(编不过的参数) --enable-lto
/opt/src/ffmpeg-3.2.4# make
/opt/src/ffmpeg-3.2.4# make install
基本上就会置换你系统中的 ffmpeg 让它可以用最新版的 libx264 并高画质压缩你的实况
------------------------------------------------------------------------------
以下这三行给有需要很多版本的勇者: (这样就可以把x264直接塞进ffmpeg避免被换掉)
/opt/src/ffmpeg-3.2.4# ./configure --help
/opt/src/ffmpeg-3.2.4# ./configure --prefix=/opt/ffmpeg-3.2.4_with_current_x264ver#.# --enable-gpl --enable-libx264 --enable-pic --enable-thumb --enable-lto --enable-hardcoded-tables --disable-safe-bitstream-reader --enable-memalign-hack --enable-memory-poisoning --extra-ldflags=-static
/opt# ln -s ffmpeg-3.2.4/ ffmpeg
其中--enable-lto旧版gcc应该可以编得过, --enable-thumb好像是ARM的指令及加速160%
------------------------------------------------------------------------------
4.转妈参数设定: (我直接分享我的YouTube与Twitch参数罗)
在分享我的参数之前,请您先使用 ldd ffmpeg 检视图书馆中 libx264 路径是否正确无误
-twitch_720p.sh---------------------------------------------------------------
!#/bin/sh
ffmpeg -i rtmp://127.0.0.1/live_in/CardLin -vcodec libx264 -preset veryfast -x264opts "qp=25:keyint=100:min-keyint=100:threads=4:opencl=1:opencl_device=0:partitions=all:aq-mode=2:trellis=2:deblock=-1,-1:rc-lookahead=25:scenecut=25:ref=1:b-adapt=2" -maxrate 2300k -bufsize 23000k -s 1280x720 -r 50 -force_fps -sws_flags lanczos -acodec copy -f flv rtmp://127.0.0.1/twitch_live_out/CardLin -rtmp_buffer 30000 -rtmp_live live
------------------------------------------------------------------------------
-youtube_1080p.sh-------------------------------------------------------------
!#/bin/sh
ffmpeg -i rtmp://127.0.0.1/live_in/CardLin -vcodec libx264 -preset veryfast -x264opts "qp=25:keyint=100:min-keyint=100:threads=8:opencl=1:opencl_device=0:partitions=all:aq-mode=2:trellis=2:deblock=-1,-1:rc-lookahead=25:scenecut=25:ref=1:b-adapt=2" -maxrate 8000k -bufsize 80000k -s 1920x1080 -r 50 -force_fps -acodec copy -f flv rtmp://127.0.0.1/youtube_live_out/CardLin -rtmp_buffer 30000 -rtmp_live live
------------------------------------------------------------------------------
分析一下:这两个是画质还不错的低码率动态码率参数!以下是你有可能会更改的数据!
threads=8 //执行序数量,建议最多为实体核心数*1.5
opencl=1 //是否开启OpenCL加速,建议一定要开启
opencl_device=0 //设定OpenCL装置编号 (多张GPU才有效)
keyint, min-keyint = 100 //FPS等级的keyframe_interval, 建议2秒即
r 50 //FPS设定成50
s 1920x1080 //画面宽长大小
sws_flags lanczos //使用lanczos的方法降低解析度
好啦,今天就分享到这边了,聪明的你应该有发现127.0.0.1可以改成其他电脑的IP位址
如果你有多部旧电脑的话就可以用全部的电脑效能一起做出和大型网站一样多种解析度!
再提供两个指令给大家自己查询要如何使用ffmpeg与如何搭配libx264的"..."内设定值!
$ ffmpeg --help full
$ x264 --fullhelp
总结就是我会把我的OBS的rtmp网址设为实况伺服器,然後输出25Mbps以上的高画质!
然後再到我的实况伺服器或其他的子伺服器输入指令以转码并输出到不同的实况网站中!
可以在 nginx 设置 push 到实况网站,当然你要 push 到另一个实况伺服器当分流也可~
所以基本上大家可以参考一下转出来的流量有多宽再决定要投放到哪个区域的实况网站!
补充一下OBS的设定好了,可以用"使用装置时间戳记"的320kbps,44100hz音质会较好!
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 1.164.252.34
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Live/M.1490041511.A.C4D.html
跟大家开个玩笑,所以修改了内容,其实我只是在比拟通讯兵责任较轻,翻译官要负责!
※ 编辑: a34021501 (1.164.252.34), 03/21/2017 04:42:55
1F:推 wyiwyi: 推一下 03/21 06:50
3F:→ a34021501: 有提到git之内容可能下载到不当的内容,所以台湾的电信 03/21 19:53
4F:→ a34021501: 业者针对http提供TranspartentProxy可有效防范下载失败 03/21 19:55
※ 编辑: a34021501 (1.164.252.34), 03/21/2017 21:33:45
来讲一下压缩参数好了,不过我不是开发人员,我所知道的都是我在网路上搜寻到的结果
首先讲一下压缩时的 I P B 三种 frame!! 在时间的流逝就像 IBBPBBPBBIBBPBBPBBI....
讲白了 I 最重要! P 次要! B 普通! 说普通就是因为如果 B 的品质差画面也会很差
所以重点是 I frame 已经固定了,反正我也不知道以後的 x264 如何定义 I frame间距
不过那不重要,重要的是 P frame 是由 I frame 搭配一些参数计算而成的预测未来画面
我要说未来是因为那个未来是 I 的未来,但 P 其实是要与真实的未压缩影像匹配算参数
总而言之在你看到 IPB 这三种 frame 出现在你的萤幕上的时候,代表那是以前发生的事
好了,现在来提一提 B frame 其实可以定义 bframe=0 关掉所有 B 就是只有 IP 这两种
总之建议你不要设定 bframe=0 因为我加了 b-adapt=2 就是 Adaptive BFrame decision
再来就是我最喜欢的 trellis2 让影像压缩使用全模式的 decision 使整个压缩效率增加
然後再来是我觉得应该这些参数都应该预设开启可是不知道为什麽没有开可能我没很懂吧
先来说说 weightp 好了,因为 B 通常夹在两个 P 中间,所以 B 是由 P 经过向量计算!
我还是没讲 weightp 因为我真的不太懂,不过看手册的意思大概是有些P重要有些不重要
所以就以这 weight 比重来计算出要用哪个 P 参考较多,哪个 P 参考较少,画质会变好
反正 I 还是最重要,毕竟 P 是由 I 计算而成,所以 me 与 subme 有很多种模式可以调
但我建议还是保留预设值,因为通常调高之後但脑会无法负荷而无法正常实况例如没画面
至於 aq-mode 似乎是用於评估上面这些参数及压缩後的影像是否满足我们设定的 qp=25
总之 aq-mode = 2 是我玩一些明亮游戏时用的参数, aq-mode = 3 是我玩恐怖游戏所用
毕竟 aq-mode = 3 有考虑黑暗场景,所以我还是设成 aq-mode = 2 好了压缩率应该较高
至於 weightp 我还是觉得怪怪的所以我先设为 veryfast preset 的预设参数即不复制图
毕竟经过了一段时间,这张图像如果还一样我觉得真的要考虑是否有画面定格的情况发生
以上是我个人的理解,并且我其实不明白 x264 与 ffmpeg 的搭配与组合似乎有点很复杂
我的意思是说 ffmpeg 有很多种不同版本,而且还附上不同的 resize 程式码让我好难选
因为我从 3840x2160 解析度降到 1920x1080 的之後还要再降到 1280x720 字体有点模糊
我可能还要再花点时间查询一下是否有包含增强边缘的 Edge Detection Resize Method!
总之这样应该可以非常低流量又可以有很清晰的字体,变更解析度似乎是 ffmpeg 的责任
等我研究出来再跟大家分享,今天先分享到这了!感谢大家的支持!记得用 qp 调整画质
qp 数值越低越接近原始图片,但我觉得如果原始图片很糟糕就让 qp 增加也没甚麽感觉!
※ 编辑: a34021501 (1.164.252.34), 03/22/2017 03:18:24