個人實況伺服器與高畫質轉碼 - 實況
By Vanessa
at 2022-04-03T21:18
at 2022-04-03T21:18
Table of Contents
來講一下現在的心得
由於已經有 2160P 的螢幕上市
所以目前跟以前很不一樣了吧
那麼我來分享我現在的 nginx rtmp 轉碼設置
至於以前的軟件與現在的軟件是否正常
取決於 Kernel 的版本,我也無法多談
那麼如果你碰到任何奇怪的問題
可以用以下方法嘗試解決啟動問題
nginx@transcoder:/usr/local/nginx/conf$ killall nginx
nginx@transcoder:/usr/local/nginx/conf$ /usr/local/nginx/sbin/nginx -c
/usr/local/nginx/conf/nginx.conf
當然如果你想要用直播 key 來當關鍵字
那麼我也可以給一點資訊讓各位可以嘗試
以下程式碼可以將 rtmp://127.0.0.1/live_in/1080pCardLin
轉碼成 rtmp://127.0.0.1/live_out/720pCardLin
並且禁止其他 IP 來亂搞你的伺服器:
allow publish 127.0.0.1;
deny publish all;
allow play 127.0.0.1;
deny play all;
exec_options on;
exec_push /opt/ffmpeg/bin/ffmpeg -i
"rtmp://127.0.0.1/live_in/$name" -vcodec libx264 -preset veryfast -x264opts
"threads=6:opencl=0:opencl_device=0:partitions=all:aq-mode=2:trellis=2:deblock=-1,-1:rc-lookahead=10:scenecut=10:ref=1:b-adapt=2"
-maxrate 2500k -bufsize 25000k -s 1280x720 -sws_flags lanczos -acodec copy -f
flv "rtmp://127.0.0.1/live_out/720pCardLin"
2>>/usr/local/nginx/logs/ffmpeg-720p-$name.log name=1080pCardLin;
舉例到此結束,歡迎發問,有任何問題請直接在下方推文
感謝板
※ 引述《a34021501 (CARD)》之銘言:
: 標題: Re: [心得] 個人實況伺服器與高畫質轉碼
: 時間: Sun May 28 11:30:02 2017
:
: 各位好
:
: 有鑑於要達到類似YouTube的多編碼!
:
: 分享一下720p的轉碼設定值給大參考
:
: 如果有興趣還可以做出給手機的360p
:
: 不過我覺得這真的要很小心謹地使用
:
: 因為擁有個人影音播放伺服器可能會 ...被斷電(至少我前幾天停電週邊區域都沒停)
:
: 先不管那多了還是直接分享參數好了
:
: 有鑑於rtmp-nginx-module已有說明!
:
: 所以我們直接分享最重要的關鍵參數
:
: IP架構如下:
: 192.168.2.22 主要直播伺服器對內IP
: 192.168.2.33 次要直播伺服器對內IP
: 192.168.2.111 個人直播影像處理機IP <- 總之就是用這個來直播給上面兩部
:
: 我們先當作192.168.2.33不存在好了
:
: 因為這有可能會侵犯其他公司的IP呢
:
: 這是接收1080FullHD原始畫質的設定
:
: 所以要設定以下的參數到你的OBS裡!
: rtmp://192.168.2.22/live_in/CardLin
:
: 假設OBS出去的就是1080p不用再轉碼
:
: 先來描述一下架構由接收伺服器轉碼
:
: MoreServer
: |
: |
: 111 --1080p--> 22 --720p,1080p--> 33
: | |
: | |
: UserGroup1 UserGroup2
:
: -- nginx.conf -- 192.168.2.22 --
:
: application live_in {
: live on;
:
: allow play 127.0.0.1;
: deny play all;
:
: allow publish 192.168.2.111;
: deny publish all;
:
: drop_idle_publisher 10s;
:
: record off;
:
: # Transcode to 720p
: exec_push /opt/ffmpeg/bin/ffmpeg -i "rtmp://127.0.0.1/live_in/$name live=1" -vcodec libx264 -preset veryfast -x264opts "threads=4:opencl=1:opencl_device=0:partitions=all:aq-mode=2:trellis=2:deblock=-1,-1:rc-lookahead=18:scenecut=18:ref=1:b-adapt=2" -maxrate 2300k -bufsize 23000k -s 1280x720 -sws_flags lanczos -acodec copy -f flv "rtmp://127.0.0.1/720p_live/$name live=1" 2>>/usr/local/nginx/logs/ffmpeg-$name-720p.log;
:
: # Transcode to 1080p
: exec_push /opt/ffmpeg/bin/ffmpeg -i "rtmp://127.0.0.1/live_in/$name live=1" -vcodec copy -acodec copy -f flv "rtmp://127.0.0.1/1080p_live/$name live=1" 2>>/usr/local/nginx/logs/ffmpeg-$name-1080p.log;
:
: }
:
:
: application 720p_live {
: live on;
:
: allow publish 127.0.0.1;
: allow publish 192.168.2.33;
: deny publish all;
:
: record all;
: record_path /path_to_shared_storage/720p;
: recorder allin {
: record all;
: record_suffix 720p-%F-%H-%M-%S.flv;
: }
:
: # Coop Server
: exec_push /opt/ffmpeg/bin/ffmpeg -i "rtmp://127.0.0.1/720p_live/$name live=1" -vcodec copy -acodec copy -f flv "rtmp://192.168.2.33/720p_live/$name live=1" 2>>/usr/local/nginx/logs/ffmpeg-$name-720p-PushToCoop192.168.2.33.log;
:
: # Live Service
: exec_push /opt/ffmpeg/bin/ffmpeg -i "rtmp://127.0.0.1/720p_live/$name live=1" -vcodec copy -acodec copy -f flv "rtmp://127.0.0.1/live_out/720p$name live=1" 2>>/usr/local/nginx/logs/ffmpeg-$name-720p-live_out.log;
:
: }
:
: application 1080p_live {
: live on;
:
: allow publish 127.0.0.1;
: allow publish 192.168.2.33;
: deny publish all;
:
: record all;
: record_path /path_to_shared_storage/1080p;
: recorder allin {
: record all;
: record_suffix 1080p-%F-%H-%M-%S.flv;
: }
:
: # Coop Server
: exec_push /opt/ffmpeg/bin/ffmpeg -i "rtmp://127.0.0.1/1080p_live/$name live=1" -vcodec copy -acodec copy -f flv "rtmp://192.168.2.33/1080p_live/$name live=1" 2>>/usr/local/nginx/logs/ffmpeg-$name-1080p-PushToCoop192.168.2.33.log;
:
: # Live Service
: exec_push /opt/ffmpeg/bin/ffmpeg -i "rtmp://127.0.0.1/1080p_live/$name live=1" -vcodec copy -acodec copy -f flv "rtmp://127.0.0.1/live_out/1080p$name live=1" 2>>/usr/local/nginx/logs/ffmpeg-$name-1080p-live_out.log;
:
: }
:
: application live_out {
: live on;
:
: allow publish 127.0.0.1;
: deny publish all;
:
: record off;
:
: # Turn On optional exec
: exec_options on;
:
: # Condition: name=720pCardLin
: exec_push /opt/ffmpeg/bin/ffmpeg -i "rtmp://127.0.0.1/live_out/$name live=1" -vcodec copy -acodec copy -f flv "rtmp://live-tpe.twitch.tv/app/************************ live=1" 2>>/usr/local/nginx/logs/ffmpeg-$name-PushToTwitch.log name=720pCardLin;
:
: # Condition: name=1080pCardLin
: exec_push /opt/ffmpeg/bin/ffmpeg -i "rtmp://127.0.0.1/live_out/$name live=1" -vcodec copy -acodec copy -f flv "rtmp://a.rtmp.youtube.com/live2/************************ live=1" 2>>/usr/local/nginx/logs/ffmpeg-$name-PushToYouTube.log name=1080pCardLin;
:
: }
:
: --------------------------------
:
: 值得注意的是ffmpeg一定要絕對路徑
:
: 當然有人會將720p推送到Twitch網站
:
: 當然也可將1080p推送到YouTube網站
:
: 值得一提的是如果OBS選用GPU編碼器
:
: 可以設置到50Mbps傳輸給直播伺服器
:
: 讓直播伺服器壓縮到10Mbps以下輸出
:
: 謝謝大家
:
: ※ 引述《a34021501 (CARD)》之銘言:
: : 標題: [心得] 個人實況伺服器與高畫質轉碼
: : 時間: 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音質會較好!
: :
: : --
由於已經有 2160P 的螢幕上市
所以目前跟以前很不一樣了吧
那麼我來分享我現在的 nginx rtmp 轉碼設置
至於以前的軟件與現在的軟件是否正常
取決於 Kernel 的版本,我也無法多談
那麼如果你碰到任何奇怪的問題
可以用以下方法嘗試解決啟動問題
nginx@transcoder:/usr/local/nginx/conf$ killall nginx
nginx@transcoder:/usr/local/nginx/conf$ /usr/local/nginx/sbin/nginx -c
/usr/local/nginx/conf/nginx.conf
當然如果你想要用直播 key 來當關鍵字
那麼我也可以給一點資訊讓各位可以嘗試
以下程式碼可以將 rtmp://127.0.0.1/live_in/1080pCardLin
轉碼成 rtmp://127.0.0.1/live_out/720pCardLin
並且禁止其他 IP 來亂搞你的伺服器:
allow publish 127.0.0.1;
deny publish all;
allow play 127.0.0.1;
deny play all;
exec_options on;
exec_push /opt/ffmpeg/bin/ffmpeg -i
"rtmp://127.0.0.1/live_in/$name" -vcodec libx264 -preset veryfast -x264opts
"threads=6:opencl=0:opencl_device=0:partitions=all:aq-mode=2:trellis=2:deblock=-1,-1:rc-lookahead=10:scenecut=10:ref=1:b-adapt=2"
-maxrate 2500k -bufsize 25000k -s 1280x720 -sws_flags lanczos -acodec copy -f
flv "rtmp://127.0.0.1/live_out/720pCardLin"
2>>/usr/local/nginx/logs/ffmpeg-720p-$name.log name=1080pCardLin;
舉例到此結束,歡迎發問,有任何問題請直接在下方推文
感謝板
※ 引述《a34021501 (CARD)》之銘言:
: 標題: Re: [心得] 個人實況伺服器與高畫質轉碼
: 時間: Sun May 28 11:30:02 2017
:
: 各位好
:
: 有鑑於要達到類似YouTube的多編碼!
:
: 分享一下720p的轉碼設定值給大參考
:
: 如果有興趣還可以做出給手機的360p
:
: 不過我覺得這真的要很小心謹地使用
:
: 因為擁有個人影音播放伺服器可能會 ...被斷電(至少我前幾天停電週邊區域都沒停)
:
: 先不管那多了還是直接分享參數好了
:
: 有鑑於rtmp-nginx-module已有說明!
:
: 所以我們直接分享最重要的關鍵參數
:
: IP架構如下:
: 192.168.2.22 主要直播伺服器對內IP
: 192.168.2.33 次要直播伺服器對內IP
: 192.168.2.111 個人直播影像處理機IP <- 總之就是用這個來直播給上面兩部
:
: 我們先當作192.168.2.33不存在好了
:
: 因為這有可能會侵犯其他公司的IP呢
:
: 這是接收1080FullHD原始畫質的設定
:
: 所以要設定以下的參數到你的OBS裡!
: rtmp://192.168.2.22/live_in/CardLin
:
: 假設OBS出去的就是1080p不用再轉碼
:
: 先來描述一下架構由接收伺服器轉碼
:
: MoreServer
: |
: |
: 111 --1080p--> 22 --720p,1080p--> 33
: | |
: | |
: UserGroup1 UserGroup2
:
: -- nginx.conf -- 192.168.2.22 --
:
: application live_in {
: live on;
:
: allow play 127.0.0.1;
: deny play all;
:
: allow publish 192.168.2.111;
: deny publish all;
:
: drop_idle_publisher 10s;
:
: record off;
:
: # Transcode to 720p
: exec_push /opt/ffmpeg/bin/ffmpeg -i "rtmp://127.0.0.1/live_in/$name live=1" -vcodec libx264 -preset veryfast -x264opts "threads=4:opencl=1:opencl_device=0:partitions=all:aq-mode=2:trellis=2:deblock=-1,-1:rc-lookahead=18:scenecut=18:ref=1:b-adapt=2" -maxrate 2300k -bufsize 23000k -s 1280x720 -sws_flags lanczos -acodec copy -f flv "rtmp://127.0.0.1/720p_live/$name live=1" 2>>/usr/local/nginx/logs/ffmpeg-$name-720p.log;
:
: # Transcode to 1080p
: exec_push /opt/ffmpeg/bin/ffmpeg -i "rtmp://127.0.0.1/live_in/$name live=1" -vcodec copy -acodec copy -f flv "rtmp://127.0.0.1/1080p_live/$name live=1" 2>>/usr/local/nginx/logs/ffmpeg-$name-1080p.log;
:
: }
:
:
: application 720p_live {
: live on;
:
: allow publish 127.0.0.1;
: allow publish 192.168.2.33;
: deny publish all;
:
: record all;
: record_path /path_to_shared_storage/720p;
: recorder allin {
: record all;
: record_suffix 720p-%F-%H-%M-%S.flv;
: }
:
: # Coop Server
: exec_push /opt/ffmpeg/bin/ffmpeg -i "rtmp://127.0.0.1/720p_live/$name live=1" -vcodec copy -acodec copy -f flv "rtmp://192.168.2.33/720p_live/$name live=1" 2>>/usr/local/nginx/logs/ffmpeg-$name-720p-PushToCoop192.168.2.33.log;
:
: # Live Service
: exec_push /opt/ffmpeg/bin/ffmpeg -i "rtmp://127.0.0.1/720p_live/$name live=1" -vcodec copy -acodec copy -f flv "rtmp://127.0.0.1/live_out/720p$name live=1" 2>>/usr/local/nginx/logs/ffmpeg-$name-720p-live_out.log;
:
: }
:
: application 1080p_live {
: live on;
:
: allow publish 127.0.0.1;
: allow publish 192.168.2.33;
: deny publish all;
:
: record all;
: record_path /path_to_shared_storage/1080p;
: recorder allin {
: record all;
: record_suffix 1080p-%F-%H-%M-%S.flv;
: }
:
: # Coop Server
: exec_push /opt/ffmpeg/bin/ffmpeg -i "rtmp://127.0.0.1/1080p_live/$name live=1" -vcodec copy -acodec copy -f flv "rtmp://192.168.2.33/1080p_live/$name live=1" 2>>/usr/local/nginx/logs/ffmpeg-$name-1080p-PushToCoop192.168.2.33.log;
:
: # Live Service
: exec_push /opt/ffmpeg/bin/ffmpeg -i "rtmp://127.0.0.1/1080p_live/$name live=1" -vcodec copy -acodec copy -f flv "rtmp://127.0.0.1/live_out/1080p$name live=1" 2>>/usr/local/nginx/logs/ffmpeg-$name-1080p-live_out.log;
:
: }
:
: application live_out {
: live on;
:
: allow publish 127.0.0.1;
: deny publish all;
:
: record off;
:
: # Turn On optional exec
: exec_options on;
:
: # Condition: name=720pCardLin
: exec_push /opt/ffmpeg/bin/ffmpeg -i "rtmp://127.0.0.1/live_out/$name live=1" -vcodec copy -acodec copy -f flv "rtmp://live-tpe.twitch.tv/app/************************ live=1" 2>>/usr/local/nginx/logs/ffmpeg-$name-PushToTwitch.log name=720pCardLin;
:
: # Condition: name=1080pCardLin
: exec_push /opt/ffmpeg/bin/ffmpeg -i "rtmp://127.0.0.1/live_out/$name live=1" -vcodec copy -acodec copy -f flv "rtmp://a.rtmp.youtube.com/live2/************************ live=1" 2>>/usr/local/nginx/logs/ffmpeg-$name-PushToYouTube.log name=1080pCardLin;
:
: }
:
: --------------------------------
:
: 值得注意的是ffmpeg一定要絕對路徑
:
: 當然有人會將720p推送到Twitch網站
:
: 當然也可將1080p推送到YouTube網站
:
: 值得一提的是如果OBS選用GPU編碼器
:
: 可以設置到50Mbps傳輸給直播伺服器
:
: 讓直播伺服器壓縮到10Mbps以下輸出
:
: 謝謝大家
:
: ※ 引述《a34021501 (CARD)》之銘言:
: : 標題: [心得] 個人實況伺服器與高畫質轉碼
: : 時間: 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音質會較好!
: :
: : --
Tags:
實況
All Comments
By Ina
at 2022-04-06T17:19
at 2022-04-06T17:19
By Anthony
at 2022-04-09T13:19
at 2022-04-09T13:19
Related Posts
[動物森友會]菜與別
By Regina
at 2022-04-03T10:31
at 2022-04-03T10:31
[阿爾宙斯]鬼火
By Hardy
at 2022-04-02T20:46
at 2022-04-02T20:46
[OMORI] 2000悠閒散步去
By Joseph
at 2022-04-02T19:48
at 2022-04-02T19:48
[動物森友會]櫻
By Odelette
at 2022-04-02T16:02
at 2022-04-02T16:02
艾爾登法環#27|探險王城+想拿黑刀
By Kyle
at 2022-04-02T15:49
at 2022-04-02T15:49