VLC播放引擎架构

        VLC虽然是用c代码实现的,但是在代码编写上遵循了面向对象原则,易修改和扩展。不过实话实说,结构之间的关联太过于频繁,理解上还是不太容易。如果能够改成c++那是最好不过了。

        对于媒体播放器,肯定离不开解复用,解码,音频和视频输出这四个模块,不管是DirectShow,还是VLC,或者自己要开发一个播放器,都是如此。媒体播放器的差异主要存在于模块之间的通信方式,界面消息处理上。DirectShow使用Filter形成Graph形式,可以自由搭建想要的数据处理流程,能够实现定制自己要求的播放器,但是系统占用资源较多,实时性能上要差一些;VLC结构上更为紧凑,不能够自由组合想要的处理流程,但是实时效率更高,系统占用率上更低。

        本文简要描述了播放引擎架构,给大家对VLC播放过程的一个大致印象。如图1所示。主要有以下活动线程,解复用线程,音频和视频解码线程,视频处理线程,音频和视频播放线程。

1)解复用线程:实现对音频和视频的分离,将压缩包送入相应的解码线程。另外在VLC中,解复用线程空闲时候用于处理播放控制消息,这个做的比较巧妙,但是当视频数据较大时候,比如播放高清素材时候,可能响应界面就不太及时了。

2)解码线程:音频和视频线程分别调用相应的解码器完成数据解码。

3)视频处理线程:完成视频画面的处理,譬如亮度调节,对比度调节,反交织。还有上字幕等等。另外,视频处理线程还处理视频设置的界面消息,包括播放的时候加载字幕等等。音频其实也有处理的,包括音量调节,混音,但是这些耗时都不大,所以在解码送到播放过程中直接完成了,并不需要单独线程执行。

4)音视频播放线程:根据时间戳分别负责音频和视频的播放。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值