[Docker] Youtube 直播錄影伺服器建置

10 分鐘閱讀 View counter badge

封存

因我個人不再使用它,此專案已停止維護
請參考 Upstream 或是 我的新專案

前言

本文希望建置起能永久自動運作的 Youtube 直播備份機
本專案包含三個部份:

此專案目標為 「自動化影片備份」,盡量保存最好的影片,若砍檔我還有一份錄播的
記錄下我推的每分每秒

概觀

本專案核心目標

本文適合對象

功能說明

流程簡述

  1. Linux 主機之 Docker 安裝和 ReverseProxy 建置
  2. git clone 下來 docker-compose 建置檔案和 config 檔案
  3. 設定要自動錄影的直播頻道
  4. docker-compose up -d

架構

WWW
nginx Server (Reverse Proxy) (SSL 證書申請、Renew)
├ Jobber (Cron) (定時檢查磁碟使用率,在高於設定之百分比時,自動由舊起刪除錄影)
├┴ backup-dl (影片備份上傳機)
├ live-dl (直播監控錄影機)
└ youtube-dl-server (WebUI 下載器)

建置

Linux 主機和 Docker 安裝

請完成此文的建置章節

琳的備忘手札: [Docker] Linux主機之Docker安裝和ReverseProxy建置

另外,本專案完全可以部屬在 Windows10 機器上,以圖為證
請自行轉換所有步驟在 Windows 執行

live-dl、youtube-dl-server 建置

backup-dl 建置

提示

Backup 的封存位置是 Azure Blob Storage,不是每個人都適用
相關設定全都是註解狀態,你要用再打開

附註: 下載會員限定影片

此專案支援以 youtube-dl 的 cookies file 方式登入,可以下載會限影片
(youtube-dl 的帳密登入從 2019 bug 到現在都沒有修好)

注意

此 cookies file 包含了你的 Youtube 登入授權
任何人只要取得這個檔案,即可由你的身份登入 Youtube
務必妥善保管,把它當成你的帳號密碼看待

附註: 不部屬之單次執行 live-dl

若要單次執行而不部屬,可直接 docker run
我有 build 了 image 在此: https://github.com/users/jim60105/packages/container/package/live-dl

例如

docker run --rm
        -v D:\YoutubeDownload:/youtube-dl
        -v D:\YoutubeDownload\cookies.txt:/usr/src/app/cookies.txt
        ghcr.io/jim60105/live-dl https://www.youtube.com/watch?v=GDOQTShjTQs

此格式如下
將 {{}} 填入你的內容,若不需要登入就不用傳入 cookies file
cookies file 之相關說明請見上一節

docker run --rm
        -v {{影片儲存資料夾}}:/youtube-dl
        -v {{cookies file,用於登入驗證}}:/usr/src/app/cookies.txt
        ghcr.io/jim60105/live-dl {{Youtube網址}}

附註: 錄影完成 Callback

附註

本專案提供的 download_again.sh ,能在下載完成後等待一分鐘,再下載第二次
由於串流中錄影容易有漏秒,所以我會在「直播結束後至 Youtube 版權砲前」再下載一次

callback.sh 傳入之參數

__info "Calling callback function..."
local cmd=( "$CALLBACK_EXEC" "${OUTPUT_PATH}.mp4" "$BASE_DIR/" "$VIDEO_ID" "$FULLTITLE" "$UPLOADER" "$UPLOAD_DATE" )
nohup "${cmd[@]}" &>> "$OUTPUT_PATH.log" &

bash 參數

  1. 產出檔案的完整路徑
  2. 產出檔案之所在資料夾
  3. 影片 id
  4. 影片標題
  5. 影片上傳者
  6. 上傳日期

附註: Logging 相關設定

本專案 logging 經過調整,可搭配 Seq Log Server 使用 (或是任何支援 GELF http post 的 log server)