问题标签 [windows-media-format-sdk]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
148 浏览

video - 如何使 WriteStreamSample 从不丢包?

我正在使用 Windows Media Format 11 SDK 通过读取和写入压缩样本来复制视频文件(即没有发生任何解码/编码 - 只是复制原始样本)。

我的问题是作者正在丢弃数据包!这是次优的,因为我想保留原始文件中的所有数据包。如果在输入文件中定义了错误的比特率(毕竟到处都是各种古怪的文件),问题就特别严重。

是否有一些配置设置可以用来完全禁用数据包丢弃?到目前为止,我还没有发现类似的东西。我尝试设置一个非常高的比特率和缓冲区窗口,但这只是在将流添加到编写器配置文件时给了我一个无意义的错误。

我目前唯一的选择似乎是自己重新实现所有 ASF 解析代码,真正做一个低级的复制操作。但是,这将浪费大量时间。

有什么我错过的吗?我能以某种方式告诉作者永远不要丢包吗?

编辑:当视频使用 WMV2 (Windows Media Video 8) 编解码器时,问题似乎最为严重。当我使用 VC-1 时,输出视频是正常的(或者至少接近正常,我没有详细检查文件内容,但在视觉上看起来很好)。也许WMV2的实现在媒体格式SDK中被破坏了?好吧,我现在只能在没有 WMV2 支持的情况下生活。

0 投票
1 回答
867 浏览

c# - 尝试调用 IWMWriter 的 EndWriting 时出现无法解释的“灾难性故障”错误

我正在尝试使用 Windows Media .Net 库来复制作为 asf 文件的音频/视频文件。我对 Windows Media Format SDK 比较陌生,所以我不确定我是否做对了。我查看了下载中包含的一些示例项目并查看了 C++ 版本的文档,但我似乎无法弄清楚为什么在调用 EndWriting 时它会崩溃。因此,如果有人可以帮助指出我在这里做错了什么,我将不胜感激。

我有一个 WinForm,上面有一个按钮来开始录制,还有一个按钮来结束录制。我的类实现了 IWMReaderCallback 并使用一个名为 SampleProp 的私有类来保存指针的值,这些值将在 OnSample 方法中返回。因此,在 OnSample 方法中,我使用返回的样本副本填充 SampleProp 实例的 byte[] 成员。然后,我将 SampleProp 的实例添加到一个集合中,该集合将在另一个名为 ProcessReaderSample 的方法中使用。在这另一种方法中,我正在创建 IWMReader 和 IWMWriter 对象,并且有一个 while 循环将调用 BeginWriting、AllocateSample、WriteSample,然后是 EndWriting。这就是它崩溃的地方。这是我正在使用的代码...

因此,如果有人可以帮助我解决这个问题。先感谢您。

0 投票
1 回答
58 浏览

video - 电源故障期间的 ASF 文件

我正在使用 WMWriterAdvanced 和 WriteStreamSample 函数将视频数据写入 ASF 文件,如果在写入样本期间出现电源故障,则会导致我丢失了大约最后 20 秒已经写入该文件的内容。用 ASFView 检查文件后,我注意到最后 500 个数据包只填充了零字节。我知道在电源故障期间可能会丢失一些数据,但似乎 20 秒的视频太多了。

为什么已经写入的样本已损坏,是否可以减少其数量?