kazumori
@kazumori

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

長時間録画及び画像の表示を同時に行えるシステムを教えてほしい。

Q&A

Closed

解決したいこと

長時間録画及び画像の表示を同時に行えるシステムを教えてほしいです。
あるプログラムを開発中につき、そのようなシステムを組み込む必要があるのです。
API,ライブラリなどをコードに内蔵するでも、外部プロセスによって実行でも構いませんがそれぞれ条件がございます。
ご教授お願い致します。

環境

  • Win10 x64 22h2

  • VC++ MFC VS2015

  • UVC規格準拠の高画質カメラ:たしかフルHD以上はあったはず
    接続しているUSBの規格は3.0なので十二分に高速?

  • カメラ : 23/09/23追記
    2592x1944 12fps
    500万画素 スクエア

共通条件

  • UVC規格に準ずる任意のカメラにおいてそのカメラが対応する最大の画素数、FPSで録画と表示を同時にする。
  • 長期間の録画が可能なこと
    • 録画時に逐次or即時のエンコード
      つまり終了してからのエンコードは許容されない。
      ただしある程度生データ等を貯めて逐次エンコード等も可とする。
  • 画像の表示のほうの即時性はそこまで厳密には求めない。
    緩くてよい。

内蔵するコードの場合

  • GUIの動作に支障がないこと
    (=別プロセス実行や非同期実行であること)

  • (GUI要素へ画像の反映の部分もできれば書いていただけると助かる。)

外部プロセスによって実行の場合

  • プロセス起動とともに処理実行されること。
    つまり別途開始ボタン押下等が要らないこと。

  • プロセス起動とともに終了されること。
    つまり別途停止ボタン押下等が要らないこと。

  • エンコード形式は近年において一般的であり、圧縮率の高いものであること。

自分で試したこと

ffmpegのAPIを試してみましたが、情報が少なく実装しきれなかったです。

静画ならともかく、エンコードを含める動画のやり取りとなるとその方面は明るくないのであまりちゃんとした自己解決を図れなかったです。

23/09/23追記
現状OpenCVで試行中です。

23/09/25追記
OpenCVで試したところ、問題に突き当たりました。

0

5Answer

外部プロセスとしてOBS Studioにhttps://github.com/obsproject/obs-websocket
のプラグインを入れて呼び出し元からプロセス起動と録画操作をやるのが
納期的に早そうだがUSBカメラの仕様上限が無さそうなので敗北濃厚という印象。

4k、60fpsとか言われたらPC側の要求スペックがゲーミングPCになって
コントロール側ともPCそのものを分ける必要性が出るだろうと予想されます。

1Like

Comments

  1. @kazumori

    Questioner

    スペック詳細判明しましたので追記しました。
    OBSスタジオのプラグインですか。見てみますね

  2. @kazumori

    Questioner

    助かります。明日みてみます。

言語指定とか特になかったんでまあ一旦javaと仮定して

よく見たらVC++って書いてあった^^

WebCamControllerライブラリにwebcam-captureを使用してカメラフレームをキャプチャ
https://github.com/sarxos/webcam-capture/tree/master
GUIに出すサンプルも充実してそうですし老舗ライブラリなのでちょいちょい日本語情報もググればありそうです。
WebcamPanelなる便利Classがあります。

保存の内部キャプチャ自体はこのライブラリで完結しねえのでffmpeg-cliを使用してリアルタイムエンコードでどうでしょう。

Docs見てるとffmpeg-cliは使えるらしいので任意のコーデックでStreaming保存できる気がしますね
https://github.com/sarxos/webcam-capture/tree/master/webcam-capture-drivers/driver-ffmpeg-cli

多分ですけどスター数とか見るにこの組み合わせが無難じゃないかなーと思いました
後はOpenCVとか使うアプリケーションですかね?こっちは情報がいっぱいあるので適当にググるといいと思います

1Like

Comments

  1. @kazumori

    Questioner

    現状すでにプログラム(の別バージョン)に多少採用されていたOpenCVにつけ足しで録画部分の構築を試していますが、保険としてwebcam-captureのC++実装についてもう少し詳しく情報いただけますか?

  2. webcam-captureは完全無垢なJava実装LibraryなのでC++実装はないですね
    C++実装も後学を兼ねていい感じのものを調べてみたんですがあんまりパッとしないです
    Win32 APIを直で叩くDirectShowの実装なんかはいくらか出てきますが

    もしOpenCVもダメならwebcam-captureの実装をC++からjvmLoadingしてやるというのも手でしょうね
    ビルド手順もややめんどくさいし、デバッグも怠くなりますが割と独立性の高いモジュールとして設計可能な要件だと思うのでご検討ください

タイトルをみるとすぐ思い出したものです。カメラと繋がるかどうか、多分何かの形でできるだろうと思います。
もし、そのようなinput方式があったら、ゼロからのPC開発より安いはずです。調査の価値の有無がわからないですが、ご参考。

0Like

Comments

  1. @kazumori

    Questioner

    ご提案いただいたところ、申し訳ありませんが本質問の趣旨はPCアプリケーションなどについてですので外部装置については選考外とさせていただきます。

静画ならともかく、エンコードを含める動画のやり取り

動画は静画のパラパラ漫画ですよ。

  1. フレームベース:Motion-Jpeg、DV、非圧縮
  2. ストリームベース:MPEG2TS、MPEG2PS、MPEG1
  3. エンコード形式:H.264, VP8

各カメラがどの項目に対応しているかはカメラ毎に確認が必要です。

windowsならフレームベースのアプリケーション付のカメラを購入した方が確実では?

0Like

Comments

  1. @kazumori

    Questioner

    カメラは既に選定済みかつ当該機器付属の物は本条件にマッチしないものでした。そのためご意見いただいております。

  2. 機器の諸元を超えることはできません。
    選定済みの機器のアプリの範囲で利用するしかないとおもいます。

    bluetoothのインターフェースはないのですか?

用途は定点(監視)カメラですかね?

ffmpegだと、長期録画というより、ストリーミング用途かと思います。
(長期録画もできなくはないと思いますが)

0Like

Comments

  1. @kazumori

    Questioner

    ご提案ありがとうございます。用途は仰られる通り定点監視です。
    申し訳ございませんが、提案いただいたソフトはいずれも条件を満たさないものであると思われます。特に、起動後即実行を満たしません。

  2. 特に、起動後即実行を満たしません。

    単なるキャプチャーソフトだとそうかもしれませんが、監視カメラソフトだとそんなことはないと思いますが。

Your answer might help someone💌