织梦CMS - 轻松建站从此开始!

罗索

插件框架|音视频同步|移植

落鹤生 发布于 2012-03-09 16:01 点击:次 
音频根据自带时间戳和系统时间的差异关系对声卡时钟(tick值)作调整。根据音频的线性特征,视频以音频的声卡时钟(ret= dev->tick+ ((now - dev->time_ref))作参考来进行音视频同步。每次在填充满一个缓冲区时进行音频时钟的调整。
TAG:

一、插件框架

插件主体的数据结构设计。

将插件看作黑盒,提供统一的接口给主体,主体调用该接口时不需要知道内部具体的实现。

插件的数据结构设计如下,包括插件描述信息(名字,描述,版本号)和接口集。

  1. typedef struct node_boot_func 
  2.     const char *name; 
  3.     const char *desc; 
  4.     int category_id; 
  5.     int sub_id; 
  6.     void (*getversion)(char buffer[VERSION_MAX_LENGTH]); 
  7.     int (*available)(const int parm); 
  8.     void* (*create)(void *parm, int size); 
  9.     void (*release)(void*p); 
  10. } node_boot_func; 

前插法将这些插件存储在一个单链表中。

插件的依赖:降低与其他插件的耦合。

消息通信机制的实现:插件如何将自身的公共信息传达给其他插件(或:外环境),或外环境怎样将消息反馈给插件。

源插件和解码插件有什么异同。

二、系统设计

(1)分别启动两个线程:一个音视频解码线程slave,一个播放显示状态管理线程master。中间用一个缓冲队列来连接两个线程,线程slave把数据放到队列,线程master从缓存队列取数据。

(2)层次架构与函数指针:回调函数是通过函数指针调用的函数。因为可以把调用者与被调用者分开。调用者不关心谁是被调用者,所有它需知道的,只是存在一个具有某种特定原型、某些限制条件(如返回值为int)的被调用函数。

例如:插件里的函数集是函数指针,主体和插件耦合度降低。主体通过回调函数来操控插件。

(3)C语言的消息机制:使用函数指针来实现。

例如:插件将自身信息传达给主体。

【主体】

  1. void msg_gateway (void* key,int notify_id, int param1, int param2) 
  2.     tmpc_context *ptx = (tmpc_context*)key; 
  3.     if( !ptx) return
  4.     switch(notify_id) 
  5.     { 
  6.     case MSG_BY_PASS: 
  7.     ... 
  8.     case MSG_AFTER_SEEK: 
  9.     ... 
  10.     case MSG_RECONNECT_SEEK: 
  11.     ... 
  12.     case MSG_MEDIA_FMT: 
  13.     ... 
  14.     case MSG_END_OF_FILE: 
  15.     ... 
  16.     } 

指定该函数指针到插件的公共接口中,使得该插件可以调用msg_gateway回调函数来传递消息。
source->set_notify(source,msg_gateway,ptx);

【插件】

 mfs->notify_routine( mfs->key, MSG_AFTER_SEEK, seekedpos, 0 );

三、音视频同步

音频根据自带时间戳系统时间差异关系对声卡时钟(tick值)作调整。根据音频的线性特征,视频以音频的声卡时钟(ret=  dev->tick+ ((now - dev->time_ref))作参考来进行音视频同步。每次在填充满一个缓冲区时进行音频时钟的调整。

视频在显示之前 和 在解码之前,进行视频播放的延时或丢帧,来达到音频和视频同步。

(stefzeus)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201203/15806.html]
本文出处:CSDN博客 作者:stefzeus 原文
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容