■はじめに
あくまでも「もどき」です(^^;らびやんさんのtcpreceiver遊び。— 疲労コンパイラー (@phillowcompiler) June 8, 2019
だいぶ滑らかに動いて感激😍
ちょっと改造して、Xvfb上でmpvを走らせて、#M5Stack で操作できるようにした(´▽`)。 pic.twitter.com/VUiKvjYm3h
しかもM5Stack単体で動画を再生しているわけではないし…
事の発端は↓こんな記事
これを「M5Stack」でもできないだろうか?という話がM5Stack界隈からのツイートからちらほらと…
・・・んでも、M5Stackはmp4デコーダーを積んでいるわけでもないし、FFmpegも無いしなー┐(´д`)┌という問題が。
そこで、M5Stack用のarduinoスケッチに、らびやん氏が作成した「tcpreceiver」というのがある。
https://github.com/lovyan03/M5Stack_LovyanToyBox.git
これを使って、Youtubeを再生している母艦からスクリーンショットをポコポコとM5Stackに送り込むのが手っとり早そうではある。
ちょっとインチキ?っぽいけど、まあいいや。
■ 用意するもの
・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
$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 件のコメント:
コメントを投稿