none
VC#: 内蔵カメラからの録画について(DirectShow.NETでビデオが伸びる) RRS feed

  • 質問

  • こんにちは,_egirlと申します.

    現在タブレットで内蔵カメラから取得した動画を表示・保存するWindowsフォームアプリケーションを作っております.

    その中で,動画保存について解決できない問題があり困っております.

    症状は,1時間ほどのビデオを録画すると,1時間20秒くらいのビデオファイルが出来上がり,

    ビデオが実際より伸びてしまいます.

    プログラムはC#でDirectShow.NETを使用し,内蔵カメラにキャプチャフィルタ→AVI Mux→sinkFilterとつないでローデータをAVIで保存するシンプルなものです.(あまりにもサイズが大きいのでゆくゆくは圧縮等したいです.)

    デフォルトの30fpsがダメなのかと

    http://social.msdn.microsoft.com/Forums/en-US/47638c90-5f03-4329-bae2-624672151808/is-it-possible-to-set-the-framerate-for-camera-devices?forum=windowsdirectshowdevelopment

    などを参考にIAMStreamConfigインターフェースを使用して手動でfps設定をしようとしましたが,fpsを変更することができませんでした.(ちなみにラップトップで同じプログラムを走らせるとfpsを変えられました.しかしビデオの長さは合っていませんでした.)

    まだあまり知識がないので,ここの部分のコードを載せるべき等ありましたらご指摘ください.

    実時間の動画が表示・保存できれば最悪DirectShowでなくとも構いません.

    (OpenCVを試しましたが無理でした.)

    何か実時間ビデオファイルを生成する手段やポイントはございませんでしょうか.

    アドバイスを頂けると嬉しいです.

    何卒よろしくお願い致します.

    タブレット
    VAIO Tap11  Windows 8.1 64bit
    内蔵カメラExmor R for PC(92万画素)

    2014年9月11日 6:08

回答

  • 多分累積遅延だと思いますが、DirectShowの代わりにWindows Media Foundation Capture APIを試してみてはいかがでしょうか。
    .NET向けのまともなラッパーがあるかどうかは知りませんが、なければC++/CLIでつなげば良いでしょう。

    MFCaptureToFile Sample (Windows)

    Media FoundationのC++向けサンプルは旧Windows SDK 7.xに付属しているはずです。

     

    あと質問するときは開発環境のバージョンと.NETのバージョンくらいはきちんと書きましょう。

    • 編集済み sygh 2014年9月11日 15:57
    • 回答としてマーク 星 睦美 2014年9月30日 7:52
    2014年9月11日 12:08

すべての返信

  • 多分累積遅延だと思いますが、DirectShowの代わりにWindows Media Foundation Capture APIを試してみてはいかがでしょうか。
    .NET向けのまともなラッパーがあるかどうかは知りませんが、なければC++/CLIでつなげば良いでしょう。

    MFCaptureToFile Sample (Windows)

    Media FoundationのC++向けサンプルは旧Windows SDK 7.xに付属しているはずです。

     

    あと質問するときは開発環境のバージョンと.NETのバージョンくらいはきちんと書きましょう。

    • 編集済み sygh 2014年9月11日 15:57
    • 回答としてマーク 星 睦美 2014年9月30日 7:52
    2014年9月11日 12:08
  • syghさん お返事ありがとうございます.

    _egirlです.知識不足で申し訳ございません.

    開発環境: Visual Studio 2012
    .NET Framework バーション: v4.0
    となります.

    以前一度,累積遅延について調べたのですが正確な定義が結局分からずじまいとなってしまっておりました...

    勝手に 遅延→キャプチャが遅れる→ビデオが短くなる というイメージだったのですが
    30fpsでキャプチャしてもビデオ生成時に遅延が生じて実際のビデオは30fpsではなくなってしまう
    (キャプチャ数が30fps以上になったわけではない)
    という認識で正しいでしょうか??

    Windows Media Foundation Capture APIですね.
    少し調べて挑戦してみます.
    アドバイスありがとうございました.

    2014年9月12日 6:01
  • フォーラム オペレーターの星 睦美です。
    _egirl さん、こんにちは。

    sygh さんからの返信が手がかりなったようですね。私のほうでスレッドに[回答としてマーク] させていただきました。
    今後ともMSDN フォーラムをよろしくお願いします。

    フォーラム オペレーター 星 睦美 - MSDN Community Support

    • 回答の候補に設定 521kei 2015年1月15日 7:46
    • 回答の候補の設定解除 521kei 2015年1月15日 7:46
    2014年9月30日 7:56