録画時間を指定したAVIファイル保存
概要
録画する長さを設定してAVI動画ファイルを保存する方法を示しています。
サンプルプログラム
Software | IC Imaging Control 3.5, Visual Studio™ 2019 |
---|---|
サンプル(C#) | save_avi_with_timed_stop_cs_3.5.zip |
サンプルツールの外観
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();
}
プログラムが開始されると.ShowDeviceSettingsDialogをコールしてデバイスの選択ダイアログを表示します。デバイスが選択されたら.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();
イベントハンドラー Timer1_Timer()は定期的にポーリングされるので、その中で以下の様に動作させます。
MediaStreamSinkにつなぎ録画するように準備します。
ユーザーがtxtStop.Textに録画したい時間を指定して読み込みます。
lblRecorded.Textに現在の経過時間を表示します。
経過時間が指定された時間に達したら、.AviStopCaptureにより動画保存を停止します。
もとのsinkにつなぎ直して.LiveStartにより、ライブ表示を再開します。
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;
}
}