在 C# 中从 blob 正确保存 .mp4 文件

Correctly save .mp4 file in C# from blob

我想从一个字节数组中保存一个 .mp4 文件。此字节来自 websocket,代表用户在 Chrome 或 Firefox 等支持的浏览器中使用 getUserMedia() 时的网络摄像头和麦克风录音。当我处理完所有东西,我只需要加入视频的多个部分并保存它,我有这个代码:

foreach (TransFile tf in ltf.Value.OrderBy(m=>m.sequence)){
     using (BinaryWriter writer = 
               new BinaryWriter(File.Open("d:\" + ltf.Key + ".mp4", FileMode.Append)))
               {
                    writer.Write(tf.bytes);
               }    
}

文件结束在我的D盘,但是输出视频有问题:

当我尝试使用 VLC 打开它时会发生这种情况...打开我的视频的唯一播放器是 BSPlayer。如何保存此文件以便任何玩家都可以打开它?

更新:为了修复编解码器错误,我使用 ffmpeg 转换了保存的文件,以便能够在本地播放器或使用网页上的 HTML5 播放器播放此文件。

好的,您的问题没有正确的解决方案。但我会尽力阐明它。

您需要了解有关音频 and/or 视频文件的两件事。打包和编码。您可以阅读有关此主题的article

MP4 是一种编码,但 MP4 文件可以用许多不同的结构打包,这可能是 运行 您在更简化的播放器中播放视频的问题。

此外,如果您的二进制数据不是 MP4 文件,您可以另存为 MP4,但这不会使该视频数据成为 MP4 文件。也许您正在保存一些其他格式的名称为 .MP4 文件。

最后,如果您需要保证以 MP4 格式保存,您需要在您的程序中加入一个视频转换器来检查格式并在需要时进行转换。