首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用windows媒体基金会创建NV12编码视频

使用windows媒体基金会创建NV12编码视频
EN

Stack Overflow用户
提问于 2014-09-25 12:22:33
回答 1查看 2.4K关注 0票数 1

我正在学习使用使用本教程http://blogs.msdn.com/b/eternalcoding/archive/2013/03/06/developing-a-winrt-component-to-create-a-video-file-using-media-foundation.aspx创建带有原始固定彩色图像的视频文件

我能够创建RGB编码的WMV视频显示在上面的链接。但我需要创建YUV编码的MP4视频以NV12格式从图像。由于NV12为每个帧使用(WxHx3/2)字节的内存缓冲区,所以我为图像缓冲区(教程中的变量“target”)创建了(WxHx3/2)字节,并将一些固定值设置为图像数据。然后为MFCopyImage()设置图像步长'W‘(ARGB使用Wx4作为步长),并将高度设置为'H’。但这似乎行不通。MF_MT_SUBTYPE设置为MFVideoFormat_NV12。

创建NV12编码的mp4视频文件的正确方法是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-26 20:58:32

我怀疑你做了太多的工作(希望这是个好消息)。首先,请记住,该示例没有将输出编码为RGB。RGB只是接收器的输入类型,您可以随意保留它。

容器是MFTranscodeContainerType_ASF (稍后详细介绍),子类型是MFVideoFormat_WMV3,结果是一个压缩良好的windows媒体视频文件。

创建接收器写入器时,在您的示例中,容器将自动创建,因为没有指定属性。实际上,添加的唯一属性是以下行中的MF_READWRITE_ENABLE_HARDWARE_TRANSFORMS:

代码语言:javascript
复制
MFCreateAttributes(&spAttr, 10);
spAttr->SetUINT32(MF_READWRITE_ENABLE_HARDWARE_TRANSFORMS, true);
hr = MFCreateSinkWriterFromURL(L".wmv", 
                               spByteStream.Get(), 
                               spAttr.Get(), 
                               &sinkWriter);

这就引出了一个问题:“为什么分配了10个属性?”(耸耸肩)哦,没关系。

关键是,您将RGB帧发送到接收器,并且正在进行转换以完成符合您的规范的编码。可在此找到集装箱:

http://msdn.microsoft.com/en-us/library/windows/desktop/dd388919(v=vs.85).aspx

在创建接收器之前,您应该指定一个类似于以下内容的给定容器:

代码语言:javascript
复制
spAttr->SetGUID(MF_TRANSCODE_CONTAINERTYPE, MFTranscodeContainerType_ASF);
// or MFTranscodeContainerType_MPEG4, MFTranscodeContainerType_AVI, etc

您以前使用以下行设置子类型:

代码语言:javascript
复制
hr = mediaTypeOut->SetGUID(MF_MT_SUBTYPE, encodingFormat);
// where encodingFormat was hardcoded to MFVideoFormat_WMV3 in the ctor

不过,请记住,有些格式期望自下而上的图像。尝试将文件扩展名更改为".mp4",将容器更改为MFTranscodeContainerType_AVI,将子类型更改为MFVideoFormat_NV12,您将看到相同的视频。与wmv相比,您的文件将是巨大的,因为所有的YUV值都放在文件中。

要使容器和格式的细节正确,需要非常小心,有些细节很难研究。

希望这能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26038569

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档