9-6 オーディオ・ビデオ録画機能の実践チュートリアル
実践開発の次のステージへようこそ!前の章では、映像をキャンバス上にスムーズに表示させることに成功し、Callback を通じてデバイスのステータスやスナップショット機能の制御をマスターしました。しかし、このダイナミックな映像と音声のプロセスを完全に保存したい場合はどうすればよいでしょうか?ここで、NexVDO SDK のもう一つのコア領域である「録画 (Record)」に入ります。
高画質ビデオ(1080p60など)の録画は通常、膨大なCPUリソースを消費し、システムのカクつき(フリーズ)を引き起こします。この問題を完璧に解決するために、次の実装では SDK の基盤となる魔法、 GPU ハードウェアエンコーディングアクセラレーションを呼び出します。 NVIDIA Jetson プラットフォームの NVENC エンジンを活用することで、極めて低いCPU使用率で、生の映像をリアルタイムに高画質な H.264 + AAC MP4 ファイルへと圧縮できます!

© Blender Foundation | Big Buck Bunny | CC BY 3.0
コア API の理解 - オーディオ・ビデオ録画
完璧なハードウェアアクセラレーションによる録画を実現するために、複雑なコーデックアルゴリズムを深く研究する必要はありません。信号を検出した後、以下の4つのコア API を順番に呼び出して「エンコードプロパティ」を設定し、「開始/停止」コマンドを出すだけです:

1. QCAP_SET_VIDEO_RECORD_PROPERTY :映像の録画プロパティを設定します。
2. QCAP_SET_AUDIO_RECORD_PROPERTY :音声の録画プロパティを設定します。
3. QCAP_START_RECORD :録画を開始します。
4. QCAP_STOP_RECORD :録画を停止します。

基盤となる火力の解禁:マルチフォーマット対応とマルチストリーム録画
詳細なパラメータの設定を始める前に、まず NexVDO SDK 録画エンジンの2つのコアな利点を理解しておく必要があります:
1. 豊富なオーディオ・ビデオコンテナフォーマットとエンコーディングマトリックス あなたのプロジェクトが標準的な MP4 を必要とする場合でも、プロの放送局で使用される TS ストリーム、あるいはウェブ再生に適した M3U8/FLV フォーマットであっても、SDK はすでに基盤レベルであなたのために道を切り開いています!以下のフォーマットに基づいて、開発者は映像と音声のコーデックを非常に自由に組み合わせることができます:
• 映像エンコード ( Video ) : 主流の H.264、H.265 (HEVC)、MPEG2 をサポートし、さらに RAW や H.264_3D などのフォーマットにも対応しています。
• 音声エンコード ( Audio ) : AAC (RAW / ADTS)、PCM、MP2、MP3 をサポートしています。
• コンテナフォーマット : 上記のエンコードを AVI、MP4、ASF、WMV、FLV、TS、M3U8 などの様々な主流フォーマットに完璧にパッケージ化できます。

2. マルチストリーム同時録画 ( Multi-Stream Recording ) セキュリティ監視やハイエンドな放送のアプリケーションシナリオでは、多くの場合、「高解像度のアーカイブファイル」と「低解像度のプレビューファイル」を同時に録画する必要があります。SDK独自のマルチストリーム技術により、同じキャプチャーカードで最大 4つの独立した録画チャンネル( 後述のパラメータ iRecNum 0~3 に対応 )を同時に開くことができます。例えば、APIを通じて同じ信号に対して同時に異なる設定を行うことができます:
• チャンネル 0 ( iRecNum = 0 ) : ローカルの高画質保存用として、1920×1080 の高画質 ( 24Mbps ) で録画します。
• チャンネル 1 ( iRecNum = 1 ) : 一般的な再生用として、1280×720 の中画質 ( 12Mbps ) で録画します。
• チャンネル 2 と 3 ( iRecNum = 2 / 3 ) : リモートのスマートフォンなどで低帯域幅のリアルタイム監視を行うため、960×540 ( 6Mbps ) や 480×270 ( 2Mbps ) といった低解像度で録画します。

呼び出し順序を理解したところで、次はこれらの録画専用APIについて、詳細なパラメータの解説を行います:
QCAP_SET_VIDEO_RECORD_PROPERTY
これは録画の画質とパフォーマンスを決定する最もコアとなるAPIであり、録画を開始する前にこれらのプロパティを設定する必要があります。

QCAP_SET_AUDIO_RECORD_PROPERTY
映像の設定が完了したら、次に音声のエンコードフォーマットを設定します。

QCAP_START_RECORD
コーデックの設定が完了したら、この API を通じて正式に録画エンジンを起動できます。

QCAP_STOP_RECORD
録画を終了する必要がある場合、この API を呼び出すと、SDK は自動的に停止し、安全に MP4 ファイルをパッケージ化( 保存 )します。

UI 表示インターフェースの構築
ここでは、チャプター 9-5 ですでに作成したステータスコールバックと画像スナップショット機能のサンプルをそのまま引き継ぎます。次に、まずは画面上に「録画開始」と「録画停止」のコントロールボタンを準備する必要があります。
1. プロジェクト内の mainwindow.ui をダブルクリックして開き、デザインモード ( Design mode ) に入ります。
2. 左側のツールバーから2つの QPushButton コンポーネントを画面上にドラッグ&ドロップします。
3. 右側のプロパティ欄で、これら2つのボタンの text をそれぞれ 「START RECORD」 と 「STOP RECORD」に変更します。

4. これら2つのボタンをそれぞれ右クリックし、「Go to slot... (スロットへ移動)」 を選択して、クリックイベント用のコードブロックを作成します。

コアコードの記述
ここでは、チャプター 9-5 ですでに作成したステータスコールバックと画像スナップショット機能のサンプルをそのまま引き継ぎます。以上のボタンの準備が整ったら、コード編集モードに切り替えて、録画のコアロジックを段階的に記述していきましょう:
ボタンに「フールプルーフ(エラー防止)ゲート」を追加する
この1行のコードにより、現在信号がない状態であれば、ボタンはそのまま戻り ( return ) 、基盤となる API を一切実行しないため、プログラムが完璧に保護されます!

次に、これまでに学んだ API の順序に従って、GPU ハードウェアエンコードアクセラレーションを組み合わせたこのコアコードを記述します:


この説明があれば、読者は 9-5 の Callback と 9-6 の録画が密接に関連していることを即座に理解できるでしょう!
最終確認( 動作検証 )
コードの記述が完了しました。早速、あなたの初めてのハードウェアエンコード録画プログラムをテストしてみましょう!
1. Qt Creator の左下にある緑色の三角形の 「実行 ( Run )」 ボタンをクリックします。
2. キャプチャ画面がスムーズに表示されたら、 「START RECORD」をクリックします。数秒から数分待った後、「STOP RECORD」をクリックします。

© Blender Foundation | Big Buck Bunny | CC BY 3.0
3. 録画ファイルの検証 : Linux 環境では、ターミナル(端末)を通じて、先ほど録画した高画質な MP4 ファイルを再生できます。
• プロジェクトの build フォルダ( つまり RECORD.MP4 が保存されている場所 )を右クリックし、「Open in Terminal(ターミナルで開く)」を選択します。

• コマンドを入力して、軽量プレイヤー ffmpeg をインストールします:sudo apt install ffmpeg。

• コマンドを入力して動画を再生します:ffplay RECORD.MP4 。

© Blender Foundation | Big Buck Bunny | CC BY 3.0
ポップアップした再生ウィンドウで、先ほど録画したスムーズな映像が見られ、音声も聞こえたら——おめでとうございます!NexVDO SDK の高性能なオーディオ・ビデオ録画機能を完璧に解禁しました!