- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
自从我试图让我的编码器工作以来已经一周了......
所以事情是:
我使用 MF 中的 Sink Writer 创建了一个文件。
我写了我所有的视频样本。
-->(如果我停在那里并调用 Finish 方法,我可以使用 VLC 读取文件,但如果我执行以下操作,文件将“损坏”)
我写了我所有的音频样本。
我调用 finish 函数并得到一个 HRESULT 代码:“接收器无法创建有效的输出文件,因为所需的 header 未提供给接收器”。我完全理解这个错误,只是我不知道如何解决它...
如果你们需要任何代码,我很乐意把它放在这里。
最佳答案
当我第一次开始使用 MP4 容器时(在完成接收器时),我遇到了这个确切的错误。
Error 0xC00D4A45: Sink could not create valid output file because required headers were not provided to the sink.
您没有提到您正在为接收器提供什么子类型的音频样本,也没有提到添加了什么子类型的音频流(用于输出),但我相信您的问题与后者有关。
使用媒体基础进行开发,使用 MFAudioFormat_AAC
或 MFAudioFormat_MP3
最容易配置 MP4 容器。如果您查看 MP4 File Sink 的详细信息在这link ,您将看到接收器可以为以下格式生成示例描述框 (stsd):
- H.264/AVC video
- AAC audio
- MP3 audio
可以使用一些其他格式,但是您必须使用 MF_MT_MPEG4_SAMPLE_DESCRIPTION
手动提供样本描述框 (stsd) 描述在创建接收器之前配置属性时的 GUID。这是使用以下函数完成的:
// IMFAttributes::SetBlob
attributes->SetBlob(MF_MT_MPEG4_SAMPLE_DESCRIPTION, buffer, buffer_size);
但是,很少有其他类型可以使用,如 MP4 File Source here 所述.在媒体类型 下,有一个包含各种允许类型的表格。除了前面提到的 AAC/MP3 之外,剩下的音频类型很少,而且没有一个是非常有吸引力的选择。您会发现坚持使用 MFAudioFormat_AAC
或 MFAudioFormat_MP3
对您很有帮助。
希望这对您有所帮助。
编辑:
如果您选择使用 AAC
或 MP3
以外的音频子类型,并使用 IMFAttributes 提供
,示例描述框 (stsd) 在this answer 中有描述.正如该答案所述,这些框是嵌套的。 MF_MT_MPEG4_SAMPLE_DESCRIPTION
配置::SetBlob
关于音频,例如,如果您选择MFAudioFormat_PCM
,MP4 File Source在 Media Types 部分列出了 5 个条目。因此,在构建示例描述框时,请使用适当的示例输入代码(“raw”、“sowt”、“twos”、“NONE”、0x00)。注意“原始”中的空格。高级摘要如下:
// 'raw ' Audio MFAudioFormat_PCM 8-bit PCM audio
// 'sowt' Audio MFAudioFormat_PCM 16-bit little-endian PCM audio
// 'twos' Audio MFAudioFormat_PCM 16-bit big-endian PCM audio
// 'NONE' Audio MFAudioFormat_PCM 8-bit or 16-bit big-endian PCM audio
// 0x00 Audio MFAudioFormat_PCM 8-bit or 16-bit big-endian PCM audio
您还可以找到 these registered codecs interesting .
关于c++ - 无法使用 Media Foundation 的 sinkwriter 将音频流添加到 MP4 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25129263/
我正在使用 MediaFoundation使用 SharpDX 对来自 desktop duplication frames 的视频文件进行编码. 我正在创建纹理并捕获屏幕。然后将此纹理传递给 MFC
我正在使用 Media Foundation 在一系列过滤器之后从输入 MP4 创建 MP4 (H264 + AAC) 输出文件。视频的创建工作完美,视频在本地复制没有问题。问题在于,当远程执行时(通
我正在尝试将 MP4 文件接收器添加到拓扑。当我的 MediaSource 已经是 MP4 时,我使用 MFCreateMPEG4MediaSink 和 MF_MPEG4SINK_SPSPPS_PAS
我想制作一个 mp4 文件作为接收器写入器。提供msdn样本可以制作视频,但无法制作音频。所以我做了一个搜索并得到了这个来源。但是这个消息来源也没有听到任何声音。这是一个糟糕的来源吗?那么哪里出错了呢
我一直在尝试编写一个小应用程序来为您创建视频,您可以发送自己的图像。为了对视频进行编码,我使用了媒体基础库。 一切正常。我能够创建一个非常短的视频,但是一旦我尝试创建一个大视频,我的应用程序就会开始占
我正在使用 Microsoft Media Foundation 对 H.264 视频文件进行编码。 我正在使用 SinkWriter 创建视频文件。输入是一个缓冲区 (MFVideoFormat_R
我正在使用 SinkWriter 以使用媒体基础对视频进行编码。 在初始化 SinkWriter 之后,我想获取它使用的底层编码器,并打印出它的名称,这样我就可以看到它使用的是什么编码器。 (在我的例
自从我试图让我的编码器工作以来已经一周了...... 所以事情是: 我使用 MF 中的 Sink Writer 创建了一个文件。 我写了我所有的视频样本。 -->(如果我停在那里并调用 Finish
我是一名优秀的程序员,十分优秀!