可以在WinRT中连接/组合视频文件吗?

时间:2014-11-04 16:40:05

标签: c# windows-8 windows-runtime windows-8.1 windows-phone-8.1

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

可以吗?

1 个答案:

答案 0 :(得分:2)

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

可以使用Source ReaderSink Writer来完成此操作。这两个组件允许您从文件中读取音频和视频流,然后将它们写入另一个文件。您可以为每个流使用一个Source Reader和一个Sink Writer。

Source Reader能够解析文件容器并将压缩或未压缩的样本交给您。如果所有输入文件都具有完全相同的媒体类型,那么理论上您可以将未压缩的样本写入Sink Writer。您还需要使用此媒体类型配置Sink Writer。

如果您只想连接文件,可以从Source Reader 1读取样本并将它们发送到Sink Writer。一旦您编写了所有样本,源代码阅读器1将继续阅读Source Reader 2,3等。

实现此目的的技巧是在后续文件上重新定义媒体样本的时间戳。例如:如果帧速率为30 FPS且上次写入的时间戳为00:00:02:25(SMTP非丢弃),则需要修改从下一个源读取器获得的第一个时间戳。 00:00:02:26。基本上,您需要在每个后续时间戳中添加00:00:02:25 + 1。您需要确保时间戳以预期的节奏(30 FPS)单调增加,并且永远不会重复。

在Windows Phone 8.1上,问题更容易解决。在WP8.1中,我们引入了Windows.Media.Editing命名空间来帮助完成视频编辑任务。使用这些API非常简单。这是10,000英尺的视图:

1)创建一个MediaComposition对象。

2)设置编码配置文件。

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

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

5)将MediaCompositon渲染到文件中。

我希望我能为这两者提供一个很好的样本,但不幸的是AFAIK此时我们没有任何可用的东西。我实际上已经请求了MediaComposition样本,但我不确定它们的状态。

要请求其他样品,请访问:https://code.msdn.microsoft.com/windowsapps/site/requests

我希望这有帮助,

詹姆斯