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...