2019年6月14日金曜日

M5Stackを使って動画プレーヤーもどきを作ろう!


■はじめに


あくまでも「もどき」です(^^;

しかもM5Stack単体で動画を再生しているわけではないし…

事の発端は↓こんな記事

ピカチュウ(ハリウッド版)をずっと見ていたい人のためのデバイス - nomolkのブログ http://nomolk.hatenablog.com/entry/2019/05/10/120000


これを「M5Stack」でもできないだろうか?という話がM5Stack界隈からのツイートからちらほらと…

・・・んでも、M5Stackはmp4デコーダーを積んでいるわけでもないし、FFmpegも無いしなー┐(´д`)┌という問題が。

そこで、M5Stack用のarduinoスケッチに、らびやん氏が作成した「tcpreceiver」というのがある。

https://github.com/lovyan03/M5Stack_LovyanToyBox.git

これを使って、Youtubeを再生している母艦からスクリーンショットをポコポコとM5Stackに送り込むのが手っとり早そうではある。

ちょっとインチキ?っぽいけど、まあいいや。

(余談)自分が使った母艦はLinuxMintだけど、原理的にはラズパイとかからもできるはず。(初代ラズパイだとyoutube-dlが重すぎて使い物になりませんでした(T^T)


■ 用意するもの

Xvfb Linuxとかで仮想のディスプレイのフレームバッファを提供するXサーバーのソフト。ラズパイのように元々画面を持っていないようなシステムでもユーザーが設定した解像度のモニターにX-Windowsシステムを用意しておくことができるわけだ。

mpv いわずとしれたコマンドラインから動画を再生するためのソフト。youtube-dlと組み合わせるとyoutubeの動画を再生することができる。

libjpeg スクリーンショットの画像データをjpegに変換するためのライブラリ。無ければ「libjpeg-dev」のパッケージをapt-getしておこう。

libXtst Xvfbが仮想のスクリーンなら、こちらはプログラムから仮想のイベントを送り込む関数が含まれているライブラリ。これもあらかじめapt-get install libxtst-dev しておこう

もちろんXvfbもmpvも、持っていなければapt-get installから普通にインストールすることができる。

youtube-dlについては https://ytdl-org.github.io/youtube-dl/download.html にダウンロード方法が書いてある。ちょくちょくと更新されているので、こまめに更新しておくといいかもしれない。youtubeがちょくちょくと仕様変更が行われるからだ。仕様変更が行われる理由はよく知らない


■ さあはじめよう。

おもむろにLinuxシステムを起動して、コンソールに到達しよう。

まずは仮想ディスプレイのXvfbを起動する。下の例では「:1」という名前のディスプレイをQVGAの16bitカラーで起動しましょう。という指定だ。そしてフレームバッファの状態を/tmpディレクトリ以下から取得できるようなる。

$Xvfb :1 -screen 0 320x240x16 -fbdir /tmp &

こんな感じ。
※Xディスプレイの名前は「:(コロン)+数字」で表すのが一般的なようだ。

オプションの詳細などはmanページを参照すればよくわかる。さすがman。

次にこの仮想Xディスプレイ上にmpvを走らせる。
youtubeの動画を再生するのであれば、youtube-dl用のオプションをつけるといい。


$export DISPLAY=:1
$mpv --ytdl-format=242 --loop=force https://www.youtube.com/watch?v=NQhDJBDpvYs

環境変数DISPLAYに「:1」を指定してから実行している。

--ytdl-format="[height<=240]"とかでもいいけれど
youtube-dlのフォーマットと同じオプションも使えるらしいのでいろいろ試してみるのも面白いかも。

249          webm       audio only DASH audio   60k , opus @ 50k, 43.25MiB
250          webm       audio only DASH audio   76k , opus @ 70k, 57.71MiB
171          webm       audio only DASH audio   93k , vorbis@128k, 69.77MiB
140          m4a        audio only DASH audio  134k , m4a_dash container, mp4a.40.2@128k, 107.52MiB
251          webm       audio only DASH audio  160k , opus @160k, 121.60MiB
160          mp4        256x144    144p   74k , avc1.4d400c, 30fps, video only, 23.26MiB
278          webm       256x144    144p  128k , webm container, vp9, 30fps, video only, 77.67MiB
133          mp4        426x240    240p  131k , avc1.4d4015, 30fps, video only, 38.89MiB
242          webm       426x240    240p  224k , vp9, 30fps, video only, 95.82MiB
ex) mpv --ytdl-format=171 URL

こうすると、仮想ディスプレイ上にyoutubeの動画が再生される。

この時点で確認したい場合は、VNCサーバー&ビューアを用意するといいだろう。
(Linux MintではVNCビューアに「Remmina」を使うことができる)

加えて、Xvfbのオプションで「-fbdir 」を指定しているから、このディレクトリ以下にフレームバッファのファイルができる。そのデータをjpeg化してM5Stackに送り込むプログラム(Sender)を作ることにしよう。

【Sender編に続く】

0 件のコメント:

コメントを投稿