当前位置:文档之家› 基于Qt+ffmpeg的跨平台安卓实时投屏软件的开发与设计

基于Qt+ffmpeg的跨平台安卓实时投屏软件的开发与设计

基于Qt+ffmpeg的跨平台安卓实时投屏软件的开发与设计
基于Qt+ffmpeg的跨平台安卓实时投屏软件的开发与设计

一种高分辨率实时屏幕共享硬件加速系统

摘要:建立一个支持超高分辨率(如4k)的交互式屏幕共享系统具有挑战性,因为延迟和帧速率在用户体验中扮演着重要角色。屏幕帧需要有效地压缩,而不需要消耗大量的计算资源。提出了一种实时屏幕共享的硬件加速系统,该系统通过利用连续屏幕帧间的内容冗余来减少编码工作量。提出了一种采用不同输入大小的H.264高级视频编码(H.264/AVC)的多个编码器,通过为更新的屏幕内容选择合适的编码方式,节省了编码时间。提出了一种优化的元数据处理方法。帧内的小而远的更新可以分割成独立的帧,以便进行更有效的压缩,这也有利于交互延迟。在评估中,在一般的屏幕共享场景中,该系统比一般的单个编解码器的编码时间更短。对延迟的测量表明,4K分辨率屏幕共享的端到端延迟仅为17-25ms,这使得该系统适合于本地有线和无线连接中的各种应用。

关键词:4K分辨率,硬件-加速编码,低延迟屏幕共享

目录

第1章绪论 (1)

1.1研究背景和意义 (1)

1.1.1 系统的开发背景分析 (1)

1.1.2 本课题的研究意义 (1)

1.2 国内外的研究 (2)

1.2.1 国内研究 (2)

1.2.2 国外研究 (2)

1.3课题研究方法和内容 (2)

1.3.1 研究方法和关键技术 (2)

第2章开发工具及安装 (4)

2.1 Qt (4)

2.1.1 Qt简介 (4)

2.1.2 Qt的安装 (4)

2.2 Visual Studio 2017 (6)

2.2.1 Visual Studio 2017的安装和环境配置 (6)

第3章系统功能需求 (10)

3.1 系统总体功能需求 (10)

3.2 系统总体功能描述 (10)

3.2.1.实时显示Android设备屏幕 (10)

3.2.2实时键鼠控制Android设备 (11)

3.2.3屏幕录制 (11)

3.2.4无线连接 (11)

3.2.5全屏显示 (11)

3.2.6常用功能按键 (11)

3.2.7传输文件/apk (11)

3.2.8后台录制 (11)

3.2.9复制粘贴 (12)

3.2.10在计算机和设备之间双向同步剪贴板 (12)

3.3 用户子系统的功能需求 (12)

第4章系统设计 (13)

4.1 系统总体设计 (13)

第5章 UML建模 (14)

5.1 用例图 (14)

5.1.1 用户用例图 (14)

5.2 用例规约表 (14)

5.2.1 启动服务用例规约表 (14)

5.2.2 相关配置用例规约表 (15)

5.2.3 无线连接用例规约表 (16)

5.3 类图 (18)

5.3.1 系统实现类图 (18)

5.4 顺序图 (19)

5.4.1 启动服务顺序图 (19)

5.4.3 无线连接顺序类图 (20)

5.5 状态图 (21)

5.5.1 用户状态图 (21)

5.6 活动图 (22)

5.6.1 用户连接活动图 (22)

5.7 组件图 (23)

5.8 部署图 (23)

第6章系统实现思路 (24)

6.1 adb reverse实现思路 (24)

6.2 server实现思路 (25)

6.3 解码器实现思路 (26)

6.4 渲染器实现思路 (27)

6.5 输入输出实现思路 (28)

第1章绪论

1.1研究背景和意义

1.1.1系统的开发背景分析

随着智能技术的渗透与迭代发展,小屏幕的画面逐渐满足不了人们的大屏幕的需求,于是各种大屏幕的智能设备应运而生。手机在人们的日常活中很常见,但是屏幕却是一个问题,屏幕太大,则不利于携带;屏幕过小,则不满足人们对于大屏幕手机的需求,所以很多商家看到了商机,BAT巨头纷纷打造硬件产品--投屏应用,以进入该市场抢占商机,投屏应用逐渐成为家庭场景下的流行应用。

微软(Microsoft)最早提出了「三端一云」概念,其主要问题是在各个屏幕间的互动连接,是许多用户曾渴望的功能,但却很少看到有良好的解抉方案。很多商家一直为这个问题尽心竭力地找解决办法,但是都原地踏步、踟蹰不前。所幸的是,无线区域网路联盟(Wi-Fi Alliance)注意到上述需求,因此对于家庭及企业在屏幕间互动的应用,提出以无线方式进行屏幕共享的技术Miracast。1

1.1.2 本课题的研究意义

本课题主要研究和开发移动设备的各个屏幕间的互动连接,让小型屏幕的移动设备可以将屏幕实时投屏到大屏幕的移动设备上,从而实现屏幕共享。

随着现代科技的快速发展,从最原始的触屏板砖手机到现在的智能手机,从最原始的小屏手机到现在各种各样的大屏手机,经过一代又一代的更新换代以及技术升级,经过一些人的不懈努力,我们终于成功地实现了手机投屏这一项技术,我们可以通过手机投屏技术将我们的手机连接到咱们电脑上,然后咱们可以看到咱们的电脑屏幕上会出现手机画面。

1.2 国内外的研究

1.2.1 国内研究

在国内,我们可以在《2019投屏行业市场研究报告》上明确知道消费类投屏应用经历了创业期(2012-2015年秋季)、快速成长期(2015年秋季-2017年底)、裂变期(2018年)和转折期(目前)这四个阶段。其中,我们可以认为2019年是投屏的转折期,原因有两个:一方面,中国移动家庭宽带与视频用户日渐庞大,并展现赶超过中国电信的势头;另一方面,智能手机的快速发展也逐渐加快手机投屏技术的研究。在此背景下,中国移动在年初发布了和家投屏产品,很受广大人们的青睐;这正式表明了运营商在投屏领域的积极参与姿态。同时,腾讯作为BAT后来者,也发布了“极光快投”正式进入投屏硬件产品市场这一消息。

更值得一提的是,华为发布的“智慧屏”将跨屏体验升级为智慧家庭下的常态应用,也就是说,投屏将进入广大人们的日常生活。此外,投屏针对用户端的商业模式也在加速推进中。2

1.2.2 国外研究

相对地,在国外,在投屏这方面最具有代表意义的是苹果(iPhone)的AirPlay 镜像,它可以无线投屏,而无线投屏是有线投屏的升级。近一些年来,iPhone公司再次技术创新,如今的iOS设备中已经自带投屏技术--AirPlay(苹果公司制定的无线通讯技术),该技术可以直接将iPhone、iPad中的图像数据传输到电脑/电视。

1.3课题研究方法和内容

1.3.1 研究方法和关键技术

以下是系统主要使用的研究方法和关键技术:

“安卓实时投屏软件”实时同屏的核心技术在于adb reverse搭建的反向代理。2

软件的开发采用C++ 语言作为软件设计的基础语言,该软件的实现采用qt的相关技术实战,如多线程,多进程,自定义事件,qss自定义界面,网络编程和键盘鼠标事件处理;音视频相关技术有音视频基础知识,OpenGL基础,OpenGL渲染yuv,ffmpeg 解码h264为yuv。

第2章开发工具及安装

2.1 Qt

2.1.1 Qt简介

Qt是一个跨平台C++图形用户界面应用程序开发框架。Qt设计界面具有独特的优势,它不需要编写代码,只需要用它本身提供的插件,像绘图一样地将界面设计好,界面设计简单而高效。另外,你如果编写好了你的项目程序,你可以在Windows平台下编译、运行,也可以在Unix/Linux平台下编译、运行,还可以在MacOS平台下编译、运行,这得归功于它的跨平台性。说到Qt,首先得学习它的核心--qt的信号与槽机制,这是使用Qt编写程序是否成功的关键。

2.1.2 Qt的安装

对于我的毕业项目,我选择的是Qt5.12.0版本来编译,当然了,选择什么样的版本来编写程序看个人的喜好。首先,我们要安装Qt,它的安装过程很简单,可以在网上搜索很多的教程。要安装Qt,我们先要下载Q,我们可以在官网上(http://download.qt.io/archive/qt/5.12/5.12.0/)下载Qt5.12.0,选择

我们双击.exe文件,选择构建版本,如图2-1所示,

图2-1 Qt版本勾选图

其次,我们还要安装好了VS2017,在Qt的构建套件里,我们可以看到相关的编译器、调试器就会自动识别了,如图2-2所示。注意:安装VS2017一定要勾选win10 SDK项,否则关的编译器、调试器就不会自动识别了,编译、运行项目程序则会出现错误。

图2-2 构建套件

我们在E/Qt5.12.0(个人安置qt的路径)找到并点击MaintenanceTool.exe,勾选如图2-3所示。因为我安装了Qt5.12.0,重新演示安装过程,会卸载原先已经配置好的环境,所以避免麻烦,如何选择安装 Qt 所需要的组件,在

(https://https://www.doczj.com/doc/541734093.html,/weixin_42046850/article/details/88970049?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_rele vant.none-task)可以按里面的步骤来进行安装,里面有详细的安装过程和qt的环境变量配置。

图2-3 Qt安装

2.2 Visual Studio 2017

2.2.1 Visual Studio 2017的安装和环境配置

首先,我们要安装VS2017,可以在(https://www.doczj.com/doc/541734093.html,/view/456.html)上下载,里面有详细的安装过程和环境配置。

我们打开安装好了的VS2017,选择:工具->扩展和更新->联机->搜索qt->Qt Visual Studio Tools->下载,如图2-4和图2-5所示:

图2-4 VS2017的扩展和更新

图2-5 Qt Visual Studio Tools

我们重启一下VS2017,如果安装正确的话,我们可以看到在VS2017的菜单栏中会多出一个菜单:Qt Vs Tools,如图2-6所示:

图2-6 Qt Vs Tools效果图

我们点击“Open Qt Project File”,即pro文件,即可导入相关的项目文件,如果导入成功,会出现选项3。如果你是第一次导入,环境需要设置Qt工作目录,在图2-7上点击选项4,会出现图2-8所示:

图2-8 VS2017的qt环境配置

对于选项6的Version name,我们命名为msvc2017_64 ;Path项会按照 Qt的安装路径来选择,即:D:\Qt\Qt5.5.1\5.5\msvc2017,下一步点击确定,会出现选项12和13,如图2-2-1-4所示。然后我们可以按F7键来编译一下程序,然后运行程序,我们就会看到一个Qt新窗口,至此,关于VS2017+Qt5.12.0的环境配置已经完成了。

第3章系统功能需求

3.1 系统总体功能需求

所需的功能:1)实时显示Android设备屏幕;2)实时键鼠控制Android设备;3)屏幕录制;4)无线连接;5)全屏显示;6)常用功能按键(home,back,锁屏,后台应用,点亮屏幕,调节音量等);7)传输文件/apk:拖拽文件/apk到视频窗口便可以发送文件到Android设备;8)后台录制:只录制,不出现录制界面;9)复制粘贴;10)在计算机和安卓设备之间双向同步剪贴板:

o Ctrl + c将设备剪贴板复制到计算机剪贴板;

o Ctrl + Shift + v将计算机剪贴板复制到设备剪贴板;

o Ctrl + v 将计算机剪贴板作为一系列文本事件发送到设备(不支持非ASCII字符)。

3.2 系统总体功能描述

3.2.1.实时显示Android设备屏幕

1)将Android设备屏幕实时显示在电脑屏幕上,在电脑屏幕上进行外围设备操作,例如:移动鼠标或点击键盘上的“#”键,会实时反馈到Android设备屏幕;在Android设备屏幕上进行手指触摸滑动屏幕或者点击打开某个APP的操作,会同步地显示在电脑屏幕上。

2)在游戏映射的模式下,鼠标的移动不会超出游戏的画面,也就是说在该模式下的鼠标有移动范围。

3.2.2实时键鼠控制Android设备

1)在用外围设备进行输入输出时,Android设备会同时进行相应的操作,例如用鼠标点击打开Android设备上的记事本,用键盘随便敲写一句话,相应地,Android设备会间接地进行相应的操作(手指点击事件);用鼠标随意的拖动Android设备上的APP,Android设备也会间接地进行相应的操作(手指触摸和手指滑动事件)。

2)在游戏映射的模式下,利用鼠标键盘完成在Android设备上(手机)游戏“和平精英”的相应操作,例如:键盘上的A、S、D、W键对应该游戏上的方向盘,鼠标左键对应该游戏上的开火键和M键查看该游戏的地图等等。

3.2.3屏幕录制

1)可以录制视频并且可以选择路径保存在电脑里。

3.2.4无线连接

1)局域网连接,不需要USB线。

3.2.5全屏显示

3.2.6常用功能按键

1)(home,back,锁屏,后台应用,点亮屏幕,调节音量等)

3.2.7传输文件/apk

1)拖拽文件到视频窗口即可发送文件/apk到Android设备

3.2.8后台录制

1)只录制,不显示界面,在后台进行

3.2.9复制粘贴

3.2.10在计算机和设备之间双向同步剪贴板

o Ctrl + c将设备剪贴板复制到计算机剪贴板;

o Ctrl + Shift + v将计算机剪贴板复制到设备剪贴板;

o Ctrl + v 将计算机剪贴板作为一系列文本事件发送到设备(不支持非ASCII字符)。

3.3 用户子系统的功能需求

1)启动服务:在刷新设备列表后用户在启动该系统后,第一步就是点击“刷新设备列表”,用于获取设备序列号、设备ip和设备端口号,用户点击“启动服务”,PC端则会实时显示Android设备的屏幕。

2)相关配置:用户可以设置比特率、后台录制、录像保存路径、视频尺寸和视频录制格式。

3)无线连接:在配置完成后获取设备ip;当用户点击“获取设备ip”时,在该复选框里显示该设备ip、设备端口号,用户点击“启动adbd”,点击“无线连接”,系统利用局域网连接设备序列号、设备ip和设备端口号,点击“启动服务”,PC端则会实时显示Android设备的屏幕。

第4章系统设计

4.1 系统总体设计

整个系统分为8个模块:视频采集模块、client模块、安卓模拟点击模块、adb reverse模块、server模块、解码器模块、渲染器模块、输入输出模块。由于Android设备自带有视频采集模块、client模块、安卓模拟点击模块这三个模块,所以不用为这三个模块编写代码,只需调用Android的API即可。

图4-1 系统总体设计

由上图可知,该系统主要由PC端的QtScrcpy和Android的scrcpy-server组成,分为两个流程:视频显示流程和模拟点击流程

视频显示流程:Android的scrcpy-server的视频采集模块会实时采集Android 屏幕,然后编码为h264,通过Android端的Client socket,借助于adb reverse 搭建的反向代理,发送视频流到PC端的Server socket,然后PC端的解码器模块(ffmpeg)将h264的视频解码为yuv,然后传送到渲染器模块(opengl),然后由其负责将视频显示到PC端的屏幕上。

模拟点击流程:在PC端,由Qt的QMouseEvent(鼠标事件)和QKeyEvent(键盘事件)负责将用户的鼠标键盘输入(即输入控制)转换为控制指令,然后由PC端的Server socket,借助于adb reverse搭建的反向代理,发送控制指令到Android 端的Client socket,然后Client socket将控制指令传送到安卓模拟点击模块,从而实现实时模拟点击的功能

第5章UML建模

5.1 用例图

5.1.1 用户用例图

用例模型的基本组成部分有用例、角色(或参与者)和系统。用户用例图如图5-1-1所示。

用户

图5-1 用户用例图

5.2 用例规约表

5.2.1 启动服务用例规约表

5.2.2 相关配置用例规约表

表5-2相关配置用例规约表

5.2.3 无线连接用例规约表

表5-3 无线连接用例规约表

相关主题
文本预览
相关文档 最新文档