新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于DirectFB的嵌入式播放器设计

基于DirectFB的嵌入式播放器设计

作者: 时间:2012-05-15 来源:网络 收藏

3.1 插件接口以及编解码
通过对FFmpeg进行封装,形成一组统一接口方便用户调用。插件接口通过以下方法来控制解码器:
①Probe函数。通过检查文件扩展名来确定是否支持播放该文件,可以识别的扩展名有wav、au、snd、mp2、mp3、m2a、swf、wma、rm等。用户可以通过添加新的解码器来支持更多新的文件格式。
②Construct函数。通过调用FFmpeg的一些库函数,首先将输入的视频文件头信息读取出来,接着把视频文件分离成音频和视频流,并申请音频和视频流的缓冲区,然后识别出音视频解码器。该函数同时会将用户写的一些非标准函数指针赋给标准API函数,方便用户的调用。
③FFmpegInput函数。该函数管理将对解码出的音视频包送入各自的FIFO队列,同时设置了一些标志位来管理FIFO队列,例如音视频队列当前的状态,当用户拖动进度条进行偏移时用户需要有一个拖动标志位,拖动的长度用来重新计算播放时间。
④FFmpegVideo以及FFmpegAudio函数。这两个函数主要用于播放音频流和数据流,同时有一些用于音视频的同步控制。
⑤FFmpeg_PlayTo函数。该函数是给用户提供的接口函数,该接口函数在中为PlayTo。在函数中,PlayTo同时启动了3个线程,这3个线程分别调用了FFmpegInpuIt、FFmpegVideo、FFmpegAudio函数,用于将将音视频送入FIFO队列,从FIFO队列取出数据并播放。
的数据流程如图3所示。音视频处理过程是同步进行的。

本文引用地址:https://www.eepw.com.cn/article/149068.htm

e.JPG


此外还有一些控制函数,例如文件播放PlayTo、播放停止Stop、按时间跳转SeekTo、调整音量SetVolume、获取音量GetVolLume、调整播放速度SetSpeed、获取播放速度GetSpeed等函数,这些函数在construct函数中被封装成标准接口便于用户涮用。
3.2 Lite和fusionsound
Video接口通过调用FFmpeg对音视频解码进行了有效的封装。通过Lite,用户与实现有效交互。Lite弥补在工具箱以及窗口管理上的不足,相比于其他的GUI,它在提供对话框和按钮的同时,资源消耗较小,适合开发。Fusionsound是一个DirectFB的子库,它oss或者alsa驱动。Fusionsound将音频数据输出到了扬声器上,该函数库能够支持一些基本操作,例如WAV格式文件的播放,同时它也提供一系列的声音播放、调节播放速度、调高音量、声音缓冲区管理等接口。
3.3 播放器的流程
程序运行流程如图4所示。程序首先初始化Lite以及DirectFB库,然后初始化对话框并设置回调函数;接下来初始化一系列的按钮,例如播放、暂停、快进、声音、放大、缩小等,并设置消息触发响应函数。接着调用DirectFB接口中的video接口播放视频文件,然后会进入消息循环,来响应用户各种各样的按键消息。

f.JPG

linux操作系统文章专题:linux操作系统详解(linux不再难懂)


评论


相关推荐

技术专区

关闭