Linux直播推流

2022-03-24 06:50:18 字數 2494 閱讀 1811

linux系統實現youtube推流直播

軟體:ffmpeg, youtube-dl

1. 安裝ffmpeg

官網安裝包:john van sickle - ffmpeg static builds

$ cd /home/john

$ wget

$ wget .md5

$ md5sum -c ffmpeg-git-amd64-static.tar.xz.md5

ffmpeg-git-amd64-static.tar.xz: ok

解壓(有可能需要解壓兩次,我解壓一次就可以了),如果遇到「tar (child): xz: cannot exec: no such file or directory」,需安裝xz,命令「yum -y xz」

$ tar xvf ffmpeg-git-amd64-static.tar.xz

現在得到目錄」ffmpeg-git-20180203-amd64-static「(日期為最新版本日期,使用命令ls -a「檢視當前目錄所有目錄檔案)

$ ls ffmpeg-git-20180203-amd64-static

ffmpeg ffprobe gplv3.txt manpages model qt-faststart readme.txt

閱讀readme.txt(hit "q" to exit out of "less")

$ less ffmpeg-git-20180203-amd64-static/readme.txt

使用相對路徑

$ pwd

/home/john

或者使用絕對路徑

$ pwd

/home/john

要全域性安裝它,我需要將二進位制檔案移動到shell的路徑中。「path」是環境中的乙個變數,它被設定為shell用來定位二進位制檔案的冒號分隔目錄列表。這是我的系統路徑。

$ echo $path

/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/home/john/.local/bin:/home/john/bin

檢查是否安裝舊版本

$ whereis ffmpeg

ffmpeg: /usr/bin/ffmpeg

這列出了安裝在/usr/bin中的較老版本的ffmpeg。我可以解除安裝舊版本,或者將新的ffmpeg二進位制檔案放在/usr/bin之前搜尋的路徑中。應該是/usr/local/bin

將二進位制檔案ffmpeg和ffprobe移動到shell的路徑中(sudo自行搜尋安裝,也可以直接mv,但比較麻煩)

$ sudo mv ffmpeg-git-20180203-amd64-static/ffmpeg ffmpeg-git-20180203-amd64-static/ffprobe /usr/local/bin/

$ whereis ffmpeg

ffmpeg: /usr/local/bin/ffmpeg

$ whereis ffprobe

ffprobe: /usr/local/bin/ffprobe

安裝完成了

解除安裝(當然安裝是用不到的)

$ sudo rm /usr/local/bin/ffmpeg /usr/local/bin/ffprobe

2.安裝youtube-dl

$ pip install youtube-dl

3.推流

$ youtube-dl -f best $url -o - | ffmpeg -re -i pipe:0 -c:v copy -c:a aac -f flv $rtmp

$rtmp為rtmp位址+直播碼,需要加引號""

但是斷開連線後推流會停止,在命令最後加 & 保持後台執行

備註:3)使用ffmpeg推流的命令:cat example.mp4 | ffmpeg -re -i pipe:0 -c:v copy -c:a aac -f flv $rtmp

-i 引數:表示告訴 ffmpeg 要從什麼地方讀取**流資料。這裡,pipe:0 是從管道讀取資料,pipe:1 是向管道寫入資料。

舉例:

1)從 youtube 轉播到 bilibili:youtube-dl -f best $url -o - | ffmpeg -re -i pipe:0 -c:v copy -c:a aac -f flv $rtmp

2)從 ustream 轉播到 bilibili:streamlink $url best -o | ffmpeg -re -i pipe:0 -c copy -f flv $rtmp

3)從 youtube 轉播到任意rtmp伺服器:youtube-dl -f best $url -o - | ffmpeg -re -i pipe:0 -c:v copy -c:a aac -f flv $rtmp

這個例子和前面兩個別無二致,只需要替換 $rtmp 位址即可。

參考:

直播推流拉流概念介紹

先上圖 推流,指的是把採集階段封包好的內容傳輸到伺服器的過程。介紹一下目前有主流的推送協議,以及各自的優缺點。不過rtmp有著乙個最大的不足 不支援瀏覽器,且adobe已不再更新。因此直播服務要支援瀏覽器的話,需要另外的推送協議支援。分段推送的技術特點,決定了hls的延遲一般會高於普通的流 直播協議...

RTMP 直播推流時延

除了gop cache,還有乙個有關係,就是累積延遲。伺服器可以配置直播佇列的長度,伺服器會將資料放在直播佇列中,如果超過這個長度就清空到最後乙個i幀 當然這個不能配置太小,譬如gop是1秒,queue length是1秒,這樣會導致有1秒資料就清空,會導致跳躍。有更好的方法?有的。延遲基本上就等於...

直播Android推流外部資料採集

有些研發能力比較強的客戶,會有自定義影象處理的需求 比如自定義影象濾鏡 同時又希望復用rtmp sdk的整體流程,如果是這樣,您可以按照如下攻略進行定製。custommode txliveconstants.custom mode audio preprocess 可以和video preproce...