Jetson NanoでCEF (Chromium Embedded Framework)をビルドしてみた


はじめに

Jetson Nanoでライブ配信ソフトOBS Studioを"ブラウザソースあり"でビルドできないの?!という質問を受けた。

公式ページを参照すると、"ブラウザソースあり"=ブラウザソースプラグインをビルドするためには、CEF (Chromium Embedded Framework)が必要ということが分かった。

CEF (Chromium Embedded Framework)とは

Google Chromeの表示部分だけを抜き出したフレームワークで、他のアプリ(今回はOBS Studio)に埋め込んで使用する。CEFはChromium本体から作られる=ビルドに時間がかかるので、Spotify社が提供するビルド済ライブラリを利用してビルドしてみた。

ビルド手順

1. ビルドに必要なパッケージのインストール

$ sudo apt install build-essential gtk2.0 libgtk2.0-dev libgtkglext1-dev

2. ソースのダウンロード

$ git clone https://bitbucket.org/chromiumembedded/cef-project

3. CMakeLists.txtの変更

Jetson Nano (JetPack 4.5.1)はlinuxarm64アーキテクチャで、CMakeLists.txtはlinuxarm64を想定していないため、CMakeLists.txtの変更が必要になります。

$ cd cef-project

CMakeLists.txtに以下の内容を追加します。

    if(PROJECT_ARCH STREQUAL "linuxarm64")
      set(CEF_PLATFORM "linuxarm64")
    endif()

差分は以下のとおりです。

$ diff CMakeLists.txt CMakeLists.txt_org 
36,38d35
<     if(PROJECT_ARCH STREQUAL "linuxarm64")
<       set(CEF_PLATFORM "linuxarm64")
<     endif()

変更したCMakeLists.txtをgithubに置きます。

4. ビルド

$ mkdir build && cd build
$ cmake -G "Unix Makefiles" -DPROJECT_ARCH="linuxarm64" -DCMAKE_BUILD_TYPE=Release ..
$ make -j4

5. cefclientの動作確認

ビルド途中に表示されるchrome-sandboxの所有者と権限を変更します。

$ cd third_party/cef/cef_binary_87.1.12+g03f9336+chromium-87.0.4280.88_linuxarm64/tests/cefclient/Release
$ sudo chown root:root chrome-sandbox
$ sudo chmod 4755 chrome-sandbox

cefclientを起動します。


$ ./cefclient

参考

  • 2022/3/21 追記

Jetson Nano JetPack 4.6.1 / cef_binary_96.0.16+g89c902b+chromium-96.0.4664.55_linuxarm64

環境

  • Jetson Nano 4GB (A02)
  • JetPack 4.6.1
  • cef_binary_96.0.16+g89c902b+chromium-96.0.4664.55_linuxarm64

1. ビルドに必要なパッケージのインストール

追加で以下のパッケージのインストールが必要です。

$ sudo apt install libgtk-3-dev

これ以外の手順は同じです。