見出し画像

Processing4でVideoライブラリが再び不具合を起こすように

この記事は1年以上前のものです。
2023年の最新情報はこちら 
https://note.com/soohei/n/nb1a3e7445af0

春学期の授業ではうまく動作していたはずのProcessingとVideoライブラリが、現時点の最新バージョンの組み合わせで、再びうまくいかないケースが出てきています。年度末にかけて困る方が減るよう、最新情報をまとめておきます。

検証に使ったコードはこちらです。

// カメラの映像を扱うためのライブラリをインポート
import processing.video.*;

// カメラ
Capture cam;

void setup() {
  size(1280, 720);

  // カメラのリストを出力
  String[] cameras = Capture.list();
  for (int i=0; i < cameras.length; i++) {
    println("[" + i + "] " + cameras[i]);
  }

  // カメラを初期化
  cam = new Capture(this, 1280, 720, cameras[0]);
  cam.start();
}

void draw() {
  // カメラが有効なら、映像を取り込む
  if (cam.available()) {
    cam.read();
  }

  background(0);

  // 映像を描く(カメラの映像は画像 PImage と同じように扱える)
  image(cam, 0, 0, 1280, 720);
}

以下、手元のマシンで具体的なエラー例を並べています。それらから得られた傾向をまとめたチャートもつくりました。ご覧ください。


確認環境1 : iMac 27 (Intel 2017)

iMac 27 (Intel 2017)
Mac OS Monterey 12.6
Processing 4.0.1 (Intel 64-bit)
Video Library 2.2.1
結果: エラー

BaseSrc: [avfvideosrc0] : Internal data stream error.

解決方法:  Capture関数でフレームレートを数値指定してみる

こちらの記事では30にしていますが、25で動作しました。

cam = new Capture(this, 1280, 720, cameras[0], 25);

確認環境2 : MacBook Pro 16 (M1 2021)

確認環境その3
MacBook Pro 16 (M1 2021)
Mac OS Ventura 13.0.1
Processing 4.0.1 (Apple Silicon)
Video Library 2.2.1
結果: エラー

(Processing core video:48969): GStreamer-CRITICAL **: 21:01:55.819: gst_bin_add_many: assertion 'GST_IS_ELEMENT (element_1)' failed

(Processing core video:48969): GStreamer-CRITICAL **: 21:01:55.826: gst_element_link_pads_full: assertion 'GST_IS_ELEMENT (dest)' failed

解決方法:  Capture関数でデバイス指定時に pipeline:autovideosrc で指定してみる

デバイスの指定をする箇所に pipeline:autovideosrc を入れる。

  cam = new Capture(this, 1280, 720, "pipeline:autovideosrc");

または、

解決方法 (おすすめ):  Intel Mac用のProcessingをインストールして使う

確認環境その2'
MacBook Pro 16 (M1 2021)
Mac OS Ventura 13.0.1
Processing 4.0.1 (Intel 64-bit)
Video Library 2.2.1
結果: OK


確認環境3 : MacBook Air (M1 2020)

MacBook Air (M1 2020)
Mac OS Ventura 13.0.1
Processing 4.0.1 (Apple Silicon)
Video Library 2.2.1
結果: エラー

(Processing core video:44556): GStreamer-CRITICAL **: 17:42:01.397: gst_bin_add_many: assertion 'GST_IS_ELEMENT (element_1)' failed

(Processing core video:44556): GStreamer-CRITICAL **: 17:42:01.404: gst_element_link_pads_full: assertion 'GST_IS_ELEMENT (dest)' failed

解決方法: Capture関数でデバイス指定時に pipeline:autovideosrc で指定してみる (MBP 2021と同じ) + 描画時に工夫

解決方法は同じなのですが、なぜか動画が横に伸びてしまいます。現状こちらを解決する手段が見つからず、imageで描画時に正方形の縦横比で描画すると、正しい比率になりました。

cam = new Capture(this, 1280, 720, "pipeline:autovideosrc");

または、

解決方法 (おすすめ):  Intel Mac用のProcessingをインストールして使う

確認環境その3'
MacBook Air (M1 2020)
Mac OS Ventura 13.0.1
Processing 4.0.1 (Intel 64-bit)
Video Library 2.2.1
結果: OK


もしこれらでも解決できないことがあれば、お気軽にご相談ください。

この記事が気に入ったらサポートをしてみませんか?