WMF SDK例程wmvcopy中的错误

WMF SDK例程wmvcopy中的错误

WMF SDK指Microsoft的Windows Media Format SDK,支持以下三大功能:ASF文件的生成(包括ASF数据的流化)、ASF文件的编辑和ASF文件的播放(包括ASF媒体流的播放)。目前版本是WMF SDK9。

wmvcopy是其一个例程,实现了从头部开始截取n秒另存为文件。
我曾对wmvcopy简单修改,实现了从m秒到n秒的截取。见:
windows media format SDK 切割wmv/wma文件

但在使用中发现有些错误。

一个是明显的错误,不能处理大文件,只能截取214秒。见:

请问有大侠发现format SDK 例子 wmvcopy debug error么?

wmvcopy 有个严重的debug error, 在网站找了半天,没有看到有谁提出来。 而且还有一个很奇怪的问题,wmvcopy -i c:/input.wmv -o c:/output.wmv -d 214 没有问题,能正常将input.wmv 剪切为214s output.wmv, 但是wmv -i c:/input.wmv -o c:/output.wmv -d 215 / 216 / 230 都不能正常剪切,output.wmv 就是input.wmv 的copy.

请哪位大侠解释一下?


还有一个是刚发现的,文件保存结束后,偶尔会崩溃。找个几百K的大文件,截取头部几十秒试试。写个批处理运行一百次,运行中启动关闭一些其它程序,应该会有一两个报错误出来。(省去一大堆的错误跟踪过程。并且,VC的单步调试可能不会出错。)错误定位在OnTime()的这一语句上:
        HRESULT hr = m_pReaderAdvanced->DeliverTime( m_qwReaderTime );

原来是复制结束后,m_pReaderAdvanced已释放,而m_fEOF还未设置,所以出错。

这样可以让你把错误看的更清楚点:
        assert(m_pReaderAdvanced);
        HRESULT hr = m_pReaderAdvanced->DeliverTime( m_qwReaderTime );

粗略地查看一下wmvcopy的逻辑,OnTime()每次让Reader读取1秒的数据,直到文件结束。
实际情况是,指定了截取的长度,一般都不会到达文件尾部。
所以应该另设一个标志:m_fMaxDuration,到达MaxDuration时就可以结束文件的读取,而不必一直读到文件尾。一可解决崩溃错误,二可提高效率。

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值