Linux与Android系统有线同屏技术的实现研究
2019-09-10罗玉萍王振皆王莹
罗玉萍 王振皆 王莹
摘 要:在物联网与消费电子急速发展的过程中,越来越多的同屏器出现在我们的视野中。本文研究的是基于Linux系统的同屏器是如何通过USB数据线获取Android系统的视频流,从而实现同步播放的功能,并对其中涉及到的screenrecord截屏技术、ADB技术、libusb技术、alsa声卡技术、AOA技术进行探究。
关键词:消费电子;同屏器;视频流
中图分类号:TP316 文献标识码:A 文章编号:2096-4706(2019)15-0015-03
Research on the Implementation of Wired and Same Screen Technology in
Linux and Android Systems
LUO Yuping,WANG Zhenjie,WANG Ying
(Guangzhou Hangxin Aviation Technology Co.,Ltd.,Guangzhou 510663,China)
Abstract:In the rapid development of IoT and consumer electronics,more and more simultaneous screen appear in our field of vision. This paper studies how the simultaneous screen based on Linux system obtains the video stream of Android system through USB data cable,so as to realize the function of synchronous playback,and explores the screenrecord screenshot technology,ADB technology,libusb technology,alsa sound card technology and AOA technology involved in it.
Keywords:consumer electronics;simultaneous screen;video stream
0 引 言
近年来,随着智能手机的爆炸式增长,无线同屏技术也紧跟其后。目前基本上所有新版的Android手机系统都自有DLNA、Miracast同屏协议,苹果手机自有AirPlay协议。作为一项新一代的无线同屏技术,无疑对Wi-Fi的带宽和稳定性都有极大的要求,并且其成本较高,于是在市场的推动下,USB有线同屏技术应运而生,从而解决了无线同屏过程中存在的弊端。由于成本较低,操作简单,后续发展过程中有线同屏器也广受消费者的青睐。
1 基于Linux系统的有线同屏器介绍
1.1 USB有线同屏器的概念
同屏器就是把手机、平板和电脑上的图片、视频、音乐等推送到显示屏(电视机、投影仪等)上播放,实现小屏到大屏的一个过程。简单来说,同屏器就是手机、平板端投影到大屏幕的转换设备,相当于一块“放大镜”,无论在家庭、教育、会议上应用都是非常广泛的。在家里,只需要一根数据线,就可以将手机的内容分享到电视上,家人一起观看,其乐融融;在课堂上,老师可以将课件推送到大屏幕上,实现课件的分享,有效地提高上课效率;在会议上也一样,甚至可以投成多分屏,实现多个内容同时分享,简单方便。
1.2 USB有线同屏器的实现框架
USB同屏操作简单,即插即用,成本低、几乎实现零延时。USB有线同屏器实现同屏过程需以下设备:Android设备、USB设备、Linux设备(同屏器)、显示设备。Android设备与Linux设备通过USB数据线连接,最后输送到显示设备显示,如图1所示。其中,Android与Linux设备之间要解决视频流问题需要解决五大技术问题:screenrecord技术、ADB技术、libusb技术、alsa声卡驱动技术、AOA技术。
对于大部分开发者来说,之前都有属于自己的一套比较成熟的代码框架,然后再在其基础上添加所需模块,这样开发速度会极大地缩短。像这个同屏器,如果前期设备已经带有成熟USB开发模块,其他模块的添加和测试就会相对容易。
2 USB有线同屏器核心技术
2.1 screenrecord截屏技术
screenrecord是Android系统的一个shell命令,如何能让screenrecord在Linux系统上运行,是首先必须要解决的问题。这就需要在Ubuntu下对Android源码进行修改、编译及运行。这個工作量也不小,首先是要修改环境变量,编译工具链,让这个源码能正常通过。其实说到底,就是为了能够在Linux环境下使用screenrecord程序,以至达到录屏的效果。screenrecord可能会遇到有些设备可能无法直接录制,原因是分辨率太高,如果遇到此类问题,请试着指定较低的分辨率。虽然Android是开源的,但是对于Android系统不同品牌商都会对其定制一些内容,不是所有的都通用,这个就需要开发者去手动修改获取手机的分辨率。另外一个比较突出的问题就是录制视频的时候声音不会被录下来,这就是后面讲到的必须要用alsa-lib库将Android声音做传输。
2.2 ADB技术
ADB的全称是Android Debug Bridge,简单地来说,它是Android SDK中的一个工具。使用ADB可以直接操作管理Android模拟器或者真实的Andriod设备。ADB的主要功能有:(1)在Android设备上运行Shell(命令行);(2)管理模拟器或设备的端口映射;(3)在计算机和设备之间上传和下载文件;(4)将电脑上的本地apk软件安装至Android模拟器或设备上。
ADB在同屏器上的运行原理是同屏器端的adb server与手机端的守护进程adbd建立连接,然后同屏器端的adb client通过adb server转发命令,ADB接收命令后解析运行。
ADB是一个C/S架构的应用程序,由三部分组成:(1)运行在同屏器端的adb client;(2)运行在同屏器端的adb server;(3)运行在设备端的常驻进程adb demon。
对于开发者来说,一旦完成ADB程序在Linux的移植,就可以用命令去和手机端建立连接,监听手机端的数据。这个步骤就基本完成了。
2.3 libusb技术
libusb设计了一系列的外部API为应用程序所调用,通过这些API应用程序可以直接操作硬件。从libusb的源代码可以看出,这些API调用了内核的底层接口,和kernel driver中所用到的函数所实现的功能差不多,只是libusb更加接近USB规范,使得libusb的使用也比开发内核驱动相对容易的多。总的来说,使用libusb开发库可以很方便的与USB通信。在使用这个库之前需要做几件事情:(1)libusb的安装。在ubuntu中使用sudo apt-get isntall libusb*可以快速的安装,无论什么方法,最后能安装成功就行;(2)确定供应商ID和产品ID,通过这两个ID可以确定我们的USB设备使用lsusb命令查看,然后使用libusb-v查看具体信息,这两个ID经常要用到;(3)确定传输方式、输入端点、输出端点。
2.4 alsa声卡驱动技术
alsa是Linux下的一个声卡驱动,它是一个完全开放源代码的音频驱动程序集,除了像OSS那样提供了一组内核驱动程序模块之外,alsa还专门为简化应用程序的编写提供了相应的函数库,与OSS提供的基于ioctl的原始编程接口相比,alsa函数库使用起来要更加方便一些。
alsa的主要特性包括:高效地支持从消费类入门级声卡到专业级音频设备所有类型的音频接口,完全模块化的设计,支持对称多处理(SMP)和线程安全,对OSS的向后兼容,以及提供了用户空间的alsa-lib库来简化应用程序的开发。
对于一个应用程序开发者,或者嵌入式应用开发者来说,接触到主要是alsa-lib编译出来的库libasound。alsa在移植过程中难点是要结合自身设备的USB Audio Driver去修改,一旦完成,将会事半功倍。
2.5 AOA技术
在同屏器中Android与USB的通信方式是基于AOA协议实现的,这种方式也称为配件模式。此模式下,与Android终端通信的另一端设备称为Android配件。在USB通信中,Android终端充当USB从机,Android配件(即同屏器)充當USB主机。
在同屏器中运用到AOA协议的其一功能:音频是否支持从配件输出,即从Android设备输出到同屏器。所以开发者只需要根据协议内容去判断Android手机的声音是否支持从同屏器输出即可。
3 解决同步技术策略
3.1 同屏过程解决卡顿丢帧对策
当我们按着框架流程走的时候,我们会发现总会存在这样或者那样的问题,而这个同屏器在实现过程中,比较常见的问题是视频卡顿。而导致视频卡顿的原因大致有以下三种:(1)软件编码和压缩算法不先进;(2)硬件性能不够,导致无法快速处理数据流;(3)数据传输环境影响。
解决方案:(1)现在基本上都是用H.264协议进行编解码,使用H.264协议对编解码算法要求相对较高,对视频的损伤也较大。如果要追求流畅度,则势必要牺牲画质的清晰度,提高压缩比,从而导致传输数据量增大,引起卡顿。所以开发者必须清楚的计算,把清晰度保持在合理范围,而且也能保证流畅度;(2)硬件性能不够这个是硬性条件,一般在前期规划的时候就已经研究好了,出现这种情况的机会相对较小。其实硬件条件就是性能和成本之间的衡量;(3)数据传输环境的影响是最大的,也是比较主观的一方面。因使用的USB 2.0传输协议,传输速率基本上已经极高了,性能也稳定。对不同开发者来说,如何调整视频流的质量和速率,这是体现技术能力的关键一步,只有协调好才能达到最佳效果。
3.2 同屏过程缩短latency对策
同屏最佳效果就是要达到手机屏幕和输出的大屏幕实现零延时,这样消费者无论是观看影片或者是玩游戏,都能有最佳的体验。在所有硬件条件都满足的情况下,可尝试改善latency的方法有以下几种:(1)在不超限的情况下,提高CPU或者DDR的频率,即提高CPU处理能力;(2)试着降低分辨率,即减少要处理的数据量;(3)加大视频流的传输速率,缩短延时,比如设置的默认是3M/s,可以提高至6M/s试试。
当然,不是所有的方法都是一蹴而就的,而是需要开发者不断去尝试,找到一个最佳值。latency为500ms,当你在玩游戏的时候就会发现有些不同步了,一旦降到5ms,基本上无任何阻碍的感觉,顺畅无比。
4 结 论
本文是对基于Linux系统的USB有线同屏技术在Android设备运用的讲述,包括其功能展示,实现原理,流程框图,模块的组成,知识点的整合,重点难点及解决方法。虽然同屏器涉及到的技术点不是特别多,但是真正做到稳定性好、性能强大很难。同屏器目前的市场很大,很多项目管理者都是急匆匆的完成其功能,并没有对其进行深一步的优化,所以出现的问题也很多。希望管理者在部署、规划项目时,能多关注细节问题,从用户的角度出发,解决存在的问题,使用户的体验更好。
参考文献:
[1] 边海龙,贾少华.USB 2.0设备的设计与开发 [M].北京:人民邮电出版社,2004.
[2] 工业和信息化部人才交流中心,恩智浦(中国)管理有限公司.微控制器USB的信号和协议实现 [M].北京:电子工业出版社,2018.
[3] 张大伟.深入理解Android 卷Ⅲ [M].北京:机械工业出版社,2015.
作者简介:罗玉萍(1988.06-),女,汉族,广东湛江人,嵌入式软件工程师,工学学士,研究方向:信息工程。