前提:
以下を想定しています: H264 ストリームは AnnexB タイプであり、チャンクで読み取ることができ、前提条件はデータをチャンクで書き込むこと (ストリーミング) です。出力データは、拡張機能や特別なプレーヤーなしでブラウザーで再生できます。
Proposal:
You need to read a chunk of data, remux the raw h264 data to fragmented mp4 and send the chunk of that file to a client. In order to do that, probably the easiest solution would be to use FFMpeg and pipes.
FFMpeg:
FFMpeg can use pipe input and output (answer ref). To receive the raw h264 stream, remux the stream to a mp4 that is fragmented (answer ref) and write an output do the following (not tested):
ffmpeg -f h264 -i pipe: -c copy -f mp4 -movflags frag_keyframe+empty_moov pipe:
That command will read raw h264 data from a standard input, copy the stream (no re-encoding) and mux it to a fragmented mp4 to standard output.
C# では、外部プロセスProcess.Startを開始し、受け取ったバイトをそのProcess.StandardInputに書き込み、 Process.StandardOutputを読み取ることができます。出力は、ブラウザで再生可能な断片化された mp4である必要があります。
備考:
1. ビデオをシークできないのが欠点ですが、私の理解が正しければライブ ストリームなので問題ありません。
2. 入力ストリームは再エンコードされず、再多重化されるだけです。これは最速の処理ですが、より詳細な制御が必要な場合: たとえば、h265 を出力したり、フラグメント サイズを指定したりする場合は、プロセス中にストリームを再エンコードする必要があります (CPU 使用率が高い)。