r_kawai
2022年8月22日 15時59分
いつもお世話になっております。
標題の件につきまして、現在firefox上で動画再生を試していますが、CPU負荷が高くなっており、VPUを使用していないように見えます。
以下ではh264でエンコードしたmp4ファイルで確認を行っていますが、youtubeのVP9でエンコードされたストリーミング映像も同様でした。
つきましては、firefox上でVPUを使って動画を再生する方法がありましたらご教示頂けませんでしょうか。
■対象の動画ファイル
h264でエンコードしたファイルとなります。以下動画ファイルの情報です。
root@armadillo:~# ffprobe 93b45de2144143f0527f8b3b181d185e.mp4 ffprobe version 4.3.4-0+deb11u1 Copyright (c) 2007-2021 the FFmpeg developers built with gcc 10 (Debian 10.2.1-6) configuration: --prefix=/usr --extra-version=0+deb11u1 --toolchain=hardened --libdir=/usr/lib/aarch64-linux-gnu --incdir=/usr/include/aarch64-linux-gnu --arch=arm64 --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-pocketsphinx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared libavutil 56. 51.100 / 56. 51.100 libavcodec 58. 91.100 / 58. 91.100 libavformat 58. 45.100 / 58. 45.100 libavdevice 58. 10.100 / 58. 10.100 libavfilter 7. 85.100 / 7. 85.100 libavresample 4. 0. 0 / 4. 0. 0 libswscale 5. 7.100 / 5. 7.100 libswresample 3. 7.100 / 3. 7.100 libpostproc 55. 7.100 / 55. 7.100 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '93b45de2144143f0527f8b3b181d185e.mp4': Metadata: major_brand : mp42 minor_version : 0 compatible_brands: mp42mp41 creation_time : 2022-06-28T09:12:21.000000Z Duration: 00:00:48.48, start: 0.000000, bitrate: 2984 kb/s Stream #0:0(eng): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt709), 1920x1080, 2979 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc (default) Metadata: creation_time : 2022-06-28T09:12:21.000000Z handler_name : ?Mainconcept Video Media Handler encoder : AVC Coding
■環境
VPU用のライブラリ以下の手順でビルドし、/opt/firmwareに書き込んでおります。
https://manual.atmark-techno.com/armadillo-iot-g4/armadillo-iotg-g4_pro…
イメージは、
https://armadillo.atmark-techno.com/files/downloads/armadillo-iot-g4/co…
に修正を加えた以下のDockerfileでbuildしています。
イメージ名は"localhost/at-debian-image:latest"となります。
FROM docker.io/debian:bullseye LABEL version="1.0.5.test" COPY resources / ARG USERNAME=atmark ARG UID=1000 RUN apt-get update && apt-get upgrade -y \ && apt-get install -y \ weston \ locales \ firefox-esr \ xwayland \ vainfo \ && apt-get clean && mkdir -m 1777 /tmp/.X11-unix \ && mkdir /run/xdg_home && useradd -m -u ${UID} ${USERNAME} RUN apt-get update && apt-get upgrade -y \ && apt-get install -y \ armadillo-demo-experience RUN apt-get update && apt-get upgrade -y \ && apt-get install -y \ vim RUN apt-get update && apt-get upgrade -y \ && apt-get install -y \ ffmpeg RUN locale-gen ja-JP.UTF-8 && localedef -f UTF-8 -i ja_JP ja_JP RUN apt-get update && apt-get upgrade -y && apt-get -y install task-japanese locales-all ENV DISPLAY ":0" ENV LD_LIBRARY_PATH /opt/firmware/usr/lib/aarch64-linux-gnu ENV XDG_RUNTIME_DIR /run/xdg_home ENV VIVANTE_SDK_DIR /opt/firmware/usr ENV LANG ja_JP.UTF-8
また、コンテナは以下のように起動しています。
コンテナにattach後にwestonの起動を行っています。
armadillo:~/work#podman run --rm -itd --name=xwayland_example \ --env=XDG_RUNTIME_DIR=/tmp \ --env=LD_LIBRARY_PATH=/opt/firmware/usr/lib/aarch64-linux-gnu \ --env=QT_QPA_PLATFORM=wayland \ --device=/dev/ \ --volume=/sys:/sys \ --volume=/run/udev:/run/udev:ro \ --volume=/opt/firmware:/opt/firmware:ro \ --privileged \ --net=host \ localhost/at-debian-image:latest /bin/bash armadillo:~/work# podman attach xwayland_example root@armadillo:/#weston --tty=1 --backend=drm-backend.so&
■試したこと
①デモアプリでの再生
https://manual.atmark-techno.com/armadillo-iot-g4/armadillo-iotg-g4_pro…
のデモアプリで対象の動画ファイルを再生時は、CPU使用率は2%程度だったので、VPUライブラリのインストールは正しくできていると考えております。
Mem: 1212084K used, 488620K free, 8940K shrd, 176K buff, 677968K cached CPU: 2% usr 0% sys 0% nic 96% idle 0% io 0% irq 0% sirq Load average: 0.34 2.20 5.10 3/210 26967 PID PPID USER STAT VSZ %VSZ CPU %CPU COMMAND 26940 24230 root S 820m 49% 0 2% mediaplayer 24268 24230 root S 435m 26% 1 1% weston --tty=1 --backend=drm-backend.so 25774 2 root IW 0 0% 2 0% [kworker/u8:6-ev] 26108 2 root IW 0 0% 3 0% [kworker/u8:0-ev] 24232 1676 root S 726m 44% 2 0% podman attach xwayland_example 1334 1333 root S 21480 1% 1 0% /usr/sbin/NetworkManager -n 1273 1 messageb S 1700 0% 2 0% /usr/bin/dbus-daemon --system --nofork --nopidfile --syslog-only 1469 1 root S 1696 0% 0 0% {connection-reco} /bin/sh /usr/bin/connection-recover 26950 23075 root R 1692 0% 1 0% top 203 2 root SW 0 0% 0 0% [irq/65-galcore:] 26886 2 root IW< 0 0% 1 0% [kworker/1:0H-kb]
②ffmpegでの再生
https://support.mozilla.org/en-US/questions/1280538
https://wiki.archlinux.jp/index.php/Firefox
を見ると、firefoxでは動画再生時はffmpegを使用するとのことでしたので、ffmpeg(ffplay)で再生してみましたが、CPU負荷は高い状態でした。
^Croot@95b8eed58d44:~# SDL_VIDEODRIVER=wayland ffplay 93b45de2144143f0527f8b3b181d185e.mp4 ffplay version 4.3.4-0+deb11u1 Copyright (c) 2003-2021 the FFmpeg developers built with gcc 10 (Debian 10.2.1-6) configuration: --prefix=/usr --extra-version=0+deb11u1 --toolchain=hardened --libdir=/usr/lib/aarch64-linux-gnu --incdir=/usr/include/aarch64-linux-gnu --arch=arm64 --enable-gpl --disable-stripping --enable-avresample --disable-filter=resample --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-pocketsphinx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared libavutil 56. 51.100 / 56. 51.100 libavcodec 58. 91.100 / 58. 91.100 libavformat 58. 45.100 / 58. 45.100 libavdevice 58. 10.100 / 58. 10.100 libavfilter 7. 85.100 / 7. 85.100 libavresample 4. 0. 0 / 4. 0. 0 libswscale 5. 7.100 / 5. 7.100 libswresample 3. 7.100 / 3. 7.100 libpostproc 55. 7.100 / 55. 7.100 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '93b45de2144143f0527f8b3b181d185e.mp4': Metadata: major_brand : mp42 minor_version : 0 compatible_brands: mp42mp41 creation_time : 2022-06-28T09:12:21.000000Z Duration: 00:00:48.48, start: 0.000000, bitrate: 2984 kb/s Stream #0:0(eng): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt709), 1920x1080, 2979 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc (default) Metadata: creation_time : 2022-06-28T09:12:21.000000Z handler_name : ?Mainconcept Video Media Handler encoder : AVC Coding [swscaler @ 0xffff4833aa20] No accelerated colorspace conversion found from yuv420p to rgba. 15.74 M-V: 0.000 fd= 0 aq= 0KB vq= 333KB sq= 0B f=0/0
Mem: 1240528K used, 460176K free, 8076K shrd, 216K buff, 692796K cached CPU: 41% usr 0% sys 0% nic 57% idle 0% io 0% irq 0% sirq Load average: 1.15 0.33 0.93 3/206 27203 PID PPID USER STAT VSZ %VSZ CPU %CPU COMMAND 27183 24230 root S 1273m 77% 3 41% ffplay 93b45de2144143f0527f8b3b181d185e.mp4 24232 1676 root S 726m 44% 2 0% podman attach xwayland_example 24227 1 root S 2840 0% 3 0% /usr/bin/conmon --api-version 1 -c 95b8eed58d44212f2258ee33e23e203d27aeaa2f89cf9c96a681e326a19cb2c6 -u 95b8eed58d44212f2258ee3 27052 2 root IW 0 0% 1 0% [kworker/u8:1-ev] 27080 2 root IW 0 0% 0 0% [kworker/u8:0-ev] 24318 24268 root S 1028m 62% 0 0% /usr/bin/Xwayland :0 -rootless -listen 55 -listen 56 -displayfd 53 -wm 57 -terminate 24268 24230 root S 429m 26% 3 0% weston --tty=1 --backend=drm-backend.so 24270 24268 root S 36052 2% 0 0% /usr/libexec/weston-keyboard 24271 24268 root S 21624 1% 3 0% /usr/libexec/weston-desktop-shell 1334 1333 root S 21480 1% 0 0% /usr/sbin/NetworkManager -n
③firefoxでの再生
対象の動画ファイル再生時はCPU負荷が90%程度になりました。また、別途試したyoutube動画(VP9エンコード)では60%程度でした。
https://wiki.archlinux.jp/index.php/Firefox
ハードウェアビデオアクセラレーション
に従ってmedia.ffmpeg.xxxの設定を行いましたが変化はありませんでした。
また、settings⇒performanceで「use hardware acceleration when available」を有効にしても同様でした。
root@armadillo:/# firefox root@armadillo:/# top Mem: 1610080K used, 90624K free, 77732K shrd, 276K buff, 697848K cached CPU: 86% usr 3% sys 0% nic 9% idle 0% io 1% irq 0% sirq Load average: 2.06 0.86 0.37 6/375 27861 PID PPID USER STAT VSZ %VSZ CPU %CPU COMMAND 27683 27512 root S 2725m 164% 1 49% {Web Content} /usr/lib/firefox-esr/firefox-esr -contentproc -childID 3 -isForBrowser -prefsLen 6285 -prefMapSize 241532 -jsIni 27512 24230 root S 3093m 186% 1 33% firefox-esr 24318 24268 root S 1048m 63% 0 5% /usr/bin/Xwayland :0 -rootless -listen 55 -listen 56 -displayfd 53 -wm 57 -terminate 24268 24230 root S 443m 27% 1 3% weston --tty=1 --backend=drm-backend.so 24232 1676 root S 726m 44% 2 0% podman attach xwayland_example 1100 2 root SW 0 0% 0 0% [btrfs-transacti] 27516 2 root DW 0 0% 0 0% [kworker/u8:3+ev] 27635 27512 root S 2353m 141% 1 0% {WebExtensions} /usr/lib/firefox-esr/firefox-esr -contentproc -childID 2 -isForBrowser -prefsLen 5625 -prefMapSize 241532 -jsI 27704 23075 root R 1700 0% 2 0% top 203 2 root SW 0 0% 0 0% [irq/65-galcore:] 27706 2 root IW 0 0% 0 0% [kworker/0:0-eve] 27709 2 root IW 0 0% 1 0% [kworker/u8:9-ev]
MOZ_ENABLE_WAYLAND=1 firefoxのようにwaylandを使用するようにしても同様でした。
コメント
r_kawai
r_kawai
マルティネ様
追加の質問となりますが、webkitを使用しているブラウザが動画再生にgstreamerを使用しているとのことですので、chromiumであればVPUで動画再生できる認識でおります。
https://armadillo.atmark-techno.com/forum/armadillo/10921
にてG4上でchromiumを試されていましたが、今後chromiumに対応する予定等はありませんでしょうか。
at_dominique.m…
r_kawaiさん
> 追加の質問となりますが、webkitを使用しているブラウザが動画再生にgstreamerを使用しているとのことですので、chromiumであればVPUで動画再生できる認識でおります。
chromium も一応 webkit-ベースでもありますが、結果的には別物でいくつかの実装を取り入れて結果的にはchromiumもfirefoxと同じく ffmpeg を使っています。
epiphany の方は gstreamer を使っていることまで確認しましたので使えるはずです。G4 で VPU の動画再生までは試してませんが、そちらでできなかったら確認します。
> https://armadillo.atmark-techno.com/forum/armadillo/10921
> にてG4上でchromiumを試されていましたが、今後chromiumに対応する予定等はありませんでしょうか。
去年 https://github.com/Samsung/ChromiumGStreamerBackend あたりのプロジェクトも見てみましたが、このバージョンが古くて無理やりに更新しても満足できるレベルにはたどり着けませんでした。
申し訳ないですが、今のところ chromium をサポートする予定はありません。
よろしくおねがいします。
r_kawai
マルティネ様
ご回答いただきありがとうございます。
>chromium も一応 webkit-ベースでもありますが、結果的には別物でいくつかの実装を取り入れて結果的にはchromiumもfirefoxと同じく ffmpeg を使っています。
webkit-ベースだとgstreamerを使っているものと勘違いしておりました。
今回検討しているシステムではブラウザのみ表示しデスクトップ環境は不要な想定ですが、
https://wiki.gnome.org/Apps/Web/Docs/FrequentlyAskedQuestions
を見ると、
「Epiphany only aims to make Epiphany usable within GNOME. Example: network proxy configuration is handled from the GNOME control center installed instead of Epiphany itself.」
と書いており、Epiphanyを使用するためにはGNOMEをインストールすることが前提のようなので、ブラウザ単体で動かせないかと思いchromiumの対応について質問させていただきました。
システムにGNOMEを入れること自体は問題ないと思うので、ご提案のepiphany-browserをまずは試してみたいと思います。
>今のところ chromium をサポートする予定はありません。
承知いたしました。
at_dominique.m…
r_kawaiさん
> 今回検討しているシステムではブラウザのみ表示しデスクトップ環境は不要な想定ですが、
> https://wiki.gnome.org/Apps/Web/Docs/FrequentlyAskedQuestions
> を見ると、
> 「Epiphany only aims to make Epiphany usable within GNOME. Example: network proxy configuration is handled from the GNOME control center installed instead of Epiphany itself.」
> と書いており、Epiphanyを使用するためにはGNOMEをインストールすることが前提のようなので、ブラウザ単体で動かせないかと思いchromiumの対応について質問させていただきました。
なるほど、こちらの環境でも gnome をインストールせずに使えたので特に疑問に思わなかったが、こういう推奨されてますね。
みたところ、設定をシンプルにする為に gnome の設定を共有に使っているだけで、使えないことはないですが、proxy の設定が必要な場合に確かに面倒ですね…
> システムにGNOMEを入れること自体は問題ないと思うので、ご提案のepiphany-browserをまずは試してみたいと思います。
gnome は動くと思いますが、これも動作確認を行っていません… メモリ消費は少し心配ですので、問題になったらgnomeをインストールして設定だけを gnome-control-center で行ってみて、運用の時に weston のままで epiphany を実行してみてもいいかもしれません。
お手数ですが、よろしくお願いします。
r_kawai
マルティネ様
gnomeをインストールしていない環境でepiphanyを試していますが、後述するような問題が発生しておりうまく動いておりません。
>こちらの環境でも gnome をインストールせずに使えた
とのことでしたが、マルティネ様が確認された際の環境(Dockerfile、podman runでコンテナ起動時の引数)についてご教示頂けませんでしょうか。
また、下記問題について要因が分かりましたら情報をいただけますと幸いです。
■epiphanyのバージョン
3.38.2
■見えている問題
・epiphanyからURL(例:https://www.google.com)を叩いても、対象のサイトに遷移しない
⇒tcpdumpでネットワーク状況を確認しましたが通信データは流れていませんでした。
ただし、「設定」→「一般」タブを表示した際には通信データが流れていました。
・リンクをクリックすると「リンクを表示できませんでした サポートしていない操作です」とエラーが出る
⇒「Webについて」→「情報」タブから「ウエブサイト」のリンクをクリックすると本現象が発生します。
・画面が上下反転して表示されることがある
⇒「設定」→「同期」画面を開くと貼付のキャプチャ(wayland-screenshot-2022-08-31_09-10-41.png)のように画面が上下判定して表示されることがあります。
・設定画面で設定オフオンを切り替えることができない
⇒「設定」→「一般」で「広告をブロックする」等のボタンを押下しても変化がありませんでした。
・コンソールにエラーが出続ける
⇒以下のようなエラーがコンソールに出続けます。
WebKitWebProcess:2): Gdk-WARNING **: 09:24:43.426: Settings portal not found: 子プロセス“dbus-launch”の起動に失敗しました (そのようなファイルやディレクトリはありません) [ 1] Failed to open device: そのようなファイルやディレクトリはありません, Try again... [ 2] Failed to open device: そのようなファイルやディレクトリはありません, Try again... [ 3] Failed to open device: そのようなファイルやディレクトリはありません, Try again... [ 4] Failed to open device: そのようなファイルやディレクトリはありません, Try again...
現在の環境にdbus-launchはインストールされております。
また、straceで確認すると、「Failed to open device」については/dev/graphics/galcoreが存在しないことが原因で発生している模様です。
[pid 9635] openat(AT_FDCWD, "/dev/galcore", O_RDWR) = -1 ENOENT (そのようなファイルやディレクトリはありません) [pid 9635] openat(AT_FDCWD, "/dev/graphics/galcore", O_RDWR) = -1 ENOENT (そのようなファイルやディレクトリはありません) [ 1] Failed to open device: そのようなファイルやディレクトリはありません, Try again... [pid 9635] openat(AT_FDCWD, "/dev/galcore", O_RDWR) = -1 ENOENT (そのようなファイルやディレクトリはありません) [pid 9635] openat(AT_FDCWD, "/dev/graphics/galcore", O_RDWR) = -1 ENOENT (そのようなファイルやディレクトリはありません) [ 2] Failed to open device: そのようなファイルやディレクトリはありません, Try again... [pid 9635] openat(AT_FDCWD, "/dev/galcore", O_RDWR) = -1 ENOENT (そのようなファイルやディレクトリはありません) [pid 9635] openat(AT_FDCWD, "/dev/graphics/galcore", O_RDWR) = -1 ENOENT (そのようなファイルやディレクトリはありません) [ 3] Failed to open device: そのようなファイルやディレクトリはありません, Try again... [pid 9635] openat(AT_FDCWD, "/dev/galcore", O_RDWR) = -1 ENOENT (そのようなファイルやディレクトリはありません) [pid 9635] openat(AT_FDCWD, "/dev/graphics/galcore", O_RDWR) = -1 ENOENT (そのようなファイルやディレクトリはありません)
ファイル | ファイルの説明 |
---|---|
wayland-screenshot-2022-08-31_09-10-41.png |
at_dominique.m…
r_kawaiさん
> gnomeをインストールしていない環境でepiphanyを試していますが、後述するような問題が発生しておりうまく動いておりません。
> >こちらの環境でも gnome をインストールせずに使えた
> とのことでしたが、マルティネ様が確認された際の環境(Dockerfile、podman runでコンテナ起動時の引数)についてご教示頂けませんでしょうか。
> また、下記問題について要因が分かりましたら情報をいただけますと幸いです。
すみません、armadillo 上ではなく普通のPC(debian bookworm)で試しただけです。今日明日G4で試してみてまた連絡します。
分かるところだけを先に回答させていただきます。
> ・コンソールにエラーが出続ける
> ⇒以下のようなエラーがコンソールに出続けます。
> WebKitWebProcess:2): Gdk-WARNING **: 09:24:43.426: Settings portal not found: 子プロセス“dbus-launch”の起動に失敗しました (そのようなファイルやディレクトリはありません)
これは dbus 無しで設定を読めないと言うエラーなので、何かと関係あるかもしれないですね。解決できなかった場合はコンテナでインストールしてみてもいいかもしれません。
> [ 1] Failed to open device: そのようなファイルやディレクトリはありません, Try again... > [ 2] Failed to open device: そのようなファイルやディレクトリはありません, Try again... > [ 3] Failed to open device: そのようなファイルやディレクトリはありません, Try again... > [ 4] Failed to open device: そのようなファイルやディレクトリはありません, Try again...
こちらは strace でみた galcore などのファイルだと思います。
VPU を使う時は /opt/firmware のドライバの他に、 /dev/dri と /dev/galcore、また場合によって /dev/mxc_hantro* /dev/ion もコンテナに渡す必要があります。
最近の rootfs のイメージに以下のコンフィグレーション例がありますので、よろしければ使って見てください
armadillo:~# cat /etc/atmark/containers/at-debian-image.conf.example set_image localhost/at-debian-image:latest # for VPU and NPU add_volumes /opt/firmware:/opt/firmware:ro add_devices /dev/dri /dev/galcore # for video decoding add_devices /dev/mxc_hantro /dev/mxc_hantro_vc8000e /dev/ion # for weston add_volumes /run/udev:/run/udev:ro add_devices /dev/input /dev/tty1 add_args --cap-add=SYS_TTY_CONFIG # for weston with external clients add_volumes /tmp/xdg_home:/run/xdg_home add_args --env=XDG_RUNTIME_DIR=/run/xdg_home # replace with a more useful command or # use with `podman exec -ti at-debian-image bash` set_command sleep infinity
よろしくお願いします
r_kawai
マルティネ様
ご回答いただきありがとうございます。
>これは dbus 無しで設定を読めないと言うエラーなので、何かと関係あるかもしれないですね。解決できなかった場合はコンテナでインストールしてみてもいいかもしれません。
承知しました。dbus関連のインストールを試してみたいと思います。
>VPU を使う時は /opt/firmware のドライバの他に、 /dev/dri と /dev/galcore、また場合によって /dev/mxc_hantro* /dev/ion もコンテナに渡す必要があります。
承知しました。頂いたコンフィグレーション例を試してみようと思います。
ちなみに、検証用に色々試すことを考えてコンテナに強い権限を与えるために、以下のようなオプションを指定してpodman runでコンテナを起動しております。
armadillo:~/work#podman run --rm -itd --name=xwayland_example \ --env=XDG_RUNTIME_DIR=/tmp \ --env=LD_LIBRARY_PATH=/opt/firmware/usr/lib/aarch64-linux-gnu \ --env=QT_QPA_PLATFORM=wayland \ --device=/dev/ \ --volume=/sys:/sys \ --volume=/run/udev:/run/udev:ro \ --volume=/opt/firmware:/opt/firmware:ro \ --privileged \ --net=host \ localhost/at-debian-image:latest /bin/bash
--device=/dev/を指定しているので、コンテナ内でホストの/dev配下のファイルは全て参照できる認識でおりました。
また、コンテナ上で/dev/galcoreは見えておりました。
root@armadillo:/# ls -l /dev/galcore crw------- 1 root root 199, 0 9月 1 01:18 /dev/galcore
>すみません、armadillo 上ではなく普通のPC(debian bookworm)で試しただけです。今日明日G4で試してみてまた連絡します。
ご確認頂けますと大変助かります。
お手数おかけしますが、よろしくお願いいたします。
at_dominique.m…
r_kawaiさん
> ちなみに、検証用に色々試すことを考えてコンテナに強い権限を与えるために、以下のようなオプションを指定してpodman runでコンテナを起動しております。
/etc/atmark/containers も結果的に podman run を実行しますので、結果的には似たようなものです。
>
>
> armadillo:~/work#podman run --rm -itd --name=xwayland_example \ > --env=XDG_RUNTIME_DIR=/tmp \ > --env=LD_LIBRARY_PATH=/opt/firmware/usr/lib/aarch64-linux-gnu \ > --env=QT_QPA_PLATFORM=wayland \ > --device=/dev/ \ > --volume=/sys:/sys \ > --volume=/run/udev:/run/udev:ro \ > --volume=/opt/firmware:/opt/firmware:ro \ > --privileged \ > --net=host \ > localhost/at-debian-image:latest /bin/bash
これは確かによさそうですね。このままでもいいと思います。動かせるようになるまでは制限をあまり入れない方がいいでしょう。
> root@armadillo:/# ls -l /dev/galcore > crw------- 1 root root 199, 0 9月 1 01:18 /dev/galcore
申し訳ございません、私もすぐに同じ現象を確認できました。
どうやら、epiphany も自分のコンテナ(bwrap経由)を作成して、デバイスを見えないようにしています。
「export WEBKIT_FORCE_SANDBOX=0」の変数を設定すれば[1]、このsandboxを無効化できて、googleに接続できましたが…そちらの設定の画面の同じく逆さまになっています。
[1] https://gitlab.gnome.org/GNOME/epiphany/-/issues/1060
また、youtube.com をロードしようとしたら libjavascriptcoregtk-4.0.so.18 で SEGFAULT が発生してロードできませんでした。
これからは開発できるような環境を作っておかないとなかなか難しいそうですね…何か一つ使えるブラウザがないとこまるので、予定より時間をいただきますが引き続き調査してみます。
よろしくお願いします。
r_kawai
r_kawai
マルティネ様
お忙しい中調査頂いているところ申し訳ありませんが、本件の状況についてご教示頂けますでしょうか。
情報をお伝えできておらず申し訳ありませんが、現在検討しているシステムではブラウザ上で複数の動画再生やコンテンツ表示が必要となります。
G4上でこのような機能に対応できない場合端末の変更が必要かもしれないとの話が社内で出てきているため、なんとかG4でGPU対応したブラウザを動作させ、想定するコンテンツの表示ができることを確認したいと考えております。
つきましては、お手数をおかけしますが、今月中くらいには対応方法について分かりますと大変助かります。
at_dominique.m…
r_kawaiさん
お世話になっています。
> お忙しい中調査頂いているところ申し訳ありませんが、本件の状況についてご教示頂けますでしょうか。
報告がなくてすみませんでした。
epiphany-browser を一旦諦めて先週までは flutter で webview を作ってビデオの再生できないかを調査していましたが、これもよろしくない状態になっています(android ではできそうで、linux desktop では現在できない状態ですのですぐには使えません)
今は新しい方向を考慮していますが、以前リストしていた firefox 用の libva のプラグインを試そうと思っています。
> 情報をお伝えできておらず申し訳ありませんが、現在検討しているシステムではブラウザ上で複数の動画再生やコンテンツ表示が必要となります。
> G4上でこのような機能に対応できない場合端末の変更が必要かもしれないとの話が社内で出てきているため、なんとかG4でGPU対応したブラウザを動作させ、想定するコンテンツの表示ができることを確認したいと考えております。
> つきましては、お手数をおかけしますが、今月中くらいには対応方法について分かりますと大変助かります。
事情がよく分かりました。
綺麗な対応ではありませんが、ワークアラウンドとしてはいくつか考えられますので、r_kawaiさんに必要な機能をもう少し教えてもらえますか?
例えば、気持ち悪いですが、何かのスクリプトでビデオの URL を取得して gstreamer で直接に表示することも考えられます。
また、youtube.com が javascript の問題で epiphany で segfault していましたが、youtube 以外のサイトでしたら動くかもしれません(結局動画の再生を試してなかったけど、逆さまの問題だけでしたら解決できそうです)。
逆に firefox の libva のモジュールも何か結果が出るかもしれませんが今月で綺麗に動く必要があれば時間的には厳しいと思います。
よろしくお願いします。
r_kawai
マルティネ様
お忙しいところ色々と調査、ご対応いただき感謝申し上げます。
>綺麗な対応ではありませんが、ワークアラウンドとしてはいくつか考えられますので、r_kawaiさんに必要な機能をもう少し教えてもらえますか?
>例えば、気持ち悪いですが、何かのスクリプトでビデオの URL を取得して gstreamer で直接に表示することも考えられます。
>また、youtube.com が javascript の問題で epiphany で segfault していましたが、youtube 以外のサイトでしたら動くかもしれません(結局動画の再生を試してなかったけど、逆さまの問題だけでしたら解決できそうです)。
諸事情により詳細についてはお伝えすることができず申し訳ありませんが、システムの仕様上ブラウザの使用が必要となっており、
gstreamerの使用や、特定のサイトの表示ができない場合、今回のシステムで使うのは厳しい見込みです。
>逆に firefox の libva のモジュールも何か結果が出るかもしれませんが今月で綺麗に動く必要があれば時間的には厳しいと思います。
完全には動作しなくても、まずはG4上のブラウザからGPUを使用して動画再生ができそうかどうかの見極めができれありがたく存じます。
お手数をおかけしますが、よろしくお願いいたします。
at_dominique.m…
r_kawaiさん
> 諸事情により詳細についてはお伝えすることができず申し訳ありませんが、システムの仕様上ブラウザの使用が必要となっており、
> gstreamerの使用や、特定のサイトの表示ができない場合、今回のシステムで使うのは厳しい見込みです。
了解しました。
> >逆に firefox の libva のモジュールも何か結果が出るかもしれませんが今月で綺麗に動く必要があれば時間的には厳しいと思います。
>
> 完全には動作しなくても、まずはG4上のブラウザからGPUを使用して動画再生ができそうかどうかの見極めができれありがたく存じます。
それでしたら何とかなるかもしれません。
他の作業を進みながら調査してみますのですぐに進歩を約束できませんが、引き続き調査で何か分かったらまた連絡いたします。
よろしくお願いします。
at_dominique.m…
r_kawaiさん
お世話になっています、
マルティネです。
> 他の作業を進みながら調査してみますのですぐに進歩を約束できませんが、引き続き調査で何か分かったらまた連絡いたします。
まだいいお知らせはできませんが、現状報告です。
firefox の方は VPU decoding どころか、rendering もソフトウェアで行っていました。debian stable のバージョンが古くて、nxp ライブラリーを最新の環境に揃って debian testing でも試しましたが GLES のテストが通りませんので firefox を再び保留します。
少なくても at-debian-image を bookworm に更新できるようにするまでは使えなさそうなので、そこを進めてもメリットがありません。
それでしたら webkitgtk / epiphany-browser の方が好ましいと思って segfault の元を debian 側で修正するように進めています。( https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1016811 )
ビルドに大変時間がかかりますので、今月末までに結果がでるかどうかは約束できませんが、引き続き作業に戻ります。
よろしくお願いします。
r_kawai
at_dominique.m…
引き続き現状報告です。
- なぜか webkitgtk を自分でビルドすると普通に(落ちることなく)動きますので、この問題は恐らくビルド環境の問題でした。
ビルド自体は難しくないですが、メモリの多いパソコンと時間が必要ですので .deb ファイルをこちらから提供しようと思います。
- 画面が逆さま問題も分かりました。実は、gtk の GL のコードで落ちていて、 software rendering で変わりに実行していましたが、そこはなぜかあえて逆さまにするコードがあって、これを外せば元通りになります。
diff --git a/Source/WebKit/UIProcess/gtk/AcceleratedBackingStoreWayland.cpp b/Source/WebKit/UIProcess/gtk/AcceleratedBackingStoreWayland.cpp index 6316499..88541f3 100644 --- a/Source/WebKit/UIProcess/gtk/AcceleratedBackingStoreWayland.cpp +++ b/Source/WebKit/UIProcess/gtk/AcceleratedBackingStoreWayland.cpp @@ -605,11 +605,6 @@ bool AcceleratedBackingStoreWayland::paint(cairo_t* cr, const IntRect& clipRect) RELEASE_ASSERT_NOT_REACHED(); } - // The compositor renders the texture flipped for gdk_cairo_draw_from_gl, fix that here. - cairo_matrix_t transform; - cairo_matrix_init(&transform, 1, 0, 0, -1, 0, cairo_image_surface_get_height(m_surface.get()) / m_webPage.deviceScaleFactor()); - cairo_transform(cr, &transform); - cairo_rectangle(cr, clipRect.x(), clipRect.y(), clipRect.width(), clipRect.height()); cairo_set_source_surface(cr, m_surface.get(), 0, 0); cairo_set_operator(cr, CAIRO_OPERATOR_OVER);
この問題についてはアップストリームと相談する予定ですが、できればソフトウェアではなくGLESで表示させたいので、その辺についてはもうちょっと試してからまた連絡します。
ちなみに、rendering (表示)は CPU で行っていますが、decoding 自体は想定していた通りに gstreamer で VPU を使っています。CPU 負担は~150%でけして低いとは言えませんが、表示のための負担なのでいくつかの動画を同時に decoding できるはずです。
そちらのサイトで確認するしかないので、パッケージの提供準備ができたらまた連絡します。
よろしくお願いします。
at_dominique.m…
rendering の問題も解決しました。gtk 3 の不具合ですので、gtk3 のパッケージも更新しないといけませんが、これで綺麗に動きます。(それでもちょっと遅いですが、一度設定していたら使えるかと思います)
パッケージを添付したので、試す時間があればぜひ試してみてください。
普通に epiphany-browser を一度インストールしてから、システムにインストールされてるパッケージを添付した物に入れ替えて、以下のコマンドで実行してみてください。
私の場合は以下のコマンドを実行しました:
apt install epiphany-browser tar xf webkit+gtk_deb.tar cd webkit+gtk_deb apt install ./libgtk-3-0_3.24.24-4+deb11u2at1_arm64.deb \ ./libgtk-3-bin_3.24.24-4+deb11u2at1_arm64.deb \ ./libgtk-3-common_3.24.24-4+deb11u2at1_all.deb \ ./libjavascriptcoregtk-4.0-18_2.38.0-2at1_arm64.deb \ ./libwebkit2gtk-4.0-37_2.38.0-2at1_arm64.deb WEBKIT_FORCE_SANDBOX=0 GDK_GL=gles epiphany
ちなみに、
- dbus と X11 のワーニングがあれば無視していいです。
- 自分のサイト以外にも使っていたら、コンテナ内の atmark ユーザーを使うこともおすすめします。at-weston-launch を参考にできればと思います。こちらも確認済です。
よろしくお願いします。
ファイル | ファイルの説明 |
---|---|
webkit+gtk_deb.tar | webkitgtk と gtk+ の修正された debian パッケージ |
r_kawai
マルティネ様
ご教示頂いた方法でファイルをインストールし、epiphanyが動作することを確認しました。
以前firefoxで2つ動画を再生した際はCPU使用率は90%程度となり、3つ動画再生時はどれか一つの動画が停止する状況でしたが、
epiphanyだと同様の動画を5つ再生してもいずれも停止せず、CPU使用率は60~70%程度で、明らかな改善が見られました。
想定するコンテンツをいくつか表示させていますが現状問題はなさそうです。
また、現在数時間程度動作させていますが特にクラッシュする等の問題は発生しておりません。
もう少し色々触って見てみようと思いますが、epiphanyを使用する方向で進められそうな目途が見えてきました。
本件については、調査やdebianへの問い合わせ、パッケージのビルド等、お忙しいところ多大なご協力を頂き誠にありがとうございました。
不明点等ありましたら再度質問させて頂くかもしれませんが、その際はよろしくお願いいたします。
at_dominique.m…
r_kawaiさん、
お待たせ致しました。
webkitgtk のパッケージは debian で修正されたので、私が提供した libjavascriptcore と libwebkit2gtk の二つのパッケージをもう使わない方がいいと思います。
debian bullseye にあるバージョンは、私が提供したバージョンより小さいですが、webkitgtk に脆弱性が多いため更新されてるバージョンが好ましいです。
こちらで確認したところ、VPUもちゃんと使ってますので、試してから今後のアップデートに考慮してください。
gtk3 のパッケージの方はまだ修正されてませんので、そちらはまだ私が提供したパッケージを使わないと逆さまの問題が残ります。そちらも debian で修正したいと思いますので、できたらまた連絡します。
よろしくお願いします。
at_dominique.m…
r_kawai
マルティネ様
ご連絡いただきありがとうございます。
>webkitgtk のパッケージは debian で修正されたので、私が提供した libjavascriptcore と libwebkit2gtk の二つのパッケージをもう使わない方がいいと思います。
頂いたwebkit+gtk_deb.tarからlibjavascriptcoreとlibwebkit2gtkを外し、以下のようにgtk3関連のライブラリのみインストールするように修正しました。
COPY resources/webkit+gtk_deb.tar /home/atmark RUN cd /home/atmark && tar xf webkit+gtk_deb.tar && cd webkit+gtk_deb && \ apt install ./libgtk-3-0_3.24.24-4+deb11u2at1_arm64.deb \ ./libgtk-3-bin_3.24.24-4+deb11u2at1_arm64.deb \ ./libgtk-3-common_3.24.24-4+deb11u2at1_all.deb
上記修正後のコンテナ上でのインストールパッケージは以下のようになっております。
libjavascriptcoreとlibwebkit2gtkについては2.38.2-1~deb11u1となっています。
root@armadillo:/# dpkg-query -l ... i libgtk-3-0:arm64 3.24.24-4+deb11u2at1 arm64 GTK graphical user interface library ii libgtk-3-bin 3.24.24-4+deb11u2at1 arm64 programs for the GTK graphical user interface library ii libgtk-3-common 3.24.24-4+deb11u2at1 all common files for the GTK graphical user interface library ii libjavascriptcoregtk-4.0-18:arm64 2.38.2-1~deb11u1 arm64 JavaScript engine library from WebKitGTK ii libwebkit2gtk-4.0-37:arm64 2.38.2-1~deb11u1 arm64 Web content engine library for GTK
この環境で特に問題なく動作することが確認できました。
>gtk3 のパッケージの方はまだ修正されてませんので、そちらはまだ私が提供したパッケージを使わないと逆さまの問題が残ります。
こちらも試してみましたが、ご連絡頂いた通り画面が逆さになっていることを確認しました。
>そちらも debian で修正したいと思いますので、できたらまた連絡します。
ありがとうございます。
お忙しいところお手数をおかけいたしますが、引き続きよろしくお願いいたします。
at_dominique.m…
r_kawai
at_dominique.m…
2022年8月22日 17時03分
r_kawaiさん、
お世話になっています。
アットマークテクノのマルティネです。
> 標題の件につきまして、現在firefox上で動画再生を試していますが、CPU負荷が高くなっており、VPUを使用していないように見えます。
> 以下ではh264でエンコードしたmp4ファイルで確認を行っていますが、youtubeのVP9でエンコードされたストリーミング映像も同様でした。
> つきましては、firefox上でVPUを使って動画を再生する方法がありましたらご教示頂けませんでしょうか。
簡単にまとめると、現在 firefox で VPU の動画再生は難しいです。
NXP から提供されてるソフトウェアは gstreamer のみになっていますが、firefox はおっしゃるとおりに ffmpeg を使っています。
そこで ffmpeg に VPU の使い方をあらかじめ組み込まないと CPU を使ってしまいます。
# 以下の助言は実際に試していませんので、何かおかしいと思ったらまた聞いてください
ffmpeg では方向は二つあって、手間がかかります:
* 現在のカーネルの API は hantro と言って、libva のモジュール経由で使えるそうです: https://github.com/pH5/libva/tree/hantro-h264
* 新しいカーネルの場合に「v4l2 request」にh264などの新しいめのcodecを追加されたので、そのAPIを使います( https://github.com/bootlin/libva-v4l2-request か https://github.com/martinetd/FFmpeg/tree/v4l2-request )が、そのv4l2 request の新しい API は G4 のカーネルにまだ入れていません(ソフトウェア的に使いやすくなったら backport する可能性もありますが、今のところはまだメリットが少なくて、保留です。)
申し訳ないですが、時間がものすごく余ってなければ現状では gstreamer を使ってください。souphttpsrc を使ってwebから動画を取得できますし、youtube を使う必要があれば webkitgtk で gstreamer を使ってるはずですのでそういう系の browser (epiphany-browser等)で VPU を使えるはずです。
よろしくお願いします。