Nihera
ニコニコ動画の音声を流すDiscord bot
技術
F#
DSharpPlus
FSharp.Data
ffmpeg
やってること
ニコニコの動画配信は基本的にHTTP Live Streamingだが、動画ページに埋め込まれている情報 (アクセスごとに変わる) を使ってセッションというものを確立し、一定時間ごとにHTTPリクエストでそれを維持する必要がある
HLSのプレイリストファイルのURLは毎回変わり、セッションを確立しないとわからない
セッション維持のハートビートを行わないと120秒でセッションが死に、HLSストリーミングが403になる
なので動画ページを取得してHTMLをJSONをこねこねしセッションを確立、m3u8ファイルのURLを得る
セッションが確立したら裏でheartbeatを開始
ffmpegはm3u8のURLを食わせるとHTTPで取得、パースを行い各パーツとなるtsファイルも全自動で取得して変換してくれる
-reをつけることで処理速度を動画フレームレートに合わせる。これをしないとCPU速度で処理が走り爆速でストリームが流れたりHTTP通信が大量に行われたりすることになる
映像を切り、DSharpPlusが要求する16bit 4.8kHz PCMに変換し、標準出力
標準出力した音声をDSharpPlusにそのまま流すとOpusエンコードされてDiscordに送られる
作る?