C# 是否可以在WinRT中连接/组合视频文件?

C# 是否可以在WinRT中连接/组合视频文件?,c#,windows-8,windows-runtime,windows-8.1,windows-phone-8.1,C#,Windows 8,Windows Runtime,Windows 8.1,Windows Phone 8.1,我使用C#为Windows 8.1和Windows Phone 8.1编写了一个通用应用程序,允许用户录制视频并将其发送给客户,但现在需要将多个视频合并为一个视频,但无法在WinRT中看到任何支持此功能的内容 可以这样做吗?假设视频已经录制到驱动器上,您可以根据平台使用几种不同的技术将它们连接起来。让我们从Windows8.1开始。在这个平台上,我们没有编辑API,您需要以编程方式连接文件 这可以使用和完成。这两个组件允许您从文件中读取音频和视频流,然后将其写入另一个文件。每个流可以使用一个源读

我使用C#为Windows 8.1和Windows Phone 8.1编写了一个通用应用程序,允许用户录制视频并将其发送给客户,但现在需要将多个视频合并为一个视频,但无法在WinRT中看到任何支持此功能的内容


可以这样做吗?

假设视频已经录制到驱动器上,您可以根据平台使用几种不同的技术将它们连接起来。让我们从Windows8.1开始。在这个平台上,我们没有编辑API,您需要以编程方式连接文件

这可以使用和完成。这两个组件允许您从文件中读取音频和视频流,然后将其写入另一个文件。每个流可以使用一个源读取器和一个接收器写入器

源读取器能够解析文件容器,并向您提供压缩或未压缩的样本。如果所有输入文件具有完全相同的媒体类型,则理论上可以将未压缩的示例写入接收器写入器。您还需要使用此媒体类型配置接收器写入程序

如果只想连接文件,可以从源读取器1读取样本并将其发送到接收器写入器。写完源代码读取器1中的所有示例后,转到源代码读取器2、3等

正确的方法是在后续文件中重新设置媒体样本的时间戳。例如:如果帧速率为30 FPS,且上次写入的时间戳为00:00:02:25(SMTP非删除),则需要将从下一个源读取器获取的第一个时间戳修改为00:00:02:26。基本上,您需要向每个后续时间戳添加00:00:02:25+1。您需要确保时间戳以预期的节拍(30 FPS)单调增加,并且永不重复

在WindowsPhone8.1上,这个问题更容易解决。在WP8.1中,我们引入了名称空间来帮助视频编辑任务。使用这些API真的很容易。这是10000英尺的视图:

1) 创建一个对象

2) 设置编码配置文件

3) 创建表示要连接的文件的对象

4) 将MediaClip对象添加到MediaComposition并设置输入和输出点

5) 将MediaComposition呈现到文件中

我希望我能为这两种产品提供一个好的样品,但不幸的是,目前我们没有任何可用的。我确实要求MediaComposition样本,但我不确定它们的状态

如需更多样品,请点击此处:

我希望这有帮助


James

我觉得您需要了解更多有关文件编码的信息。如果它像将两个二进制文件合并为一个一样简单,那么它是非常可行的。如果二进制文件有需要合并/删除的头文件和元数据,那么您必须识别并找到它们。您可以直接访问字节流,并可以对其进行操作。我目前的工作假设是,它们具有相同的视频格式、分辨率等,并使用相同的摄像机记录在同一设备上。格式和分辨率不一定重要。您需要了解的是文件编码的规范。考虑一个编码[标题] + [视频数据]。当组合这两个文件时,如果直接进行,则会得到[Header1]+[Video1]+[Header2]+[Video2]。但是,如果删除[Header2],则会得到[Header1]+[Video1]+[Video2]。事情不会这么简单。您可能需要更改视频文件的标题,以包含更新的长度等内容。也可以简单地将第二个视频“录制”到第一个视频中。考虑<代码>和MyAccPACTION的用法及其用法。可以简单地给它一个已经有视频的流。创建一个长度为两个组合的新流,加载第一个流,查找到正确的位置,加载第二个流,然后从那里写入。您必须进行研究和实验才能找到答案,因为这不是一个直接支持的场景。我已经使用了媒体合成方法,但存在音频问题,即视频被合并,但音频播放速度加倍: