GearbestでAmazfitシリーズがセール中!

Amazfit Bipなど人気のフィットネススマートウォッチシリーズAmazfitが特化価格で買えます。

詳細はこちら

AndroidスマホだけでHLSのライブ配信をアーカイブする方法

録画サーバー
スポンサーリンク

最近流行りのVtuberにハマっている今日この頃です。
自分の推しのVtuberはRalityというVtuber専用ライブアプリで配信することが多く、できるだけリアルタイムで見れるように努力してはいますが、忙しくてリアタイ配信を見れないことも多々あります。

Realityでは公式で過去の番組の再放送をしたり、YouTubeで切り抜き動画をアップしてたりはしますが、完全なアーカイブは行っていません。
「ぶ○おん!!」とかどれだけ金積めばこんなに出来るのかと思うくらいのクオリティなので、フルでのアーカイブ配信も検討してほしいものです。

アーカイブ配信がないとなれば、パッと思いつく方法では、配信中にスマホをスマホでとるいわいる直撮りをしたり、スクリーンキャプチャアプリで画面をキャプチャーしたりするしかありません。

まあ、そんな非効率なことはしたくないので、何かいい方法がないかと調べてみると、RealityではPCやアプリをインストールしていない人の為にブラウザ上で視聴可能なHLS配信をサービス内の全ての配信でアプリと同時していることが分かりました。

これをPCを使って、うまいことやれば保存できると分かりました。

とはいえ、いつでもPCを持ってるわけではないので、非現実的です。

そこで、今回はAndroidスマホだけでサクッとRealityの配信を保存できる方法を思いついたので記事にしました。

スポンサーリンク

AndroidスマホだけでHLSのライブ配信をアーカイブする方法

この記事はコメダ珈琲で未来茶会の配信が始まって、PCなんか持ってない中で「保存する方法ないかなー」とコメダで色々調べてたら思いついた方法です。

注意事項(重要)

※今の所、規約にダウンロード禁止となっていないので、私的利用のための複製は許可されているので問題ないと思いますが、今後のことを考えるとアプリの規約的にグレーかなと思うので、自己責任でお願いします。何か起きた場合でも当方は一切の責任を負いません。

ちなみにRealityの規約の中に

複製(私的使用のための複製を除きます。)、〜略〜、その他の方法により利用(第三者が提供するアプリやウェブサイトへの投稿等を含みます。)してはならないものとします。

とあるので、この記事で保存したアーカイブをYouTubeやニコニコ動画などにアップすると規約違反になります。

万が一配信サイトにアップロードして、それを運営サイドが認知して、今後のアーカイブさせないようにDRMをかけるようになるかもしれないので、配信サイトにはアップしないでください。

DRMかけられると保存は困難になります。

前提

Termux

Termux

Fredrik Fornwall無料posted withアプリーチ

今回は、AndroidでパッケージレポジトリがあってStreamlinkやffmpegがrootなしで比較的に楽に使えるtermuxを利用していきます。
※termuxには基本的にはsudoやroot概念がないようです。

この記事ではかんたんなLinuxコマンドが多々出てきます。
「わかんないよー」というLinuxを触ったことない人でも分かるように書いてるつもりです。

書いてあることが分からない人はGoogle先生に聞くか諦めてください。

Linuxチョットデキルよ!という人には無駄が多いかもです。

環境構築

最近のライブ配信サービスはStreamlinkとFFmpegを使えば大体ダウンロードできるらしいです。

Streamlinkは一般的なLinuxディストリビューションのUbuntuなどではaptで入れれるのですが、今回利用するtermuxのレポジトリにはないようです。
そこで最初にpythonを入れてpipでインストールする形でインストールしていきます。

最初はレポジトリの更新

$ apt update

続いてpythonやpip関連パッケージをインストール

$ apt install python build-essential python-dev

途中でインストールしますか?みたいなのが出るので「y」を入れてエンターします。

aptでインストールしたpythonでは、pythonのパッケージ管理をしているpipのバージョンが古いようなので、一旦pipのアップデートをします。

$ pip install --upgrade pip

ライブ系のダウンロードにはffmpegが必要なのでインストール。
(レポジトリのはバージョンが古いとかの問題があるらしいですが、保存するため利用するだけなので、これでOK)

$ apt install ffmpeg

streamlinkのインストール
今回の肝のパッケージになります。

$ pip install --upgrade streamlink

これで保存に必要なパッケージのインストールは終わりです。

保存先の設定

Androidアプリの制約で、ユーザーの許可なしにアプリが内部ストレージにファイルがおけないようになっているので、内部ストレージにおけるように設定します。

下記のサイトを参考にしました。

AndroidでLinuxターミナル!termuxの初期設定 - lisz-works
termuxというアプリをご存知でしょうか? このアプリを使えば、Android端末でLinuxのターミナルが使えちゃうという素晴らしいアプリです! 今回はこのtermuxの初期設定について書いていきます!

termuxのホームディレクトリは「/data/data/com.termux/files/home」にあり分かりにくいので保存先を分かりやすいところにおけるようにしましょう。

$ termux-setup-storage

ポップアップでAndroidのストレージへのアクセス許可が聞かれると思うので、「許可」してください。

これで内部ストレージ領域にアクセスできるようになります。

保存先はどこでもいいのですが、動画保存が目的なので

$ cd storage/downloads

をしてダウンロードフォルダに動画を保存出来るようにします。

ここまでくればほぼ完成です。

ライブの保存方法

下記のコマンドを実行すれば、ライブ映像が保存できます。

$ streamlink "[.m3u8で終わるURL]" --default-stream best -o - | ffmpeg -i - -movflags faststart -c copy -bsf:a aac_adtstoasc `date +%Y%m%d%H%M`.mp4

※[.m3u8で終わるURL]にはライブ配信毎に変わるm3u8のURLを入れます。

Androidスマホ単体で出来る.m3u8で終わるURLの取得方法はページ下部で紹介しています。

Realityでは配信終了後でも何かしら情報が出てるようなので、停止方法を説明します。

キーボードの上にある「CTRL」押して、キーボードの「C」で止まります。(2回してはいけません。2回すると不完全で再生できないmp4が出来てしまいます。)

長い時間記録していると最終処理に時間がかかりますが、待っていれば完了します。

ファイル名は「`date +%Y%m%d%H%M`.mp4」から分かるように、保存フォルダ内に「201905191534.mp4」のようにコマンド実行開始時間で保存されます。

(以前固定のファイル名で保存するようにしてたら、上書きして大事な録画を消しちゃって痛い目を見たので、多分これが最適解だと思います。)

保存されたライブは、適当なファイラーアプリか動画再生アプリで見れると思います。

Androidスマホ単体でのm3u8の取得方法

Media Download Manager

Media Download Manager

Ardic Development無料posted withアプリーチ

Android単体でm3u8の見つける方法ですが、「Media Download Manager」という動画ダウンロードアプリでURLを取得できます。

配信ページに行きライブを再生すると内部ブラウザの右下に小さく再生ボタン出現するので、そこからm3u8のURLを取得できます。
※配信前や再生されていないとm3u8を見つけることができません。

公式放送の場合m3u8が3種類くらい出てくるのですが、アーカイブ目的ならビットレートが高いやつがいいと思います。

最後はCopy linkでコピーして、コマンドのところに貼り付けて実行するだけです。

配信ページへのリンクはRealityで配信中のライブでシェアボタンを押すと文字列と配信中のライブ視聴用URLが取得できます。

「〜.pwage.link?apn〜」から始まる変なURLですが、Chromeのメニューにある「PC版サイト」にチェックを入れて取得したURLを入れるとhttp://から始まるURLになると思います。

2回目以降の保存方法

turmuxはデフォルトのホームディレクトリが「/data/data/com.termux/files/home」なので、2回目以降でも

$ cd storage/downloads

で保存したいフォルダに移動する必要があります。

あとは、

$ streamlink "[.m3u8で終わるURL]" --default-stream best -o - | ffmpeg -i - -movflags faststart -c copy -bsf:a aac_adtstoasc `date +%Y%m%d%H%M`.mp4

と実行するだけで保存できると思います。
Realityの場合は.m3u8で終わるURLが取得できるのが配信開始直後なので、最初から最後までキッチリアーカイブしたいなら、最初の数秒が勝負ですね。

コツとか

視聴ページ自体は結構早くから取得できるので、予め視聴ページを開いておいて、配信開始時間と同時にリロードしてm3u8のURL取得するのがスムーズにできるかなと思います。

1時間番組で1.7GBとかいくので、ストレージ容量と通信状態を確保しておかないと後で大変なことになるかもです。基本Wi-Fi必須ですね。LTEとWi-Fiの切り替えも危ないかもしれないです。

ちなみにこの方法を応用して、国内のVPS(当サイトも利用しているVultrなど)を借りてSSHで保存作業を行うようにすれば通信容量は少なくて済みます。

あとがき

最初はYoutube-dlでもっと簡単なコマンドでできる方法があって、それをやっていたのですが、配信終了前に停止処理を行わないと、二度と再生できないゴミファイルを作ってました。

それで仕方なくStreamlinkで簡単なtsにしてそれをパイプ処理のffmpegで保存という、この記事のやり方に行き着きました。

このやり方なら、ライブ配信終了後にCtrl+Cしても、ちゃんと再生できるようなので、記事にすることができました。

この手のことに関しては、ほぼ無知なのでめちゃくちゃ苦労しました。

コメント