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
もしこれらでも解決できないことがあれば、お気軽にご相談ください。
この記事が気に入ったらサポートをしてみませんか?