使用大华sdk批量下载视频文件、批量转换格式

使用大华sdk批量下载视频文件、批量转换格式

关于视频文件下载的例子,可以参考官方的sdk包中的例子:xxx。
最重要的一个地方是一个回调函数的编写。每次调用DownloadFileByTime都会产生一个文件句柄,这个回调函数里就是根据不同的文件句柄来将视频数据写入不同的文件。
在回调函数写好后,问题就来了。
下载下来的文件是dav格式的。sdk中提供了视频转换的方法,一种是转换成avi,一种是转换成asf。
第一种由于cpu占用率过高所以不考虑。
第二种方法可以使用,不过也有一个问题需要解决。那就是批量下载后的批量格式转换任务。
大华提供的格式转换不支持多个转换任务,于是采用一个折中办法。
先举个例子:
小朋友们在旋转木马前举着票,管理员则随意选一张票,那么这个小朋友就可以上去玩了。
这个木马算是一个资源,如果这个小朋友没有下来,其他小朋友就没有办法玩了。
玩完木马的小朋友又高兴的去游乐园的其他地方玩耍了。
把这个木马比作格式转换任务,他们都有两个明显的状态:工作中和未工作。只要木马处于未启动的状态,小朋友们都有机会到木马上去玩。
解决问题的伪代码:
def 下载线程():
    下载()
    转换格式()

def 下载():
    pass

def 转换():
    pass

workstate = false;

def 转换格式():
    if workstate== False:
        workstate = True
        转换()
        workstate = False
    elif workstate == True:
        等待wrokstate为False时再进行格式转换

主任务函数()
{
    开启下载线程1
    开启下载线程2
    开启下载线程3
    开启下载线程4
    开启下载线程5
    ……
}


后来又发现一个问题,转换成asf的文件在播放时用鼠标拖动进度条,
当前的播放位置与进度条不能同步。(这个下次再写)

tips

下载以及文件转换时多线程的应用:为什么使用AfxBeginThread,这样的线程是否可以不用控制,什么时候可以在一个线程结束时开启另一个线程?
记录可以,但是最好再把问题抽象一下。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值