基于树莓派的高清视频播放器的设计与实现

2015-10-19 10:55顾艳华王闯
科技视界 2015年29期
关键词:树莓派物联网

顾艳华+王闯

【摘 要】树莓派卡片电脑是研究物联网,智能机器人等领域的天然开发板,基于树莓派的高清视频播放终器的设计与实现具有很强的实践参考价值。介绍了树莓派的软硬件研发环境及其发展,给出了基于树莓派设计实现高清视频播放器的软硬件设计及移植开发环境,并基于树莓派移植了高清视频解码模块,实现了基于树莓派的高清(720P及1080P)视频的播放系统。经测试,该系统性能卓越,实用创新性强。

【关键词】树莓派;高清视频;视频播放器;物联网;H264;AAC

0 引言

体积如名片大小的树莓派是基于ARM控制器和Linux系统的单板机电脑,它具有计算机主机的所有功能和接口,如USB,RJ45, SD-IO,HDMI及GPIO接口等,广泛支持基于Linux 的发行版和Windows 10的操作系统[1]。树莓派体积小巧,具有可扩展性强,社区广泛等优势,它是研究物联网,智能机器人等领域的良好的、天然的原型开发平台。树莓派自2012年首版在英国发布至今,深受全球计算机爱好者的热烈研究,来自全球的计算机软硬件爱好者们基于树莓派开发了众多的创新功能,如机器人飞行器,家庭自动化,天气预报站,超级电脑,有声书籍播放器等等[2]。

随着高清视频资源的日益丰富和用户对高清视频播放需求的越来越多,高清视频终端播放器的设计和开发面临着越来越多的需求和挑战, 如:更小巧便携、更强的处理能力等。本文基于B型树莓派,搭建了基于其上的软件移植开发环境,利用其强大的GPU视频处理能力,开发移植了H264高清视频解码模块,成功实现了基于其上的720P和1080P高清视频播放器。

本文共分为三个部分:第一部分高清播放器系统分析与设计,介绍了树莓派的软硬件开发环境及其演进,及基于树莓派的高清视频播放器系统架构及设计;第二部分详叙了本系统高清音视频解码模块在树莓派环境中的移植;最后总结了本系统的性能测试数据。

1 高清播放器系统设计

1.1 树莓派硬件开发环境及演进

2012年英国树莓派基金会宣布树莓派平板电脑正式发布,第一代树莓派分为A型和B型两款,二者硬件配置略有不同,主要体现在B型有512MB内存而A型有512MB内存。2015年2月,树莓派基金会宣布推出二代树莓派卡片电脑B型,在硬件配置上又进一步升级,比如CPU由700MHz的单核心升级到900MHz的四核心,内存由512MB升级到1GB以及支持更多的外设扩展接口等。

1.2 树莓派软件开发环境及演进

第一代树莓派基于Linux系统,典型的如Raspbian,ARCH Linux ARM等。随着树莓派社区的壮大, 树莓派已被越来越多的操作系统支持。据2015年2月报告显示,Windows 10 和 Android平台已证实支持树莓派,其它典型的如FreeBSD,WebOS,Debian Linux等操作系统均已支持树莓派。完整的支持树莓派的操作系统列表参见[3]。

树莓派基于ARM系列CPU系统,应用软件可移植环境强,GNU/Linux工具链已经较好的支持树莓派系统软件开发移植。成熟的支持树莓派开发的编程语言有:C及C++,Python,Java,Golang等语言。典型的集成开发环境有KDevelop, Bluej IDE, Eclipse及Visual Studio等。

基于树莓派的高清视频播放器软件开发环境如下:

1)操作系统: Raspbian OS

2)编译及调试器: GCC, G++及GDB

3)集成开发环境: Eclipse IDE for C/C++

1.3 树莓派高清视频播放器系统设计

基于树莓派的高清视频播放器系统主要设计为三个模块: 高清音视频数据输入模块, 音视频数据解码模块及音视频输出渲染模块。系统架构逻辑模块设计如图1所示。

音视频数据输入模块(I)-典型的音视频数据支持H264编码视频数据及FAAC编码音频数据, 数据封装格式支持mp4及MPEG Transport Stream (TS)格式[4];数据源读取可支持本地MP4封装格式,及支持从网络端读取TS封装格式;输入模块(I)与OMXPlayer播放器模块(P)间采用生产者-消费者模型,设计并发队列Queue(Q)作为二者之间数据通信模型;视频解码模块(V)与音频解码模块(A)为消费者。功能上数据输入模块解封装音视频数据包,并标记时间戳T,后分别放入并发队列Q。

OMXPlayer播放器模块(P)-基于开源OMXPlayer模型移植,分别采用基于FFmpeg向树莓派移植的高清视频解码模块(V)和基于FAAC向树莓派移植的音频解码模块(A)。功能上播放器模块读取并发队列音视频数据,分别解码后输出给音视频输出模块(O)。

音视频输出模块(O)-基于输入模块标记时间戳T,向HDMI接口写输出音视频数据。

关键技术音视频同步算法-基于以上模块设计,以下算法被设计为解决数据输出时音视频同步问题,经过此算法处理的音视频数据为时间同步数据,作为音视频解码模块和输出模块的输入实现音视频同步。

音视频同步算法:

Step 1:(I)模块读取ts时长TS或MP4封装数据,去除头部封装信息并获取视频帧率F

Step 2:获取当期系统时间T

线程1: 处理音频数据

Step 3:将当前ts时长音频数据标签为时间T,并将数据放入Q

线程2: 处理视频数据

Step 4: 记录当前系统时间t1

Step 5: 读取ts/F时长视频帧,标签为时间T,并将数据放入Q

Step 6:记录当前系统时间t2 及 时间消耗 SumT= t2-t1

Step 7:IF SumT>=ts转到Step1

否则转到Step4

2 高清音视频解码模块移植

基于开源OMXPlayer播放器模型,基于树莓派的高清视频播放器移植了音、视频解码模块到树莓派系统中,此移植关键在于充分利用树莓派GPU多媒体处理指令及技术。

2.1 H.264视频解码模块移植

H.264/MPEG-4 AVC[5]是一种面向块的基于运动补偿的编解码器标准。由ITU-T视频编码专家组与ISO/IEC联合工作组开发,它也被广泛用于网络流媒体数据,网络软件以及各种高清晰度电视陆地广播系统中。

高清视频解码模块基于开源标准库FFmpeg及X264库移植,面向树莓派的移植主要解决了FFmpeg及X264程序库在树莓派ARM平台的编译链接问题, 其关键语法如下:

2.2 ACC音频解码模块移植

高级音频编码AAC(Advanced Audio Coding)基于MPEG-2的音频编码技术是一种取代MP3的高压缩比的音频压缩算法。AAC压缩比通常为18:1,远胜mp3;在音质方面,由于采用多声道,更高的采样率和采样精度,以及使用低复杂性的描述方式,使其比几乎所有的传统编码方式在同规格的情况下更胜一筹。

AAC音频解码模块基于FAAC开源音频解码标准库向树莓派移植。移植过程分为两步,第一步需先交叉编译FAAC库;第二部需再次交叉编译FFmpeg,同时激活X264及FAAC模块。其关键语法如下:

3 总结

3.1 系统测试性能参数

将B型树莓派,连接显示器、键盘,鼠标,移动硬盘等外部设备,然后在树莓派上运行编译后的高清视频播放器OMXPlayer,设计实现的高清视频播放器用户接口如下:

经测试,基于树莓派的高清视频播放器,性能良好,具有以下测试参数。

3.2 结束语

本文设计并实现了基于树莓派实现的高清视频播放器,该原型系统经测试,性能卓越,体积小,可携带性强。本系统中运用的设计方案和基于树莓派的软硬件开发经验为进一步研究基于树莓派的其他应用具有一定的实践参考意义。

【参考文献】

[1]李明,译.Linux+树莓派玩转智能家居(第2版)[M].北京:人民邮电出版社,2014,6.

[2]Peter Membrey David Hows.树莓派学习指南-(基于Linux)[M].北京:人民邮电出版社,2014,4.

[3]Brendan Horan. RaspberryPi树莓派实作应用[M].北京:人民邮电出版社,2014,5.

[4]董杰,辛吉涛,连捷.基于Android系统的H.264视频直播技术研究.电视技术,2015(2).

[5]蔡丽艳.基于H.264嵌入式网络视频监控系统的研究与实现[M].南京邮电大学,2013.

[责任编辑:邓丽丽]

猜你喜欢
树莓派物联网
智能安全防盗探测小车
基于LABVIEW的温室管理系统的研究与设计
论智能油田的发展趋势及必要性
中国或成“物联网”领军者
基于嵌入式技术的农村医疗系统设计