Twitch, Ustream, Youtube に対応した livestreamer の使い方

生放送の配信サイトが増える中で rtmp 形式だったのが、モバイル端末からの視聴環境を考慮した結果 Apple の HLS や Adobe の HDS 形式に移行するサイトが多くなった。それに伴って rtmpdump ではなくて ffmpeg や hdsdump での録画が一般的になっていった。しかし、ffmpeg や hdsdump だけでは録画できなくなったり、配信元のデータを調べる必要があったりと手軽ではない中で livestreamer が HLS や HDS に対応し、そこから海外の多くの生放送の配信サイトに対応したことによりいっそう手軽になった。

関連記事


livestreamer の後継の streamlink
streamlink の使い方

該当スレッド(英語)
Livestreamer - Audio/video stream recording forums

v1.12.2 時点での主な対応サイト

対応しているすべてのサイト:Plugins — Livestreamer documentation

配布先:Releases · chrippa/livestreamer · GitHub
更新履歴:Changelog — Livestreamer documentation
Windows PC を使っている場合は、win32-setup.exe のインストーラー版の使用が推奨されていて、そのほかの Mac や Linux などの OS にもソースコードからのインストールによって使うことができる。GUI と CLI のどちらの場合も先に livestreamer をインストールしておく。

Installing — Livestreamer documentation

Windows はここより、Installer か、Zip archive 、最新ベータを試したい場合は Nightly build をクリックして保存する。

使い方


livestreamer は rtmpdump や ffmpeg と同じようにコマンドプロンプトから実行する CLI である。しかし、rtmpdump などと同じようにコマンドラインの実行はハードルが高いので、GUI を使って livestreamer を使う方法もある。

GUI を使う場合


実行の前に Java をインストールしておく

Releases · 0wing/livestreamerJGUI · GitHub

livestreamerJGUI.png

同じファイル名で出力すると止まるので別ファイルを指定する。

そのほかの GUI:Alternative interfaces · chrippa/livestreamer Wiki · GitHub

USTroku で使う方法:【USTroku】 USTREAMのライブ映像を録画・保存 【チェッカー付き】

CLI を使う場合


基本的なコマンド
livestreamer 配信サイトのアドレス --default-stream best -o output.flv


livestreamer www.ustream.tv/channel/dommune --default-stream best -o dommune.flv
livestreamer www.twitch.tv/id --default-stream best -o twitch.ts

Ustream の配信形式を HLS に指定する
livestreamer www.ustream.tv/channel/dommune --stream-types hls -o dommune.flv

配信を録画するだけではなく、プレイヤーで再生することもできる。この場合は録画ではなくプレイヤーで見るだけのコマンドであり2種類ある。
livestreamer 配信サイトのアドレス --default-stream best -p "プレイヤーのフルパス"
livestreamer 配信サイトのアドレス --default-stream best -o - | "プレイヤーのフルパス" -


livestreamer www.ustream.tv/channel/dommune --default-stream best -p "E:tools\MPC-HC\mpc-hc.exe"
livestreamer www.ustream.tv/channel/dommune --default-stream best -o - | "E:tools\MPC-HC\mpc-hc.exe" -

配信映像を渡せるプレイヤーは MPC-HC のほかに VLC や ffplay、mplayer などがある。
Players — Livestreamer documentation


対応しているプロトコル一覧


名前 Prefix
Adobe HTTP Dynamic Streaming hds://
Akamai HD Adaptive Streaming akamaihd://
Apple HTTP Live Streaming hls:// hlvsvariant://
Real Time Messaging Protocol rtmp:// rtmpe:// rtmps:// rtmpt:// rtmpte://
Progressive HTTP, HTTPS, etc httpstream://

hls:// は1種類のストリーム。hlvsvariant:// は複数のストリームに対応している。

RTMP のコマンド例


注意点はオプションの指定で個別に "" で囲うのではなく全体を "" で囲うところである。
livestreamer "rtmp://streaming.server.net/playpath live=1 swfVfy=http://server.net/flashplayer.swf" --default-stream best -o out.flv

オプションの指定方法は以下を参照
LIBRTMP(3):

Adobe HDS のコマンド例


livestreamer hds://http://streaming.server.net/playpath/manifest.f4m --default-stream best -o out.flv

フラグメント(分割)ファイルのホスト名が正しく表示されていない場合は映像ソースのホスト以下に // が続いていることがあるので一つ / を消す。

error: This manifest requires the 'pvswf' parameter to verify the SWF のエラーが出る場合は hds:// 以降の末尾に pvswf=http://streaming.server.net/playpath/player.swf のように swf のフルパスを追加する。これでも Unknown tag type found, this stream is probably encrypted が出る場合は解決策はない。

error: This manifest requires the 'pvswf' parameter to verify the SWF · Issue #395 · chrippa/livestreamer

その他に Adobe HDS Downloader(PHP)もある。
Adobe HDS Downloader(PHP)の該当スレッド
Adobe HDS Downloader - Audio/video stream recording forums

配布先
Scripts/AdobeHDS.php at master · K-S-V/Scripts

ヘルプ
php AdobeHDS.php --help

使い方
php AdobeHDS.php --manifest "f4m のフルパス" --delete

ファイルパスにアクセスできない場合


m3u8 などのマニフェストにアクセスできない場合は cookie をつけることでアクセスできるようになる。cookie は m3u8 をブラウザで開いたときにブラウザの開発ツールで拾うことができる。そのほかに fireoxアドオンの cliget を使ってマニフェストにアクセスする cookie を拾うことができる。それとは別に復号も必要になる場合、特に HDS はファイルアクセスが難しい。

livestreamer hlvsvariant://http://streaming.server.net/playpath/video_sd.m3u8 --default-stream best --http-cookie "Cookie: Rp=hogehoge" -o out.ts

ちなみに ffmpeg の場合
ffmpeg -i "http://streaming.server.net/playpath/video_sd.m3u8" -c copy -bsf:a aac_adtstoasc out.mp4

以下の翻訳先:Command Line Interface — Livestreamer documentation

目次




基本コマンド


livestreamer [OPTIONS] [URL] [STREAM]

位置指定引数


[URL]

この URL からストリームを解析して取得する。“http://” は省略しても “http://” として認識される。

[STREAM]

取得する配信内容。
"best"(最高画質) や "worst"(最低画質)、解像度などが指定できる。何も指定しなければ、指定できるオプションをコンマ区切りで出力する。

全般の設定


-h, --help

ヘルプメッセージの表示。

-V, --version

バージョンの表示。

--plugins

現在インストールされているプラグインの表示。

--can-handle-url URL

指定した URL に Livestreamer が対応できるかどうかを確認する。
1 なら無理。0 なら可能。
他のアプリと連携するのに便利。

--config FILENAME

オプションのコンフィグファイルを読み込む。
詳しい設定。http://docs.livestreamer.io/cli.html#configuration-file

-l LEVEL, --loglevel LEVEL

ログメッセージの閾値を指定する。
指定できる値:none, error, warning, info, debug

-Q, --quiet

ヘルプメッセージの表示。

-j, --json

一般的なテキスト形式ではなく JSON 形式で出力する。他のアプリと連携するのに便利。

--no-version-check

新しい Livestreamer がリリースされたのを確認しない。

--version-check

Livestreamer のバージョンをチェックし終了する。

プレイヤーの設定


-p COMMAND, --player COMMAND

その指定したプレイヤーにデータを送る。


"vlc --file-caching=5000"

パスを指定する例
"'/path/with spaces/vlc' --file-caching=5000"

-a ARGUMENTS, --player-args ARGUMENTS

標準入力されたプレイヤーの表示タイトル名の指定。
規定値 "-"(stdin)(標準入力)

-v, --verbose-player

プレイヤーにコンソール出力を表示するのを許可する。

-n, --player-fifo, --fifo

標準入力されたデータの代わりに名前の付いたパイプ入力を読み込む。

--player-http

標準入力されたデータの代わりに HTTP ストリームを読み込む。

--player-continuous-http

標準入力されたデータの代わりに HTTP ストリームを読み込むが、何度も接続を試みる。

--player-external-http

他のプレイヤーを立ち上げずに HTTP 経由で配信する。
これは外部デバイス、例えばスマートフォンやストリーミングボックスで見るのに有効である。
挙動は continuous HTTP に似ているが、プレイヤーは立ち上がらない。
サーバがローカル(ループバック)インターフェースに対して継続的にリッスン状態になる。
配信にアクセスできる URL はコンソールに表示され、終了するには CTRL-C を使う。

--player-external-http-port PORT

外部の HTTP サーバがこの機能を使っている場合にポート番号を指定する。
省略した場合は 0 から 1024 までランダムに決められる。

--player-passthrough TYPES

コンマ区切りの指定より、URL から解釈を試みる。
指定できる値:hls, http, rtmp
再生するプレイヤーがこのプロトコルに対応しているか確認すること。

--player-no-close

規定値では配信が終了するとプレイヤーは閉じるが、この指定をすることで閉じなくすることができる。

出力ファイルの設定


-o FILENAME, --output FILENAME

出力されるファイル名の指定。出力場所に同じファイル名がある場合は上書きするかの選択ができる。

-f, --force

出力場所に同じファイル名がある場合は強制的に上書きされる。

-O, --stdout

再生せずに標準出力する。使い方に注意。


配信の設定


--default-stream STREAM

ここで指定したストリームを開く。無指定の場合は "best" 設定になる
直接指定する場合は 1080p, 720p などとマニフェストに書いてあるストリームを1つ指定する

--retry-streams DELAY

指定した秒だけ遅らせて読み込む

--retry-open ATTEMPTS

指定回数だけ開けるまでストリームを開く。規定値は 1

--stream-types TYPES, --stream-priority TYPES

カンマで区切られたリストのストリームタイプを許可する。このオプションの目的は同時配信しているストリームに異なるプロトコルで同じストリーム名の場合に用いる
規定値は "rtmp,hls,hds,http,akamaihd"

--stream-sorting-excludes STREAMS

指定したストリームの品質を比較して取得できるストリーム一覧を取得する
例:[operator]
[operator] には >, >=, <, <= が使える

480p よりも大きい解像度を除く
">480p"

複数指定する場合
">480p,>medium"

Stream transport の設定


--hds-live-edge SECONDS

HDS のライブストリームで指定した秒の edge(訳未確定) から開始する
規定値は 10.0

--hds-segment-attempts ATTEMPTS

指定回数だけ HDS セグメントが開けるまでストリームを開く
規定値は 3

--hds-segment-threads THREADS

HDS セグメントをダウンロードするのに貯めておくスレッドサイズ。1 から 10 まで指定できる
規定値は 1

--hds-segment-timeout TIMEOUT

HDS セグメントが接続とタイムアウトする(秒)
規定値は 10.0

--hds-timeout TIMEOU

HDS ストリームがタイムアウトする(秒)
規定値は 60.0

--hls-live-edge SEGMENTS

HLS のライブストリームでいくつのセグメント末端から開始するか
小さい値ほど可能な限り低遅延で取得できるがバッファーは減る
規定値は 3

--hls-segment-attempts ATTEMPTS

指定回数だけ開けるまで HLS セグメントを開く
規定値は 3

--hds-segment-threads THREADS

HLS セグメントをダウンロードするのに貯めておくスレッドサイズ。1 から 10 まで指定できる
規定値は 1

--hls-segment-timeout TIMEOUT

HLS セグメントが接続とタイムアウトする(秒)
規定値は 10.0

--hls-timeout TIMEOUT

HLS ストリームがタイムアウトする(秒)
規定値は 60.0

--http-timeout TIMEOUT

HTTP ストリームがタイムアウトする(秒)
規定値は 60.0

--ringbuffer-size SIZE

リングバッファサイズ。M や K を使うことで bytes を認識する
小さい値ほどプレイヤでの再生やダウンロード開始が早くなるが、その分受信速度に応じて映像が止まる可能性がある。メモリ容量の小さい環境の場合(Raspberry Pi など)は小さい値が推奨される
規定値は 16M

--rtmp-proxy PROXY, --rtmpdump-proxy PROXY

RTMP ストリームを開くときにプロキシーを指定する
例:127.0.0.1:9050

--rtmp-rtmpdump FILENAME, --rtmpdump FILENAME, -r FILENAME

RTMP ストリームを開くときに RTMPDump を指定する
環境変数でパスが通っていなければ指定できる
例:“/usr/local/bin/rtmpdump”

--rtmp-timeout TIMEOUT

RTMP ストリームがタイムアウトする(秒)
規定値は 60.0

--stream-segment-attempts ATTEMPTS

指定回数だけ開けるまでセグメントを開く
例えば Ustream で他のオプションでカバーできないときに指定する
規定値は 3

--stream-segment-threads THREADS

セグメントをダウンロードするのに貯めておくスレッドサイズ。1 から 10 まで指定できる
例えば Ustream で他のオプションでカバーできないときに指定する
規定値は 1

--stream-segment-timeout TIMEOUT

セグメントが接続とタイムアウトする(秒)
例えば Ustream で他のオプションでカバーできないときに指定する
規定値は 10.0

--stream-timeout TIMEOUT

ストリームがタイムアウトする(秒)
例えば Ustream で他のオプションでカバーできないときに指定する
規定値は 60.0

--stream-url

可能であれば、ストリームを URL に変換して表示する

--subprocess-cmdline, --cmdline, -c

内部でストリームを再生するのにコマンドラインを表示する
この設定は RTMP ストリームに限る

--subprocess-errorlog, --errorlog, -e

一時ファイルとしてログファイルを可能な限り出力する
ファイルは一時ファイルが置かれる場所に保存される

HTTP の設定


--http-proxy HTTP_PROXY

HTTP のリクエストに HTTP プロキシーを用いる
例:http://hostname:port/

--https-proxy HTTPS_PROXY

HTTPS のリクエストに HTTPS プロキシーを用いる
例:https://hostname:port/

--http-cookies COOKIES

セミコロンで区切られたクッキーのリストを HTTP リクエストに用いる(1.11 で廃止)
例:"foo=bar; baz=qux"

--http-cookie KEY=VALUE

それぞれの HTTP リクエストに対して cookie を加える
複数の cookie も可能(1.11 以降)
ブラウザの開発ツールから取得できるのを利用する

--http-headers HEADERS

セミコロンで区切られたヘッダーのリストを HTTP リクエストに用いる(1.11 で廃止)
例:"X-Forwarded-For=0.0.0.0; User-Agent=foo"

--http-header KEY=VALUE

それぞれの HTTP リクエストに対して header を加える
複数の header も可能(1.11 以降)
ブラウザの開発ツールから取得できるのを利用する
例:"User-Agent=Mozilla/5.0 (Linux; U; Android 4.3; en-us; sdk Build/MR1) AppleWebKit/536.23 (KHTML, like Gecko) Version/4.3 Mobile Safari/536.23"

--http-query-params PARAMS

セミコロンで区切られたクエリのパラメーターのリストを HTTP リクエストに用いる(1.11 で廃止)
例:"foo=bar; baz=qux"

--http-query-param KEY=VALUE

それぞれの HTTP リクエストに対してクエリのパラメーターを加える
複数のクエリのパラメーターも可能(1.11 以降)

--http-ignore-env

(HTTP_PROXY, など)の複数の HTTP の設定を無視する

--http-no-ssl-verify

SSL 認証を行わない。

--http-ssl-cert FILENAME

SSL 認証を行う。.pem 形式のファイルを指定する

--http-ssl-cert-crt-key CRT_FILENAME KEY_FILENAME

SSL 認証を行う。.crt, .key 形式のファイルを指定する

--http-timeout TIMEOUT

他の設定で指定した HTTP リクエスト以外の全般のタイムアウト(秒)
規定値は 20.0

プラグインの設定


--plugin-dirs DIRECTORY

プラグインをディレクトリから読み込む
複数のディレトリを指定する場合はセミコロンを使う

--twitch-oauth-token TOKEN

Twitch authentication の OAuth を使う
--twitch-oauth-authenticate で指定して返ってきた TOKEN を指定する

--twitch-cookie COOKIES

Twitch のサブスクリプションチャンネルにアクセスするための認証クッキーを指定する
例:"_twitch_session_id=xxxxxx; persistent=xxxxx"
注意:この方法は旧式で難解なので代わりに、--twitch-oauth-authenticate を使う

--ustream-password PASSWORD

UStream.tv のパスワードのかかったチャンネルにアクセスするためのパスワード

--crunchyroll-username USERNAM

Crunchyroll で制限されたストリームにアクセスするためのユーザー名

--crunchyroll-password [PASSWORD]

--crunchyroll-username で指定したアカウントのパスワード
空欄の場合はプロンプト表示される

--crunchyroll-purge-credentials

Crunchyroll で前回の認証に用いたキャッシュを破棄して新しいセッションで再認証する

--livestation-email EMAIL

Livestation にログインするメールアドレス
プレミアム品質のストリームにアクセスするのに使う

--livestation-password PASSWORD

--livestation-email のパスワード


翻訳先:Command Line Interface — Livestreamer documentation
関連記事

コメント

非公開コメント

プロフィール

ロベルト

お問い合わせはこちらまで
robelt2525[at]gmail.com

中の人 @nico_lab

広告リンク
Amazon
楽天市場

ブログ更新用 @blo_nico_lab

詳しいプロフィールはこちら

当ブログは、Amazonアソシエイトに参加しています。