2023,江端さんの技術メモ

Raspberry Pi Ubuntu Spinnaker SDK Setup
Raspberry Pi Ubuntu Spinnaker SDKのセットアップ

These steps describe using an Ubuntu desktop environment to install Ubuntu and the Spinnaker Python interface on a Raspberry Pi 3 B+. Commands to be run on the desktop are prefaced with (desktop)$, and commands to be run on the Raspberry Pi are prefaced with (pi)$

この手順では、Ubuntuデスクトップ環境を使用して、Raspberry Pi 3 B+にUbuntuとSpinnaker Pythonインターフェースをインストールする方法を説明します。デスクトップ上で実行するコマンドの前には(desktop)$を、Raspberry Pi上で実行するコマンドの前には(pi)$を付けます。

  1. Flash the latest Ubuntu image (at the time of writing: 18.04) to an SD card and perform first-time setup by following these instructions. You will need an HDMI cable, a monitor, and a keyboard. The Raspberry Pi must also be connected to your local network via Ethernet.
    最新のUbuntuイメージ(執筆時点では18.04)をSDカードに書き込み、以下の手順に従って初回セットアップを行う。HDMIケーブル、モニター、キーボードが必要です。また、Raspberry Piはイーサネット経由でローカルネットワークに接続されている必要があります。

  2. Perform basic software updates on the Pi:
    Piの基本的なソフトウェアアップデートを行う:
    (pi)$ sudo apt update && sudo apt upgrade
  3. Go to the FLIR File Download website for your camera. The software downloads will require a free FLIR account.
    お使いのカメラのフリアーファイルダウンロードサイトにアクセスします。ソフトウェアのダウンロードにはフリアーシステムズの無料アカウントが必要です。

  4. On the FLIR website, find the latest Linux Ubuntu ARM Operating System packages.
    フリアーシステムズのウェブサイトで、最新のLinux Ubuntu ARMオペレーティングシステムパッケージをご覧ください。

  5. Download the ARM64 packages for the Spinnaker SDK and Spinnaker Python Interface, and transfer them to the Raspberry Pi. Eg:
    Spinnaker SDK と Spinnaker Python Interface の ARM64 パッケージをダウンロードし、Raspberry Pi に転送します。例

    (pi)$ ip a # check pi's ip address
    (desktop)$ scp spinnaker-*-pkg.tar.gz spinnaker_python-*.tar \
     ubuntu@<pi's ip address>:~
  6. On the Raspberry Pi, untar the spinnaker sdk and enter the untarred directory
    Raspberry Pi上で、spinnaker sdkをuntarし、untarしたディレクトリに入ります。
  7. Read the README file fully, then run the install script. Eg:
    READMEファイルを十分に読んでから、インストールスクリプトを実行してください。例

    (pi)$ sudo sh install_spinnaker_arm.sh
  8. You will probably run into some dependency issues while installing the SDK. If that’s the case, missing packages can be installed manually with:
    SDKのインストール中に依存関係の問題に遭遇することもあるでしょう。その場合、不足しているパッケージを手動でインストールすることができます:

    (pi)$ sudo apt install <name-of-missing-package>
    
    
  9. Change back to your home directory, untar the python interface, then untar the python 3.6 interface.
    ホームディレクトリに戻り、pythonインターフェースをuntarし、python 3.6インターフェースをuntarする。

    (pi)$ tar -xf spinnaker_python-1.*.tar
    (pi)$ tar -xf spinnaker_python-1.*cp36*.tar.gz 
  10. Read the README.txt fully, then install numpy and the Spinnaker python interface. At the time of writing, there are no precompiled wheels for numpy on Ubuntu ARM, so pip will compile the package from souce. This will take several hours, but can be sped up a bit by increasing the Pi's swap size.
    README.txtを十分に読み、numpyとSpinnaker pythonインターフェースをインストールします。この記事を書いている時点では、Ubuntu ARMにはnumpy用のプリコンパイルホイールがないので、pipがソースからパッケージをコンパイルします。これには数時間かかりますが、Piのスワップサイズを大きくすることで少しスピードアップできます。

    (pi)$ sudo apt install dphys-swapfile # (optional)
    # follow the rest of the increasing swap size tutorial (optional)
    (pi)$ sudo apt install python3-pip
    (pi)$ python3 -m pip install numpy
    (pi)$ sudo python3 -m pip install spinnaker_python-1.*.whl
  11. Ensure the python module can be imported successfully:
    pythonモジュールが正常にインポートできることを確認する:

    (pi)$ python3 -c 'import PySpin' # should take a few seconds, then exit silently

    You will probably run into more dependency issues here. When you try to import PySpin with a missing dependency, you'll get an error along the lines of No Such File: <name-of-missing-package>.so. See step 8 for help resolving these issues.
    おそらくここで依存関係の問題にもっとぶつかるでしょう。依存関係が見つからないPySpinをインポートしようとすると、No Such File: <名前-of-missing-package>.soというエラーが表示されます。このような問題の解決についてはステップ8を参照してください。

  12. Increase the space allocated to USB devices on the Pi. This is needed so that the images taken by the camera can fit properly within RAM. Note: This change will not persist through reboot and must be repeated.
    PiのUSBデバイスに割り当てられる容量を増やす。これは、カメラで撮影された画像がRAM内に適切に収まるようにするために必要です。注意: この変更は再起動しても維持されないので、繰り返し行う必要があります。

    (pi)$ sudo sh -c 'echo 256 > /sys/module/usbcore/parameters/usbfs_memory_mb'
  13. Connect your USB 3.1 FLIR camera to the Raspberry Pi via USB.
    USB3.1フリアーシステムズのカメラをUSB経由でRaspberry Piに接続します。

  14. Change into the Examples directory for PySpin, and run the Acquisition.py example as root. If this succeeds, the camera will take 10 pictures and store them as JPEGs in the current directory.
    PySpinのExamplesディレクトリに移動し、rootでAcquisition.pyを実行します。これが成功すると、カメラは10枚の写真を撮影し、JPEGとしてカレントディレクトリに保存します。

    (pi)$ cd Examples/Python3
    (pi)$ sudo python3 Acquisition.py
    
    

 

 

2023,江端さんの技術メモ

BFS-U3-89S6C-C(カメラ)を先ず動かす。

私が購入したときは、15K円くらいだったのですが、今、倍になっています。ラズパイって高価になっているんですね ―― それはさておき。

Raspberry Pi 4Bは、USB3対応のようですが、どちらのポートか分かりません。この写真を見ると右側のようです。

(出典 https://misoji-engineer.com/archives/raspberrypi-usb3.html)

まずは、ドライバのありかを探してみました。

https://www.flir.jp/support-center/iis/machine-vision/downloads/spinnaker-sdk-download/spinnaker-sdk--download-files/

あきらかに、これが当たりのように見えます。

ラズパイP4の石は、ARMのようです。

https://qiita.com/memakura/items/a77137856f91d6c4db43

何がどうなっているのかは分からないけど、

https://blog.csdn.net/weixin_42088912/article/details/118225949

を参考にして、/etc/udev/rule.d/40-flir-spinnaker.rules の

SUBSYSTEM=="usb", ATTRS{idVendor}=="1e10", GROUP="flirimaging"
SUBSYSTEM=="usb", ATTRS{idVendor}=="1724", GROUP="flirimaging"
SUBSYSTEM=="usb", ATTRS{idVendor}=="1e10", GROUP="flirimaging"
SUBSYSTEM=="usb", ATTRS{idVendor}=="1724", GROUP="flirimaging"

SUBSYSTEM=="usb", ATTRS{idVendor}=="1e10",ATTRS{idProduct}=="4000", MODE="0777", GROUP="flirimaging"
SUBSYSTEM=="usb", ATTRS{idVendor}=="1724", GROUP="flirimaging"

としたら、やっと"USB interface0"が出てきた

けど、映像が表示されないし、「SpinView_QTの応答がありません」、とか言われる。

sudo dmesg をやると

[ 533.947639] usb 2-1: Product: Blackfly S BFS-U3-89S6C
[ 533.947652] usb 2-1: Manufacturer: FLIR
[ 533.947663] usb 2-1: SerialNumber: 0126934F
[ 600.668167] usb 2-1: reset SuperSpeed USB device number 4 using xhci_hcd
[ 709.333799] xhci_hcd 0000:01:00.0: swiotlb buffer is full (sz: 16384 bytes), total 32768 (slots), used 32687 (slots)

のようなメッセージがでてくので、

https://zenn.dev/yonishi/scraps/e735a6ef11d8b5

を参考に対応。 改善なし。

https://wpitchoune.net/tricks/raspberry_pi3_increase_swap_size.html

の対応を実施

表示に成功! 詳しくは明日 ―― つかれはてました。

 

2023,江端さんの技術メモ

  1.  ターゲットのカメラ BFS-U3-89S6C-C
  2. 背景と目的
    『動かすこと』が仕事だからです(それ以上は秘密です)。
  3. 注意
    たまたま、以下の手順で動いただけで、これが正解かは分かりません。
  4. 手順
    1. USB3のセット
      デバイスマネージャーを起動する

      ドロップダウンリストを確認し、USB Root Hub (USB 3.0)を右クリック(またはタップ&ホールド)し、[Uninstall Device(デバイスのアンインストール)]を選択します(重複している場合は、1つずつすべてアンインストールしてください)。
      必要であれば動作を確認し、デバイスを再起動します。再起動すると、Windows 10が自動的にUSBドライバを再インストールするはずです(私は、リブートしました)。

    2. TELEDYNE FLIR のページにアクセス
      https://www.flir.jp/support/products/blackfly-s-usb3/#Overview あたりを叩くと、多分「アカウント作れ」と言われると思いますので、素直にアカウントを作ってログインします。
    3. そんでもって、https://statics.teams.cdn.office.net/evergreen-assets/safelinks/1/atp-safelinks.html から、

      をダウンロードして、インストールします。
      (理由はよく分かりませんが)ダウンロードした後にデバイスドライバを確認すると、デバイスがインストールされていました。

    4. SpinViewの起動
      メニューに、SpinViewが追加されているので、そこからアプリケーションを起動します。

      ここをクリックします。

      画面が出てくるので、以下のボタンを押して下さい。

      キャリブレーションに時間がかかるようですが、こんな感じの映像が出てきました

以上

 

2023,江端さんの技術メモ

【Pythonで行う】因子分析

wsl -d Ubuntu-20.04 で、

ebata@DESKTOP-P6KREM0:/mnt/c/Users/ebata/go-efa$ python main3.py

で実行可能。

ebata@DESKTOP-P6KREM0:/mnt/c/Users/ebata/go-efa$ python main3.py
[3.61634475 2.11925085 0.87875762 0.5678116 0.37337846 0.08163572
0.15971804 0.20310295]
第1因子 第2因子 共通性
x1 -0.196394 0.917136 0.879709
x2 0.859422 0.067413 0.743150
x3 0.829155 -0.161144 0.713466
x4 -0.017808 0.558695 0.312457
x5 0.984061 -0.063608 0.972421
x6 0.180765 0.850078 0.755308
x7 0.680743 -0.064480 0.467569
x8 0.532039 0.221023 0.331916
第1因子 第2因子
因子負荷量の二乗和 3.212520 1.963477
寄与率 0.401565 0.245435
累積寄与率 0.401565 0.647000

2023,江端さんの技術メモ

まず、WIndows10のWSL Ubuntu-20.04 を WSL2にしなければなりません。

WSLのバージョンが"1"だったので"2"に変えようとしたら、ちょっと酷い目にあった件

でもって、さらに、このWSL2に usbのデバイスを使えるようにしなければなりません。

再度、『wsl で USBのWebカメラを使う』に挑戦中

でもって、Gstreamの環境がインストールされていることが前提です。

Windows10のWSLでX11アプリケーションを実行してみた + GStreamerを試してみた

と、ターゲットのカメラはこれ

Webカメラ C270n HD 720P

=====  手続の備忘録 ======

Step 1: powershellを管理者モードで立ち上げて、"
usbipd server"投入

Step 2: コマンドプロンプトから、"C:\Users\ebata>wsl -d Ubuntu-20.04"を投入

Step 3: 別のpowershellを管理者モードで立ち上げて、"
usbipd wsl attach --distribution Ubuntu-20.04 --busid 8-3"を投入

Step 4: コマンドプロンプトから、"C:\Users\ebata>sudo chmod 777 /dev/video*"を投入

これらを乗り超えて、ようやく、Gstreamer で、Webカメラの映像をループバックで表示しようとしたのですが、これが全く分からなくて、色々試しました。やけくそのトアイアンドエラー

gst-launch-1.0 videotestsrc ! videoconvert ! x264enc tune=zerolatency key-int-max=30 ! mpegtsmux ! srtserversink uri="srt://:12345" latency=500
(成功)

gst-launch-1.0 v4l2src device="/dev/video0" ! 'video/x-raw, width=640, height=480, framerate=30/1' ! videoconvert ! nv3dsink (失敗)

gst-launch-1.0 videotestsrc ! videoconvert ! video/x-raw,width=1280,height=720,framerate=30/1 ! autovideosink

gst-launch-1.0 -e filesrc location=start_up.mp4 ! videoconvert ! x264enc tune=zerolatency key-int-max=30 ! mpegtsmux ! srtserversink uri="srt://:12345" latency=500
(失敗)

gst-launch-1.0 filesrc location=start_up.mp4 ! decodebin ! videorate ! video/x-raw,framerate=30/1 ! autovideosink
(動く)

gst-launch-1.0 filesrc location=start_up.mp4 ! decodebin ! videorate ! video/x-raw,framerate=30/1 ! srtserversink uri="srt://:12345" latency=500(動く)

gst-launch-1.0 v4l2src ! videoconvert ! ximagesink (動くが、大きなブラック画面がでてきただけ)

gst-launch-1.0 v4l2src device="/dev/video0" ! videoconvert ! ximagesink

gst-launch-1.0 v4l2src device="/dev/video0" ! 'video/x-raw, width=640, height=480, framerate=30/1' ! videoconvert ! nv3dsink

gst-launch-1.0 v4l2src device="/dev/video0" ! 'video/x-raw, width=640, height=480, framerate=30/1' ! videoconvert ! ximagesink
(これは黒い画面が表示される)

gst-launch-1.0 filesrc location=start_up.mp4 ! decodebin ! videorate ! video/x-raw,framerate=1/1 ! srtserversink uri="srt://:12345" latency=500
(失敗)
00:40:58.339192/multiqueue0:src*E:SRT.c: LiveCC: payload size: 506880 exceeds maximum allowed 1316
00:40:59.339081/multiqueue0:src*E:SRT.c: LiveCC: payload size: 506880 exceeds maximum allowed 1316
00:41:00.339101/multiqueue0:src*E:SRT.c: LiveCC: payload size: 506880 exceeds maximum allowed 1316
00:41:01.339057/multiqueue0:src*E:SRT.c: LiveCC: payload size: 506880 exceeds maximum allowed 1316

gst-launch-1.0 filesrc location=start_up.mp4 ! decodebin ! videorate ! video/x-raw,framerate=1/1 ! autovideosink
(成功)

gst-launch-1.0 filesrc location=start_up.mp4 ! videoconvert ! x264enc tune=zerolatency key-int-max=30 ! mpegtsmux ! srtserversink uri="srt://:12345" latency=500
(失敗)

gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw, height=480, width=640 ! videoconvert ! x264enc tune=zerolatency ! video/x-h264, profile=high ! mpegtsmux ! srtserversink uri=srt://:12345/
(エラーは出ていないが表示もされない)
Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Setting pipeline to PLAYING ...
New clock: GstSystemClock
Redistribute latency...
^Chandling interrupt.
Interrupt: Stopping pipeline ...
Execution ended after 0:01:50.658920768
Setting pipeline to NULL ...
Freeing pipeline ...

gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw, height=480, width=640 ! videoconvert ! x264enc tune=zerolatency key-int-max=30 ! mpegtsmux ! srtserversink uri="srt://:12345" latency=500
(失敗)

gst-launch-1.0 -v filesrc location=start_up.mp4 ! qtdemux ! queue ! h264parse ! avdec_h264 ! video/x-raw, height=1080, width=1920 ! videoconvert ! x264enc tune=zerolatency ! video/x-h264, profile=high ! mpegtsmux ! srtsink uri=srt://:12345/
(失敗)

gst-launch-1.0 filesrc location=start_up.mp4 ! qtdemux ! h264parse ! rtph264pay ! udpsink host=127.0.0.1 port=5000
(失敗)

gst-launch-1.0 filesrc location=30ftp.mp4 ! qtdemux ! h264parse ! rtph264pay ! srtsink uri=srt://:12345
(失敗)

gst-launch-1.0 filesrc location=30ftp.mp4 ! qtdemux ! h264parse ! identity drop-probability=1 ! rtph264pay ! srtsink uri=srt://:12345

gst-launch-1.0 v4l2src ! video/x-raw,width=640,height=480 ! autovideosink

gst-launch-1.0 v4l2src device="/dev/video0" ! 'image/jpeg, width=1280, height=720, framerate=30/1' ! jpegdec ! nv3dsink

gst-launch-1.0 v4l2src device=/dev/video0 ! 'video/x-raw,format=(string)YUYV,width=640,height=480,framerate=30/1' ! autovideosink

gst-launch-1.0 v4l2src device=/dev/video0 ! 'video/x-raw,width=640,height=480,framerate=30/1' ! videoconvert ! autovideosink

ChatGPTが示してきた答え
gst-launch-1.0 v4l2src device=/dev/video0 ! 'video/x-raw,format=(string)YUY2,width=640,height=480,framerate=30/1' ! autovideosink

でも、これでもエラーはでてこないが、動かない。

C270nのWebカメラ映像をGstreamerで録画したい
(ChatGPTが示してきた答え)
gst-launch-1.0 v4l2src device=/dev/video0 ! 'video/x-raw,format=(string)YUY2,width=640,height=480,framerate=30/1' ! videoconvert ! x264enc ! mp4mux ! filesink location=output.mp4

で、ようやく動いたのが、これ

gst-launch-1.0 v4l2src device="/dev/video0" ! 'image/jpeg, width=1280, height=720, framerate=30/1' ! jpegdec ! autovideosink

ちょっと画面が大きいので、今、表示しているのは、以下のコマンドで少し小さくして表示

ebata@DESKTOP-P6KREM0:/mnt/c/Users/ebata/Gstreamer$ gst-launch-1.0 v4l2src device="/dev/video0" ! 'image/jpeg, width=640, height=480, framerate=30/1' ! jpegdec ! autovideosink
Setting pipeline to PAUSED ...
Pipeline is live and does not need PREROLL ...
Got context from element 'autovideosink0': gst.gl.GLDisplay=context, gst.gl.GLDisplay=(GstGLDisplay)"\(GstGLDisplayX11\)\ gldisplayx11-0";
Setting pipeline to PLAYING ...
New clock: GstSystemClock
WARNING: from element /GstPipeline:pipeline0/GstAutoVideoSink:autovideosink0/GstGLImageSinkBin:autovideosink0-actual-sink-glimage/GstGLImageSink:sink: A lot of buffers are being dropped.
Additional debug info:
gstbasesink.c(3003): gst_base_sink_is_too_late (): /GstPipeline:pipeline0/GstAutoVideoSink:autovideosink0/GstGLImageSinkBin:autovideosink0-actual-sink-glimage/GstGLImageSink:sink:
There may be a timestamping problem, or this computer is too slow.
WARNING: from element /GstPipeline:pipeline0/GstAutoVideoSink:autovideosink0/GstGLImageSinkBin:autovideosink0-actual-sink-glimage/GstGLImageSink:sink: A lot of buffers are being dropped.
Additional debug info:
gstbasesink.c(3003): gst_base_sink_is_too_late (): /GstPipeline:pipeline0/GstAutoVideoSink:autovideosink0/GstGLImageSinkBin:autovideosink0-actual-sink-glimage/GstGLImageSink:sink:
There may be a timestamping problem, or this computer is too slow

表示されたのはいいけど、警告が凄い

ちなみに、SRTの通信にも成功してVLCで表示できました(遅延が凄いけど(2~3秒))。

gst-launch-1.0 v4l2src device="/dev/video0" ! 'image/jpeg, width=640, height=480, framerate=30/1' ! jpegdec ! videoconvert ! x264enc tune=zerolatency key-int-max=30 ! mpegtsmux ! srtserversink uri="srt://:12345" latency=500

コマンドをかたっぱしからくっつけたでけです。

2023,江端さんの技術メモ

WSLのバージョンが"1"だったので"2"に変えようとしたら、ちょっと酷い目にあった件

を経て、再度、wsl で USBのWebカメラを使うに、挑戦中。

ちなみにターゲットのカメラはこちら(ロジクール Webカメラ C270n HD 720P)です。

ちなみに前提として、https://github.com/dorssel/usbipd-win/releases から、usbipd-win_3.0.0.msiをダウンードしてWIndows10に入れています。

とりあえずWindows10(×11)の、powershell(管理者モード)で、以下を確認

PS C:\WINDOWS\system32> wsl --list --all --verbose
NAME STATE VERSION
* docker-desktop-data Stopped 2
Ubuntu-20.04 Running 2
docker-desktop Stopped 2

という、いわゆる「オール2」をなんとか実現。

PS C:\WINDOWS\system32> usbipd wsl list
BUSID VID:PID DEVICE STATE
4-1 1058:25a2 USB 大容量記憶装置 Not attached
4-2 04bb:011c USB 大容量記憶装置 Not attached
5-3 04d9:1400 USB 入力デバイス Not attached
6-1 0d8a:0103 USB 印刷サポート Not attached
6-3 093a:2510 USB 入力デバイス Not attached
7-2 04f9:02c0 USB 印刷サポート, Brother DCP-J940N, USB 大容量記憶装置 Not attached
8-1 0a12:0001 Generic Bluetooth Radio Not attached
8-2 0d8c:0139 USB PnP Sound Device, USB 入力デバイス Not attached
8-3 046d:0825 Logi C270 HD WebCam Not attached
8-4 04e6:511a SCR3310-NTTCom USB SmartCard Reader Not attached

までは、なんとか出てくるのだけど、

PS C:\WINDOWS\system32> usbipd wsl attach --busid 8-3
usbipd: info: Using default WSL distribution 'docker-desktop-data'; specify the '--distribution' option to select a different one.
usbipd: error: The selected WSL distribution is not running; keep a command prompt to the distribution open to leave it running.

このエラーが取れない(いまいましい)。

https://github.com/dorssel/usbipd-win/issues/136 のページを読んでいたら、ちょっと気になった一節があったので、これを試してみました。

PS C:\WINDOWS\system32> usbipd wsl attach --distribution Ubuntu-20.04 --busid 8-3

としたら、何も言わずに、「通し」ました。

通らない場合もありました。

usbipd: error: The service is currently not running; a reboot should fix that.

というエラーがでてきて困りました。

この場合、管理者モードで立ち上げたpowershellから、

usbipd server

を投入しつつ、別の管理者モードでpowershellから、"usbipd wsl attach --distribution Ubuntu-20.04 --busid 8-3" を実施すると上手くみたいです(powershellが2つも上がっている状態はうっとうしですが)

BUSID VID:PID DEVICE STATE
4-1 1058:25a2 USB 大容量記憶装置 Not attached
4-2 04bb:011c USB 大容量記憶装置 Not attached
5-3 04d9:1400 USB 入力デバイス Not attached
6-1 0d8a:0103 USB 印刷サポート Not attached
6-3 093a:2510 USB 入力デバイス Not attached
7-2 04f9:02c0 USB 印刷サポート, Brother DCP-J940N, USB 大容量記憶装置 Not attached
8-1 0a12:0001 Generic Bluetooth Radio Not attached
8-2 0d8c:0139 USB PnP Sound Device, USB 入力デバイス Not attached
8-3 046d:0825 Logi C270 HD WebCam Attached - Ubuntu-20.04
8-4 04e6:511a SCR3310-NTTCom USB SmartCard Reader Not attached

おお、通ったようだ ―― では、ここからどうすればいいだっけ?

WSLからlsusbを実行し、接続されているUSBデバイスをリストアップすると、ッデバイスが見えるようになっていました。

ebata@DESKTOP-P6KREM0:/dev$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 002: ID 046d:0825 Logitech, Inc. Webcam C270
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

ここから先は、

WSL2 USBカメラ+他のUSB機器 2022年09月06日版

を参照。

私の環境でも、

ebata@DESKTOP-P6KREM0:/dev$ ls -l /dev/video
ls: cannot access '/dev/video': No such file or directory

となったので、Linuxカーネルをカスタムビルド に入る準備が整ったのだろう。憂鬱だ。カーネルのビルドと聞くだけで、おぞましい記憶が蘇えってくるから

と、泣き言をいってもしかたがないので、

https://github.com/PINTO0309/wsl2_linux_kernel_usbcam_enable_conf

に突っ込むこととする。

On WSL2.

ebata@DESKTOP-P6KREM0:~$ uname -r -v
5.15.90.1-microsoft-standard-WSL2 #1 SMP Fri Jan 27 02:56:13 UTC 2023

幸い、ページの内容と同じのようだ。

On Windows Terminal.

PS C:\WINDOWS\system32> wsl --update
更新プログラムを確認しています。
Linux 用 Windows サブシステムの最新バージョンは既にインストールされています。
PS C:\WINDOWS\system32> wsl --shutdown

で、

PS C:\WINDOWS\system32> wsl --install -d Ubuntu-20.04
Ubuntu 20.04 LTS は既にインストールされています。
Ubuntu 20.04 LTS を起動しています...

で、
On WSL2

ebata@DESKTOP-P6KREM0:/mnt/c/Users/ebata$ uname -r -v
5.15.90.1-microsoft-standard-WSL2 #1 SMP Fri Jan 27 02:56:13 UTC 2023

で、

ebata@DESKTOP-P6KREM0:/mnt/c/Users/ebata$ sudo apt update && sudo apt upgrade -y
[sudo] password for ebata:
Hit:1 http://ppa.launchpad.net/longsleep/golang-backports/ubuntu focal InRelease
(中略)
Calculating upgrade... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

で、

ebata@DESKTOP-P6KREM0:/mnt/c/Users/ebata$ sudo apt install -y build-essential flex bison libgtk-3-dev libelf-dev libncurses-dev autoconf libudev-dev libtool zip unzip v4l-utils libssl-dev python3-pip cmake git iputils-ping net-tools dwarves guvcview python-is-python3 bc
Reading package lists... Done

(中略)

Processing triggers for install-info (6.7.0.dfsg.2-5) ...
Processing triggers for desktop-file-utils (0.24-1ubuntu3) ...

で、

ebata@DESKTOP-P6KREM0:/mnt/c/Users/ebata$ cd /usr/src
ebata@DESKTOP-P6KREM0:/usr/src$ TAGVERNUM=5.15.90.1 && TAGVER=linux-msft-wsl-${TAGVERNUM} && WINUSERNAME=ebata
ebata@DESKTOP-P6KREM0:/usr/src$ sudo git clone --depth 1 -b ${TAGVER} https://github.com/microsoft/WSL2-Linux-Kernel.git ${TAGVERNUM}-microsoft-standard && cd ${TAGVERNUM}-microsoft-standard
Cloning into '5.15.90.1-microsoft-standard'...

(中略)

Updating files: 100% (73704/73704), done.

で、

ebata@DESKTOP-P6KREM0:/usr/src/5.15.90.1-microsoft-standard$ sudo wget -O .config https://github.com/PINTO0309/wsl2_linux_kernel_usbcam_enable_conf/raw/main/${TAGVER}/config-${WSL_DISTRO_NAME} && sudo chmod 777 .config && sudo make clean
--2023-06-08 23:52:43-- https://github.com/PINTO0309/wsl2_linux_kernel_usbcam_enable_conf/raw/main/linux-msft-wsl-5.15.90.1/config-Ubuntu-20.04
(中略)

2023-06-08 23:52:44 (11.3 MB/s) - ‘.config’ saved [123800/123800]

で、ここからが、本格的なカーネルコンパイルのようで、相当時間がかかった。パスワードを1回聞かれました

ebata@DESKTOP-P6KREM0:/usr/src/5.15.90.1-microsoft-standard$ sudo make -j$(nproc) KCONFIG_CONFIG=.config && sudo make modules_install -j$(nproc) && sudo make install -j$(nproc)
SYNC include/config/auto.conf.cmd

(中略)

BUILD arch/x86/boot/bzImage
Kernel: arch/x86/boot/bzImage is ready (#1)
[sudo] password for ebata:
arch/x86/Makefile:142: CONFIG_X86_X32 enabled but no binutils support

(中略)

I: /boot/initrd.img is now a symlink to initrd.img-5.15.90.1-microsoft-standard-WSL2+

で、

ebata@DESKTOP-P6KREM0:/usr/src/5.15.90.1-microsoft-standard$ sudo rm /mnt/c/Users/${WINUSERNAME}/vmlinux
rm: cannot remove '/mnt/c/Users/ebata/vmlinux': No such file or directory

(ここで初めてエラーになった。で、実際に、vmlinuxがなかったので、このままにして次に進んだ)

ebata@DESKTOP-P6KREM0:/usr/src/5.15.90.1-microsoft-standard$ sudo cp /usr/src/${TAGVERNUM}-microsoft-standard/vmlinux /mnt/c/Users/${WINUSERNAME}/

で、

ebata@DESKTOP-P6KREM0:/usr/src/5.15.90.1-microsoft-standard$ cat << 'EOT' > /mnt/c/Users/${WINUSERNAME}/.wslconfig
> [wsl2]
> kernel=C:\\Users\\ebata\\vmlinux
> EOT

で、

On Windows Terminal. (新しいターミナルから)

PS C:\WINDOWS\system32> wsl --shutdown

On WSL2。ビルドされたカーネルが正常にロードされた場合、カーネル名の末尾に+が表示されます。#nはカーネルがビルドされた回数です。

ebata@DESKTOP-P6KREM0:/mnt/c/Users/ebata$ uname -r -v
5.15.90.1-microsoft-standard-WSL2+ #1 SMP Thu Jun 8 23:54:50 JST 2023

で、 On WSL2.で

ebata@DESKTOP-P6KREM0:/mnt/c/Users/ebata$ cd /usr/src

ebata@DESKTOP-P6KREM0:/usr/src$ TAGVERNUM=6.1.21.2

ここの6.1.21.2は、

https://github.com/microsoft/WSL2-Linux-Kernel/tags

にあった最新のものを適当に入れた(知らん)。

On WSL2.

ebata@DESKTOP-P6KREM0:/usr/src$ sudo git clone -b ${TAGVER} https://github.com/microsoft/WSL2-Linux-Kernel.git ${TAGVERNUM}-microsoft-standard && cd ${TAGVERNUM}-microsoft-standard

で、これが結構長かった。

で、

ebata@DESKTOP-P6KREM0:/usr/src/6.1.21.2-microsoft-standard$ sudo cp /proc/config.gz config.gz && sudo gunzip config.gz && sudo mv config .config
ebata@DESKTOP-P6KREM0:/usr/src/6.1.21.2-microsoft-standard$ sudo make menuconfig
HOSTCC scripts/basic/fixdep

(中略)

HOSTLD scripts/kconfig/mconf

(ここで、GUIが突然登場してビビったが、"save"を選んで、".config"を選んで終了させる)
*** End of the configuration.
*** Execute 'make' to start the build or try 'make help'.

で、On Windows Terminal.で

$ wsl --shutdown
$wsl -d Ubuntu-20.04

で、

PS C:\WINDOWS\system32> usbipd wsl attach --busid 8-3
usbipd: info: Using default WSL distribution 'docker-desktop-data'; specify the '--distribution' option to select a different one.
usbipd: error: The selected WSL distribution is not running; keep a command prompt to the distribution open to leave it running.

とあいもかわらず、このエラーがでるので、

PS C:\WINDOWS\system32> usbipd wsl attach --distribution Ubuntu-20.04 --busid 8-3

で、対処。

で、WSLからどーなったか見てみる。

ebata@DESKTOP-P6KREM0:/mnt/c/Users/ebata$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 002: ID 046d:0825 Logitech, Inc. Webcam C270
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
ebata@DESKTOP-P6KREM0:/mnt/c/Users/ebata$ ls -l /dev/video*
crw------- 1 root root 81, 0 Jun 9 00:57 /dev/video0
crw------- 1 root root 81, 1 Jun 9 00:57 /dev/video1

あ、ようやくデバイスがきた。この2行の為に、これまでの苦労があった。

で、後は、https://zenn.dev/pinto0309/articles/e1432253d29e30に記載されているpythonのプログラムをそのまま使わせて頂き、カメラから映像がでることを確認しました。

Corrupt JPEG data: 2 extraneous bytes before marker 0xd6
Corrupt JPEG data: 6 extraneous bytes before marker 0xd2
Corrupt JPEG data: 1 extraneous bytes before marker 0xd0
Corrupt JPEG data: 2 extraneous bytes before marker 0xd0
Corrupt JPEG data: 1 extraneous bytes before marker 0xd4
Corrupt JPEG data: 2 extraneous bytes before marker 0xd3
Corrupt JPEG data: 1 extraneous bytes before marker 0xd0
Corrupt JPEG data: 11 extraneous bytes before marker 0xd3

が出てきていますが、気にしません。

ちなみに、画像が出てこなかったので、XWinrcを起動したところ、表示ができたようです。https://dev.classmethod.jp/articles/wsl-x-window/

と、/dev/videoを作るためだけに、何時間かが溶けました。


ところが、

ebata@DESKTOP-P6KREM0:/dev$ gst-launch-1.0 videotestsrc ! v4l2sink device=/dev/video0
Setting pipeline to PAUSED ...
ERROR: Pipeline doesn't want to pause.
ERROR: from element /GstPipeline:pipeline0/GstV4l2Sink:v4l2sink0: Could not open device '/dev/video0' for reading and writing.
Additional debug info:
v4l2_calls.c(621): gst_v4l2_open (): /GstPipeline:pipeline0/GstV4l2Sink:v4l2sink0:
system error: Permission denied
Setting pipeline to NULL ...
Freeing pipeline ...

って、何だ、これ?

で、やっと分かったんですが。

ebata@DESKTOP-P6KREM0:/dev$ ls -la video*
crw------- 1 root root 81, 0 Jun 9 23:35 video0
crw------- 1 root root 81, 1 Jun 9 23:35 video1

となっていて、

オープンするには

  • root ユーザ
  • video グループに所属

である必要があるらしいのです。

だた、どーしてもGstreamerでは表示できないのですよ
(以下に続く)

WIndows10のWSL Ubuntu-20.04に仮想の/dev/video*を作って、Webカメラ C270n をGstreamer で表示できるようにするまでの軌跡

 

2023,江端さんの技術メモ

WSLでUSBカメラをどうにかしたくて、すったもんだしていました。

で、管理者モードでPowershellを立ち上げて

PS C:\WINDOWS\system32> wsl -l -v
NAME STATE VERSION
* docker-desktop-data Stopped 2
Ubuntu-20.04 Running 1
docker-desktop Stopped 2

の部分の1を2にしなければならないことが分かったので、

Windows10のWSLをWSL2に変換する手順

を参考にさせて貰って、

PS C:\WINDOWS\system32> wsl --set-version Ubuntu-20.04 2

をやりました、

ところが、数分どころか、いつまで経っても終わらないのでCrtl-Cで強制打ち切りをしたら、wslが全く動かなくなってしまいました。

いろいろやったのですが、最終的には、

起動しなくなったWSL2を復活させるまでにしたあれこれ

を参考にして、元に戻すことができました。

(大変失礼ながら、以下コピペをさせて頂いております。上記のページのリンクが切れると、私がパニックになりますので)

WSL2無効化→有効化

Ubuntuアンインストールでダメな場合(ダメでした)、WSL2を一回機能をオフにして再起動します。

「コントロールパネル -> プログラム -> Windowsの機能の有効化または無効化」を選択します。

「Linux用Windowsサブシステム」のチェックを外して再起動します。

で、チェックを外してから、なかなかシステムが終了を出してこないのですが、ここばガマンです。それでも10分はかからないと思います。

でもって次は、「Linux用Windowsサブシステム」のチェックを付けて再起動します。これも、いい感じでまたされますが、我慢します。

で、これらを終えて、やっと、コマンドプロンプトから、

$ wsl -d Ubuntu-20.04

と入力したのですが、それでも動きません。

管理者モードでPowershellを立ち上げて、

$ wsl --update

をして、別画面を経ち上げなおして、再度、

$ wsl -d Ubuntu-20.04

をしたところ、やっと、元の環境に戻りました(多分)。

「WSLでUSBカメラをどうにかする」をとっとと諦めていれば、こういう目に合わないのですが ―― エンジニアの性(さが)ですかねえ。

まあ、「別のマシンで同じ環境のシミュレータが動いている」という安心感があってのことでしたが。

で、まあ、ここからまた挑戦するんですよ。性懲りもなく。

 

2023,江端さんの技術メモ

この週末2日間かけるつもりだった「カメラレディ」を、"grammarly"のおかげもありまして、1日で投稿し、学会へのレジストレーションを終えました。

―― どの評価を信じればいい?

週末エンジニアの、この貴重な一日を何に使うか ――

うん、これに使わせて頂こう、と決めました。

今回、以下のコラムを寄稿致しました。

で、読者の方(Sさん)から、以下のメールを頂きました。

江端智一 様

初めてメールさせていただきます。"S"と申します。
いつも記事・日記ともに楽しく拝見させていただいております。
今回:ChatGPTの記事で一点気になるところがあり、ご連絡させていただきました。

6ページ目以降、「ChatGPTの本体は、ニューラルネットワークです。」とまとめている点は少し実体と異なっている気がいたします。
GPT-3の主要な要素Transformerにおいては、ニューラルネットではなく、Attention機構がその主役です。
(2層のフィードフォワードのニューラルネットは使われていますが、CNNやRNNは使われていないのが特長とのことです。)

・参考① オミータ氏の記事
https://qiita.com/omiita/items/07e69aef6c156d23c538

・参考② 杉山聡氏 「分析モデル入門」
(執筆者の杉山聡氏がYoutubeでも解説しています
https://www.youtube.com/watch?v=50XvMaWhiTY&t=498s)

特に②の受け売りですと、Attention機構は内積を用いた類似度計算が肝とのことです。
ですので、「ChatGPTの本体は、内積を用いた類似度計算です。」という方がしっくりきます。

私自身ソフトウェア(組込)系ではありますがデータサイエンス・機械学習等に詳しいわけではないので、
参考情報として受け取っていただければと思います。

以上、ご確認いただけましたら幸いです。

いつもながら、大変ありがたいことです。私の記事は読者の皆様によって支えられております。引き続き、よろしくお願い致します。

で、改めて確認してみましたが、ご指摘は正しいと確認いたしました。

ニューラルネットワーク(フィードフォワード型と、SoftMax Function)も使っていますが、どちらかというと、「ニューラルネットワークの学習で汗をかく」というよりは、「(文章コーパスのデータを使った?)統計処理&類似度の確率計算をする」という処理が、全体のほぼ9割くらい、という感じでした。

上記のコラムのp.7に記載した「対訳コーパスとEBMT/SMTの関係」の図のイメージに近い感じ、と思っています。

わざわざニューラルネットワークで非線形関係を学ばせまでもなく「Attention機構の内積を用いた類似度計算」で、バッチリ行けるぜ ―― という風に、(私は)理解しました。

うん、ニューラルネットワークなんぞ、使わずにすめばそれに越したことはありません(私は、第2次AIブームで、ニューラルネットワークで痛い思いをしています)。

ちなみに、私、杉山聡氏のYoutubeには、たびたびお世話になっております。今回も、紹介して頂いた映像で勉強致しました。

今回私が驚いたのは、このビデオクリップの最後の方に出てくる、Multi-Head Attention の concatです。このビデオではよく分からなかったのですが、ベクトルXに対して、回転変換(でいいんのかな?)する行列の内積を取る、というのは、まさに類似度計算です。

ただ、今、私が分かっていないのは、行列の回転角をどうやって決めているのだろう、ということです。これってGivenで与えられる値なのか、あるいは、フレーズ(から求められたベクトル)毎に、何かのアルゴルズムを使って回転角θを求めているのか ―― あるいは、私が、全く的外れなことを言っているのか ―― が、まだ分かっていません。

ただ、この技術は、様々な分野(ゲームなど)にも使われているとの話を鑑みれば、「ニューラルネットワーク学習の悪夢」なしに、過去の膨大な情報と行列式だけで、非線形の関連の出力を得られるということになります。

これはAI技術にとって、大きな福音です。アホみたいに膨大な学習プロセスなしに、非線形関係が求められるのであれば ―― 少なくとも、学習計算にかかるコンピュータの電気料金の節約の効果は計り知れません


この度メールでご指摘を頂いた、"S"さんに、最大級の感謝を申し上げます。
また、素晴しい解説記事を書かれているオミータさん、論文調査で困った時にいつでもYouTubeで助けて頂いている杉山聡さんに、感謝申し上げます。

今後も助けて頂く予定としております。
引き続きよろしくお願い申し上げます。

江端智一

2023,江端さんの技術メモ

『コーディングが嫌になったのなら、ドキュメントを書けばいいのに』という、某国の最後の王妃となった、マリーなんとかさんの声が脳内から聞こえてくるようです。

提出するペーパーに数式を記載しなければならないのですが、

とまあ、コピペが美しくなくて、レビューアの心象悪くしそうです。

今さらLatexで数式を記載するのは、冗談ではありませんし、Wordの数式記載の手間は、1行記載するだけで1日の時間をもっていかれそうです。

私の汚ない数式を整形してくれるツールはないかな、と、10秒くらい探したら、見つかりました。

iPadに、neboといアプリをインストールして対応しました。

(Step 1)新規をApple Penでクリック

(Step 2)新規"文章"をクリック

(Step 3) "+" → "数式"をクリック

(Step 4) Apple Penを使って、数式を手書きする

で、数式を記載した領域をタップすると、

となる(魔法のようだ)。

(Step 5) エクスポートでword形式にして、好きなところに飛ばす(私の場合LINEの"自分メモ"に飛ばしました)

転送されたwordファイルを開いたら、こんな感じになっていました。

必要な数式をコピペして完了 (青色の数式を、黒に変える)


感想:中古で購入したApple Penが、ようやく役に立った。

2023,江端さんの技術メモ

最近、映像制御の仕事をすることになりました。

WSLを使って、作業効率をはかりたいと考えていますが、WSLは基本的にコマンドインターフェースなので、表示システムを作らなければなりません。

「Windows11にWSL2+Ubuntu20.04をインストールする」を試してみて、Golangをインストールしてみた件

すったもんだしているのですが、とりあえず、Windows10の方にX-Windowの方に、X serverを立てて表示ができたので、メモを残しておきます。

(というか、『Windows10上で、X-Windowsのサーバ動かす』という発想ができなかったので、

(gedit:5386): Gtk-WARNING **: cannot open display やらで、悩んでいました。

基本は、

Windows10のWSLでX11アプリケーションを実行してみた

の通りに実施したら動きました(実は、ここまで、手当たりしだい "sudo apt-get install" を乱発して

WSLの方から、

>export DISPLAY=:0

>gedit dummy.txt

 

と投入したら、X-windowsのエディタが立ち上がってきましたが、

など、たくさん問題が出ているようなので、対応を続けます(続く)

ところで、

WSLでGUIアプリを実行する

などで、自分の「上手くできなかったことを、きちんと書き残している方」のメモは本当に素晴しい。こういうメモは、普通の成功パターンしか記載していないメモの何十倍も役に立つのです。

で、まあ、それはさておき。


本命はこちら ――

GStreamer

です。

私、映像の伝送の研究は色々やってきたのですが(10~15年前)、映像そのものの研究は初めてなので、まずは、ローカルのパソコンで色々遊ぶ・・・もとい、調査することにしました。

で、今の私、GStreamerが何なのかも分かっていないのですが、「これを使え」と指示されているので、「これに突っ込んでいく」だけです。

『ほとんどの入門書は、入門者にとっては、ただの"ゴミ"』

マルチメディアフレームワークGStreamer ~ 入門編

を参考にさせて頂き、

$ export DISPLAY=:0

$ gst-launch-1.0 videotestsrc ! autovideosink

で、これが出てきました。

おお! やった!

WSLの方はこんな感じです。

$ gst-launch-1.0 filesrc location=./out.h264 ! avdev_h264 ! autovideosink

も、ちゃんと表示されるようです。映像の違いは分かりませんが。

カーネルコンパイルしたら表示されなくなりました(それが理由かは分かりません)。

$ gst-launch-1.0 -v videotestsrc ! x264enc ! avdec_h264 ! videoconvert ! autovideosink

で、表示できました。

(とりあえず、error: XDG_RUNTIME_DIR not set in the environment. だけでも潰しておこう)

ともあれ、最初の一歩は確保しました。

エラーコメントの表示対応のため、以下の設定をしておきました。

$ cd ~
$ vi .bash_profile

以下の2行を追加(正直、上の設定の意味は分からんが、とりあえずエラーは消える)。

export XDG_RUNTIME_DIR=/tmp/runtime-futa
export DISPLAY=:0


GStreamerによるレートコントロールについて調べています。

ラズパイにWEBカメラを接続してGStreamerを使った際に小一時間ハマった話

こちらに、

そして、例えば、任意のサイズやフレームレートでキャプチャを行いたい場合は、video/x-raw,width=1280,height=720,framerate=30/1 のような指定を行います。

というような記載がありました。

$ gst-launch-1.0 videotestsrc ! autovideosink

をちょっと変更して試してみました。

$ gst-launch-1.0 videotestsrc ! videoconvert ! video/x-raw,width=1280,height=720,framerate=30/1 ! autovideosink

画面がでっかくなって表示されました。

$ gst-launch-1.0 videotestsrc ! videoconvert ! video/x-raw,width=1280,height=720,framerate=1/1 ! autovideosink

これで、1fpsの表示になりました。

で、実際に映像ファイル(start_up.mp4)を持ち込んで表示してみました。

$gst-launch-1.0 filesrc location=start_up.mp4 ! decodebin ! videorate ! video/x-raw,framerate=30/1 ! autovideosink

これを、1fpsの表示に変えてみます。

$gst-launch-1.0 filesrc location=start_up.mp4 ! decodebin ! videorate ! video/x-raw,framerate=1/1 ! autovideosink

これを、1fpsのmp4ファイルとして保存してみます。

■1ftp映像に変換したもの "1ftp.mp4"$ gst-launch-1.0 -e filesrc location=start_up.mp4 ! decodebin ! videoconvert ! videoscale ! videorate ! "video/x-raw,framerate=1/1" ! videoconvert ! x264enc bitrate=2000 ! mp4mux ! filesink location=1ftp.mp4

上記のコマンドでは、GStreamerのgst-launch-1.0ユーティリティを使用しています。filesrcエレメントを使用して入力ファイルを読み込み、decodebinエレメントを使用してデコードします。その後、videoconvertvideoscaleエレメントを使用して動画の形式を変換し、videorateエレメントを使用してフレームレートを変更します。最後に、x264encエレメントを使用してビットレートを設定し、mp4muxエレメントを使用して新しいmp4ファイルに変換します。


ひき続き、SRTの通信実験を行ってみます。

(2)映像転送プロトコルは、現在、SRTが有力候補

     (a)タイムスタンプが付与した再送機能付きUDP(と理解)

     (b)Gstreamerに標準装備されている(らしい)

で、高信頼の映像通信を実現するプロトコルのようです。

GStreamer で SRT を使用する その1

の内容をマネします。

私の場合、新規の設定をしないでも以下のコマンドが動きましたので、どっかで設定を終えてしまったのだと思います。

$ gst-launch-1.0 videotestsrc ! videoconvert ! x264enc tune=zerolatency key-int-max=30 ! mpegtsmux ! srtserversink uri="srt://:12345" latency=500

で、SRT の配信には、srtserversink を使用しているようです。

で、受信側は、VLCメディアプレーヤを用います。

※WSL2にしてカーネルコンパイルした後、

C:\Users\ebata>ipconfig

(中略)

Windows IP 構成

イーサネット アダプター vEthernet (WSL):

接続固有の DNS サフィックス . . . . .:
リンクローカル IPv6 アドレス. . . . .: fe80::c317:ce40:f52f:1a41%40
IPv4 アドレス . . . . . . . . . . . .: 172.22.144.1
サブネット マスク . . . . . . . . . .: 255.255.240.0
デフォルト ゲートウェイ . . . . . . .:

しか使えなくなってしまったので、上記のVLCのアドレスは、

とする必要が生じました。

これで、「再生(P)ボタン」を押すと、テスト映像が表示されます。


次にWebRTCの実験を行います。

ここでは、

Go + GStreamer でお手軽 WebRTC 体験

を試させて頂きました。

GOのソースは一つだけだったので、WSL環境から行ってみました(最初、エラーの嵐だったのですが、よく考えれば、私はWSLの方にGStremaerの環境を立てていたので当然でした。

結構エラーが出てきましたので、色々対応をしていました。

sudo apt-get install libgstreamer-plugins-base1.0-dev

で、一部解決したのですが、以下のエラーが取れません。
# pkg-config --cflags -- gstreamer-1.0 gstreamer-base-1.0 gstreamer-app-1.0 gstreamer-plugins-base-1.0 gstreamer-video-1.0 gstreamer-audio-1.0 gstreamer-plugins-bad-1.0 Package gstreamer-plugins-bad-1.0 was not found in the pkg-config search path.
Perhaps you should add the directory containing `gstreamer-plugins-bad-1.0.pc' to the PKG_CONFIG_PATH environment variable
No package 'gstreamer-plugins-bad-1.0' found pkg-config: exit status 1

で、

https://github.com/notedit/gstreamer-go

に訪問してみたところ、

$ sudo apt-get install libgstreamer-plugins-bad1.0-dev

が、当たりだったようです。

で、後は上記のページの記載通りにGOプログラムを動かしたのですが、

2023/05/25 17:57:31 peer state change: failed

が登場してきて、変だなーと思ていたのですが、実はこれ成功しています。

このメッセージの上に、Goの出力の「長い文字列」が主力されていました。

これを入力して、「start session」ボタンを押下したら、以下の画面がブラウザに表示されました。

では、動作も確認できたので、ここからコードの勉強に入りましょう。


WebRTC を今から学ぶ人に向けて

の中にある、

WebRTC コトハジメ

が分かりやすい。

好奇心旺盛な人のためのWebRTC

も良い。

私はGolang使いなので、https://github.com/pion/webrtcを使いこなしたいが、膨大で手が出ない状況。今、とっかかりを探している。

とりあえず、wsl -d Ubuntu-20.04で、
ebata@DESKTOP-P6KREM0:/mnt/c/users/ebata/から、
get clone https://github.com/pion/webrtc で、インストール。

https://github.com/pion/webrtc/blob/master/examples/README.md

から、

$ cd webrtc
$ cd examples
$ go run examples.go --address :8080

で、ブラウザ http://localhost:8080で以下の画面が出てくる。

で、

のところで、"Run JavaScript"を押して、暫く(2~3分)待っていると、

という漢字で文字列が出てくるので、これを、上記のGo + GStreamer でお手軽 WebRTC 体験 のプログラムに放り込んで、同じように得られた文字列を放り込むと、

てな感じで映像が表示される。


$git clone https://github.com/pion/rtwatch.git

に挑戦。

https://github.com/pion/rtwatch の内容通りに設定するが、実行のところだけ少し違った

ebata@DESKTOP-P6KREM0:/mnt/c/users/ebata/rtwatch$ go run main.go -container-path=start_up.mp4
Video file 'start_up.mp4' is now available on ':8080', have fun!

これで、複数の、http://localhost:8080/ から同期した映像が配信されるようすが分かる。