Armadilloフォーラム

firefox上で動画再生時にVPUを使用する方法について

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を使用するようにしても同様でした。

コメント

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-requesthttps://github.com/martinetd/FFmpeg/tree/v4l2-request )が、そのv4l2 request の新しい API は G4 のカーネルにまだ入れていません(ソフトウェア的に使いやすくなったら backport する可能性もありますが、今のところはまだメリットが少なくて、保留です。)

申し訳ないですが、時間がものすごく余ってなければ現状では gstreamer を使ってください。souphttpsrc を使ってwebから動画を取得できますし、youtube を使う必要があれば webkitgtk で gstreamer を使ってるはずですのでそういう系の browser (epiphany-browser等)で VPU を使えるはずです。

よろしくお願いします。

r_kawai

2022年8月22日 17時49分

マルティネ様

迅速なご回答ありがとうございます。
firefoxでVPUによる動画再生は現状難しい旨承知いたしました。
まずはご提案頂いたgstreamer+webkitgtkベースのブラウザを検討したいと思います。
不明点等ありましたら再度質問させて頂くかもしれませんが、その際はよろしくお願いいたします。

r_kawai

2022年8月24日 18時44分

マルティネ様

追加の質問となりますが、webkitを使用しているブラウザが動画再生にgstreamerを使用しているとのことですので、chromiumであればVPUで動画再生できる認識でおります。

https://armadillo.atmark-techno.com/forum/armadillo/10921
にてG4上でchromiumを試されていましたが、今後chromiumに対応する予定等はありませんでしょうか。

at_dominique.m…

2022年8月25日 8時33分

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

2022年8月25日 15時49分

マルティネ様

ご回答いただきありがとうございます。

>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…

2022年8月25日 16時42分

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

2022年8月31日 18時48分

マルティネ様

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…

2022年9月1日 9時42分

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

2022年9月1日 10時34分

マルティネ様

ご回答いただきありがとうございます。

>これは 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…

2022年9月1日 10時56分

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

2022年9月1日 11時35分

マルティネ様

ご確認いただきありがとうございます。
色々な要素が複雑に関連しているのですね。

>これからは開発できるような環境を作っておかないとなかなか難しいそうですね…何か一つ使えるブラウザがないとこまるので、予定より時間をいただきますが引き続き調査してみます。

お忙しいところお手数をおかけして申し訳ありませんが、引き続きよろしくお願いいたします。

r_kawai

2022年9月12日 16時31分

マルティネ様

お忙しい中調査頂いているところ申し訳ありませんが、本件の状況についてご教示頂けますでしょうか。
情報をお伝えできておらず申し訳ありませんが、現在検討しているシステムではブラウザ上で複数の動画再生やコンテンツ表示が必要となります。
G4上でこのような機能に対応できない場合端末の変更が必要かもしれないとの話が社内で出てきているため、なんとかG4でGPU対応したブラウザを動作させ、想定するコンテンツの表示ができることを確認したいと考えております。
つきましては、お手数をおかけしますが、今月中くらいには対応方法について分かりますと大変助かります。

at_dominique.m…

2022年9月12日 17時25分

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

2022年9月12日 18時41分

マルティネ様

お忙しいところ色々と調査、ご対応いただき感謝申し上げます。

>綺麗な対応ではありませんが、ワークアラウンドとしてはいくつか考えられますので、r_kawaiさんに必要な機能をもう少し教えてもらえますか?
>例えば、気持ち悪いですが、何かのスクリプトでビデオの URL を取得して gstreamer で直接に表示することも考えられます。
>また、youtube.com が javascript の問題で epiphany で segfault していましたが、youtube 以外のサイトでしたら動くかもしれません(結局動画の再生を試してなかったけど、逆さまの問題だけでしたら解決できそうです)。

諸事情により詳細についてはお伝えすることができず申し訳ありませんが、システムの仕様上ブラウザの使用が必要となっており、
gstreamerの使用や、特定のサイトの表示ができない場合、今回のシステムで使うのは厳しい見込みです。

>逆に firefox の libva のモジュールも何か結果が出るかもしれませんが今月で綺麗に動く必要があれば時間的には厳しいと思います。

完全には動作しなくても、まずはG4上のブラウザからGPUを使用して動画再生ができそうかどうかの見極めができれありがたく存じます。

お手数をおかけしますが、よろしくお願いいたします。

at_dominique.m…

2022年9月13日 8時21分

r_kawaiさん

> 諸事情により詳細についてはお伝えすることができず申し訳ありませんが、システムの仕様上ブラウザの使用が必要となっており、
> gstreamerの使用や、特定のサイトの表示ができない場合、今回のシステムで使うのは厳しい見込みです。

了解しました。

> >逆に firefox の libva のモジュールも何か結果が出るかもしれませんが今月で綺麗に動く必要があれば時間的には厳しいと思います。
>
> 完全には動作しなくても、まずはG4上のブラウザからGPUを使用して動画再生ができそうかどうかの見極めができれありがたく存じます。

それでしたら何とかなるかもしれません。
他の作業を進みながら調査してみますのですぐに進歩を約束できませんが、引き続き調査で何か分かったらまた連絡いたします。

よろしくお願いします。

at_dominique.m…

2022年9月22日 10時06分

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

2022年9月22日 18時38分

マルティネ様

現状についてご連絡いただきありがとうございます。
また、調査やDebian Bugへの問い合わせ等色々とご対応いただき助かります。
現在の状況について承知いたしました。
お手数をおかけしますが、引き続きご対応をよろしくお願いいたします。

at_dominique.m…

2022年9月28日 9時16分

引き続き現状報告です。

- なぜか 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…

2022年9月28日 15時54分

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

2022年9月28日 20時29分

マルティネ様

ご教示頂いた方法でファイルをインストールし、epiphanyが動作することを確認しました。

以前firefoxで2つ動画を再生した際はCPU使用率は90%程度となり、3つ動画再生時はどれか一つの動画が停止する状況でしたが、
epiphanyだと同様の動画を5つ再生してもいずれも停止せず、CPU使用率は60~70%程度で、明らかな改善が見られました。
想定するコンテンツをいくつか表示させていますが現状問題はなさそうです。
また、現在数時間程度動作させていますが特にクラッシュする等の問題は発生しておりません。
もう少し色々触って見てみようと思いますが、epiphanyを使用する方向で進められそうな目途が見えてきました。

本件については、調査やdebianへの問い合わせ、パッケージのビルド等、お忙しいところ多大なご協力を頂き誠にありがとうございました。
不明点等ありましたら再度質問させて頂くかもしれませんが、その際はよろしくお願いいたします。