録画時間を指定したAVIファイル保存
概要
録画する長さを設定してAVI動画ファイルを保存する方法を示しています。
サンプルプログラム
利用した開発環境 | Visual Studio™ 2019 |
---|---|
SDK | IC Imaging Control 3.5(Python, C#, VB.NET) |
デバイスドライバ | Cam33U_setup,gigecam_setup,usbcam,AFU420_setup,usb2pro_drv |
デバイス | TISカメラ全般(MIPI CSI-2&FPD-Link IIIカメラを除く) |
サンプル(C#) | save_avi_with_timed_stop_cs_3.5.zip |
サンプル(VB.NET) | ー |
exeファイル アプリケーション |
ー |
別途ファイル | ー |
関連参照URL | ー |
サンプルツールの外観
private TIS.Imaging.BaseSink _oldsink;
private void Form1_Load(object sender, System.EventArgs e)
{
icImagingControl1.ShowDeviceSettingsDialog();
if( !icImagingControl1.DeviceValid )
{
Close();
return;
}
_oldsink = icImagingControl1.Sink;
icImagingControl1.LiveStart();
}
フォーム起動時にIC Imaging Controlのデバイス設定ダイアログを表示し、カメラ選択とプロパティ設定を行ってデバイスを開きます。正常に選択できたら、現在のシンクを後で仕様できるように_oldsink に退避し、LiveStart()を呼んでライブ映像の取り込みを開始します。
private void btnStartCapture_Click(object sender, System.EventArgs e)
{
TIS.Imaging.MediaStreamSink aviSink = new TIS.Imaging.MediaStreamSink();
// ビデオフォーマットとしてAVIを選択
foreach (TIS.Imaging.MediaStreamContainer msc in TIS.Imaging.MediaStreamContainer.MediaStreamContainers)
{
if (msc.Name == "AVI")
{
aviSink.StreamContainer = msc;
break;
}
}
// コーデックとしてDV Videoエンコーダーを設定
foreach (TIS.Imaging.AviCompressor codec in TIS.Imaging.AviCompressor.AviCompressors)
{
if (codec.Name == "DV Video Encoder")
{
aviSink.Codec = codec;
break;
}
}
aviSink.Filename = "video.avi";
icImagingControl1.LiveStop();
// シンクの設定をする
icImagingControl1.Sink = aviSink;
btnStartCapture.Enabled = false;
recordedTime = 0;
icImagingControl1.LiveStart();
}
[StartCapture]ボタンを押下したときに実行されるプログラムです。まず録画用のMediaStreamSinkを作り、保存形式をAVIに、映像コーデックを「DV Video Encoder」に指定します。出力ファイル名をvideo.aviに設定した後、sinkをMediaStreamSinkに差し替えるために、いったんLiveStop()でライブを止めてから、icImagingControl1.Sink = aviSink;で録画用シンクに付け替えます。録画時間用のタイマーカウンターをrecordedTimeを「0」にリセットします。最後にMediaStreamSink の状態でLiveStart()を開始すると、DVコーデックでAVIファイルに録画が始まります。
private void recordTimer_Tick(object sender, System.EventArgs e)
{
recordedTime += 1;
lblRecordedTime.Text = recordedTime.ToString() + "s";
if( recordedTime >= int.Parse( txtStopTime.Text ) )
{
recordTimer.Stop();
icImagingControl1.LiveStop();
icImagingControl1.Sink = _oldsink;
icImagingControl1.LiveStart();
btnStartCapture.Enabled = true;
}
}
このタイマー関数は1秒ごとに動き、録画の経過時間をカウントして画面に「◯◯s」と表示します。経過時間がテキストボックス txtStopTime(初期値は10秒)の値以上になると、タイマーを止め、いったん LiveStop()で録画を終了してからシンクを元の _oldsink に戻し、LiveStart()で通常表示に切り替えます。