特定のデータをビデオ ファイル形式でエクスポートするオプションを備えた Windows ストア アプリがあります。私のアプリは C# ですが、エンコーディング自体は、David Catuhe によるこのサンプルから適応された C++ ライブラリにドロップすることで処理され、 うまく機能しています。問題は、高品質で実行するとエンコーディング プロセスに時間がかかり、画面がタイムアウトした場合 (Surface RT など)、またはユーザーがアプリを切り替えた場合、プロセスが失敗することです。失敗の原因が何であるかは完全にはわかりませんが、それを検証するために取り組んでいますが、プロセスが変更なしで中断を乗り切ることができたとしても、廃棄された場合の処理方法がわかりません.
特定の状況でエンコーディングが中断されても問題ありません。私が望んでいないのは、何らかの理由でアプリがなくなった場合に最初からやり直す必要があることです.
私の知る限り、ビデオをファイナライズせずにストリームを閉じて、後で書き込みを再開することは現実的ではありません。これに照らして、いくつかのオプションを検討しましたが、どれが実際に機能するかはわかりません. 私はいくつかの方向性に非常に感謝しています。
1) 可能であれば、ストリームを単純に閉じて、後で再開し、中断したところから再開できるとよいでしょう。現時点ではこれを機能させることができませんでしたが、機能する必要がある場合は知りたいです。
2) エンコード プロセスをバックグラウンド タスクに、最初から、または廃棄されたときにのみプッシュします。しかし、開いているストリームをアプリからバックグラウンド タスクに渡す方法はありますか? そうでない場合、少なくともアプリがフォアグラウンドにある間、CPU/メモリの制限なしでアプリのバックグラウンド タスクを実行する方法はありますか? 通常バックグラウンド タスクをバインドする非常に厳しい制約内でエンコード全体を実行するには、何年もかかるためです。
3) アプリがフォアグラウンドにある間にビデオのセグメントを段階的にレンダリングし、最後にパーツをつなぎ合わせます。これにより、エンコードが中断された場合でも、最新のセグメントを取得できます。私の読書から、これは理論的には可能であるはずです(ビデオを再エンコードする必要を回避する再多重化のカテゴリに分類されると思います)。しかし、このシナリオをカバーするサンプルは見つかりませんでした。C++ (私はほとんど経験がありません) でさえもです。Transcode API は、複数のサンプルの結合をカバーしていないようです。SharpDX を使用してそれを行うことを検討しましたが、使用したいものの最も可能性の高い候補 (メディア セッション) は、デスクトップ アプリに対してのみ公開されます。
4) 作業をデスクトップ アプリまたはサーバー アプリにプッシュします。問題は、これを Windows RT で実行したいのですが (そのため、デスクトップはありません)、顧客に代わってそのような集中的な作業を処理できるサーバーをサポートできるビジネス モデルが現在ありません。
私の質問は、ここでの私の最善の攻撃ラインは何ですか? 中断後もストリームを維持する方法はありますか? そして、私が推測するように、オプション 3 が私の最善の策である場合、その方法に関するサンプルやガイドを知っていますか? 明らかに、C# オプションが非常に好まれるので、見落としていることを願っています。C++ は問題ないかもしれませんが (Catuhe 氏のサンプルでここまでたどり着いたように)、かなり具体的なガイダンスが必要になるのではないかと思います。ちなみに、これに関する MSDN のドキュメントは非常に高レベルであるため、C++ で実際のプログラムを作成する方法は言うまでもなく、どの部分を組み立てる必要があるか、それぞれに何が必要かについても漠然とした考えしかありません。
あなたが提供できるどんな助けも非常に高く評価されます.