banner
oldcatY

oldcatY

中轻度LoveLive厨,主推莲团,二推水+虹团(缪团是神,星团……)
twitter
github
bilibili
steam

【テクニック】ffmpeg/Streamlink+Dplayerを利用してストリーミング中継を行う

環境構築#

本文は甲骨文日本東京の AMD 無料サーバー(Debian 11)を使用して構築します。
本文は宝塔パネルをフロントエンド構築ソリューションとして使用します。

正式な構築#

環境のインストール#

宝塔のインストール#

curl -sSO https://raw.githubusercontent.com/8838/btpanel-v7.7.0/main/install/install_panel.sh && bash install_panel.sh
#1,電話番号を遮蔽
sed -i "s|bind_user == 'True'|bind_user == 'XXXX'|" /www/server/panel/BTPanel/static/js/index.js
#2,強制的に電話番号をバインドするjsファイルを削除
rm -f /www/server/panel/data/bind.pl

nginx のインストール#

image

注意が必要です:nginx をインストールする際は【コンパイルインストール】を選択し、カスタムモジュールを追加してください:

  • モジュール名:nginx_rtmp_module
  • 説明:nginx_rtmp_module
  • パラメータ:--add-module=/www/server/nginx/src/nginx-rtmp-module
  • 前提スクリプト:git clone https://github.com/arut/nginx-rtmp-module.git

ffmpeg のインストール#

apt-get -y install ffmpeg

Nginx 設定の変更#

image

**ソフトウェアストア——Nginx 1.22.1——設定——設定変更** に入り、httpフィールドの前に以下の内容を追加します(# とその後の内容を削除することを忘れないでください):

rtmp  {
    server  {
        listen 1935;                             ##これはRTMPプロトコルのデフォルトポート
        chunk_size 4096;                         ##データのチャンクサイズ
        application live {                       ##liveという名前のプロジェクト
            live on;                             ##これはライブプロジェクトです
            hls on;                              ##HLS録画を有効にする
            wait_key on;                         ##ビデオストリームをキーフレームから開始する
            hls_path /www/wwwroot/site.com/hls;  ##HLS録画ファイルの保存ディレクトリ、/www/wwwroot/site.com/hlsをあなたのサイトのディレクトリに変更
            hls_fragment 5s;                     ##HLSで生成される各tsファイルの長さ
            hls_playlist_length 30s;             ##各tsファイルの保持時間
            hls_continuous on;                   ##HLSの番号を前の終了位置から開始する
            hls_cleanup on;                      ##古いtsファイルを自動的にクリーンアップ
            hls_nested on;                       ##各HLSストリーミングプロジェクトのために新しいサブディレクトリを作成
        }
    }
}

そしてctrl+sで保存し、**ソフトウェアストア——Nginx 1.22.1——設定——サービス設定を再読み込み** をクリックします。

ウェブサイトの作成と関連設定の変更#

ウェブページの作成#

image

ドメイン名などの関連設定を入力し、SSL を有効にするかどうかを選択できます(海外サーバーでは SSL を有効にし、Cloudflare の小さな雲を開くことをお勧めします)。

設定の変更#

access_logフィールドの前の行に以下の内容を追加します:

location /live {
  types {
    application/vnd.apple.mpegurl m3u8;
    video/mp2t ts;
  }
  alias /www/wwwroot/site.com/hls; # 先ほど設定したhlsディレクトリと一致
  add_header Cache-Control no-cache;
}

Dplayer プレーヤーの構築#

デフォルトのindex.htmlを以下の内容に直接変更します:

<!DOCTYPE HTML>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>あなたのライブルームの名前</title>
    <link rel="icon" type="image/x-icon" href="https://smms.app/image/7vZXEYRjOiW1Ftb">
    <link class="dplayer-css" rel="stylesheet" href="https://cdn.jsdelivr.net/npm/dplayer/dist/DPlayer.min.css">
    <script src="https://cdn.jsdelivr.net/npm/hls.js/dist/hls.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/dplayer/dist/DPlayer.min.js"></script>
    <style>
        html,body{margin:0px;padding:0px;width:100%;height:100%;}#dplayer{position:absolute;width:100%;height:100%;}
    </style>
</head>
<body>
    <div id="dplayer" class="dplayer dplayer-no-danmaku dplayer-live dplayer-playing dplayer-loading"></div>
    <script>
        const dp = new DPlayer({
            container: document.getElementById('dplayer'),
            live: true,
            danmaku: false,
            autoplay: true,
            video: {
                url: 'hls/推流码/index.m3u8',
                type: 'hls'
            }
        });
    </script>
</body>

OBS などのソフトウェアを使用してライブ配信を開始#

image
設定は以下の通りです:

  • サーバー:rtmp://あなたのサーバーアドレス:1935/live/
  • ストリームキー:任意に設定しますが、HTMLコードの推流コードと一致する必要があります

ffmpeg を使用してストリームをプッシュ#

大まかなコマンドは以下の通りです:

ffmpeg -i ストリームアドレス -c:v copy -c:a aac -b:a 192k -strict -2 -f flv rtmp://127.0.0.1:1935/live/推流码

バックグラウンドで実行する必要がある場合

nohup ffmpeg -i ストリームアドレス -c:v copy -c:a aac -b:a 192k -strict -2 -f flv rtmp://127.0.0.1:1935/live/推流码 &
apt-get install python3-pip screen
pip3 install streamlink

ストリーミングメディアをプッシュ(YouTube ライブの例)#

echo "YouTubeのURLを入力してください:"
read URL
streamlink $URL best -O | ffmpeg -re -i pipe:0 -c copy -bsf:a aac_adtstoasc -f flv rtmp://localhost:1935/live/youtube

YouTube の非公開(Unlisted)ライブストリームをプッシュ【淦】#

この作業は本当に大変でした。公開ライブのプッシュは非常に簡単ですが、非公開ライブは保護されているため、Streamlink ではプッシュできず、少し工夫が必要でした。

このプッシュの前提は、ライブストリームのアドレスを知っていることです。例えばhttps://youtu.be/abcdefg

Screen のインストール#

apt -y install screen

私はバックグラウンドでの実行には screen しか使えません…… 私は初心者です……

yt-dlp のダウンロードとデプロイ#

wget -O /usr/local/bin/yt-dlp https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp

Screen を使用してバックグラウンド実行を開始#

screen -S youtube

YouTube の非公開ライブをプッシュ#

この作業は本当に大変でした……

clear
echo "YouTubeのURLを入力してください:"
read URL
ffmpeg -re -i $(yt-dlp -f best -g $URL) -c copy -bsf:a aac_adtstoasc -f flv -buffer_size 256M rtmp://localhost/live/youtube

ここでは yt-dlp を使用して YouTube ライブリンクを m3u8 リンクに解析し、ffmpeg に読み込ませています。また、buffer_sizeを小さく設定するとエラーが発生するようで(理由はわかりませんが、調整すると解決しました)。

感謝#

yt-dlp、Streamlink、ffmpeg の作者に感謝します。彼らがいなければ、このチュートリアルは存在しませんでした。

参考リンク#

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。