【发布时间】:2017-03-25 16:43:35
【问题描述】:
我想不出为什么会得到这个 HRESULT。
我在媒体基金会有一个管道。通过源解析器加载文件。我正在使用媒体会话。
这是我的一般管道:
Source Reader -> Decoder -> Color Converter (to RGB24) -> Custom MFT -> Color Converter (To YUY2) -> H264 Encoder -> Mpeg 4 Sink
在我的自定义 MFT 中,我对帧进行了一些编辑。 MFT 的任务之一是过滤样本并丢弃不需要的样本。
此管道用于修剪视频并输出 MP4 文件。
例如,如果用户想要从 10 秒标记中修剪 3 秒,我的 MFT 将读取未压缩的采样时间并通过要求更多采样来丢弃它。如果样本在范围内,它将被传递到下一个颜色转换器。我的 MFT 处理 RGB24 中的帧,因此是初始颜色转换器的原因。第二个颜色转换器为 H264 编码器转换颜色空间。我正在使用 High Profile Level 4.1 编码器。
管道已正确设置。所有的帧都被传递到接收器,我有一个 MPEG4 接收器的包装器。我看到 BeginFinalize 和 EndFinalize 被调用。
但是在我的一些修剪操作中,EndFinalize 吐出了 MF_E_SINK_NO_SAMPLES_PROCESSED。我认为这是随机的。这通常发生在选择不接近开头的范围时。
这可能是由于采样时间。我正在重新设置采样时间和持续时间。
例如,如果调整后的帧持续时间为 50 毫秒(由用户选择),我将获取第一个可接受的样本(假设为 1500 毫秒)并将其变基为 0。下一个将在我的 MFT 中为 1550 毫秒,然后设置为50ms 以此类推。因此帧时间以 50 毫秒为增量设置。
这种方法正确吗?可能是接收器没有接收到足够的样本来写入标头并最终确定文件吗?
如前所述,它在某些情况下有效,但在大多数情况下都失败了。我在 Windows 10 上运行我的代码。
【问题讨论】:
标签: video-processing ms-media-foundation mpeg-4