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

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

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

A Hardware-Accelerated System for High Resolution Real-Time Screen Sharing

Abstract:Establishing an interactive screen sharing system that supports ultra high resolution (such as 4k) is challenging, with latency and frame rate playing important roles in user experience. The screen frame needs to be compressed efficiently without consuming extensive computational resources. We present a hardware-accelerated system for real-time screen sharing, which decreases encoding workload by exploiting content redundancies between successive screen frames. We propose a multiple codec approach that utilizes several encoders with H.264 Advanced Video Coding (H.264/AVC) of different input sizes, creating savings in encoding time by selecting the appropriate one for updated screen content. An optimized metadata processing method is proposed as well. Small but distant updates within a frame can be split into independent frames for more efficient compression, which is also beneficial for interactive latency. In the evaluation, the proposed system takes less encoding time than general single codec implementation in common screen sharing scenarios. Measurement for latency shows that the end-to-end latency for 4K resolution screen sharing is only about 17-25 ms, which makes the proposed system suitable for various applications in local wired and wireless connections.
Keywords:Screen content sharing,4K resolution,hardware-accelerated encoding, low-latency screen sharing

目 录

第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
参考文献 29
致谢 31

第1章 绪 论

1.1研究背景和意义
1.1.1系统的开发背景分析
随着智能技术的渗透与迭代发展,小屏幕的画面逐渐满足不了人们的大屏幕的需求,于是各种大屏幕的智能设备应运而生。手机在人们的日常活中很常见,但是屏幕却是一个问题,屏幕太大,则不利于携带;屏幕过小,则不满足人们对于大屏幕手机的需求,所以很多商家看到了商机,BAT巨头纷纷打造硬件产品–投屏应用,以进入该市场抢占商机,投屏应用逐渐成为家庭场景下的流行应用。 微软(Microsoft)最早提出了「三端一云」概念,其主要问题是在各个屏幕间的互动连接,是许多用户曾渴望的功能,但却很少看到有良好的解抉方案。很多商家一直为这个问题尽心竭力地找解决办法,但是都原地踏步、踟蹰不前。所幸的是,无线区域网路联盟(Wi-Fi Alliance)注意到上述需求,因此对于家庭及企业在屏幕间互动的应用,提出以无线方式进行屏幕共享的技术Miracast。[ 2019投屏行业市场研究报告[z].https://www.sohu.com/a/341369353_488163.2019/9/17]
1.1.2 本课题的研究意义
本课题主要研究和开发移动设备的各个屏幕间的互动连接,让小型屏幕的移动设备可以将屏幕实时投屏到大屏幕的移动设备上,从而实现屏幕共享。
随着现代科技的快速发展,从最原始的触屏板砖手机到现在的智能手机,从最原始的小屏手机到现在各种各样的大屏手机,经过一代又一代的更新换代以及技术升级,经过一些人的不懈努力,我们终于成功地实现了手机投屏这一项技术,我们可以通过手机投屏技术将我们的手机连接到咱们电脑上,然后咱们可以看到咱们的电脑屏幕上会出现手机画面。
1.2 国内外的研究
1.2.1 国内研究
在国内,我们可以在《2019投屏行业市场研究报告》上明确知道消费类投屏应用经历了创业期(2012-2015年秋季)、快速成长期(2015年秋季-2017年底)、裂变期(2018年)和转折期(目前)这四个阶段。其中,我们可以认为2019年是投屏的转折期,原因有两个:一方面,中国移动家庭宽带与视频用户日渐庞大,并展现赶超过中国电信的势头;另一方面,智能手机的快速发展也逐渐加快手机投屏技术的研究。在此背景下,中国移动在年初发布了和家投屏产品,很受广大人们的青睐;这正式表明了运营商在投屏领域的积极参与姿态。同时,腾讯作为BAT后来者,也发布了“极光快投”正式进入投屏硬件产品市场这一消息。
更值得一提的是,华为发布的“智慧屏”将跨屏体验升级为智慧家庭下的常态应用,也就是说,投屏将进入广大人们的日常生活。此外,投屏针对用户端的商业模式也在加速推进中。[ 2019投屏行业市场研究报告[z].https://www.sohu.com/a/341369353_488163.2019/9/17]
1.2.2 国外研究
相对地,在国外,在投屏这方面最具有代表意义的是苹果(iPhone)的AirPlay镜像,它可以无线投屏,而无线投屏是有线投屏的升级。近一些年来,iPhone公司再次技术创新,如今的iOS设备中已经自带投屏技术–AirPlay(苹果公司制定的无线通讯技术),该技术可以直接将iPhone、iPad中的图像数据传输到电脑/电视。
1.3课题研究方法和内容
1.3.1 研究方法和关键技术
以下是系统主要使用的研究方法和关键技术:
“安卓实时投屏软件”实时同屏的核心技术在于adb reverse搭建的反向代理。软件的开发采用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,选择qt-opensource-windows-x86-5.12.0.exe,安装过程如下:
我们双击.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://blog.csdn.net/weixin_42046850/article/details/88970049?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task)可以按里面的步骤来进行安装,里面有详细的安装过程和qt的环境变量配置。
在这里插入图片描述

图2-3 Qt安装
2.2 Visual Studio 2017
2.2.1 Visual Studio 2017的安装和环境配置
首先,我们要安装VS2017,可以在(http://c.biancheng.net/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)在计算机和安卓设备之间双向同步剪贴板:
oCtrl + c将设备剪贴板复制到计算机剪贴板;
oCtrl + Shift + v将计算机剪贴板复制到设备剪贴板;
oCtrl + 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在计算机和设备之间双向同步剪贴板
oCtrl + c将设备剪贴板复制到计算机剪贴板;
oCtrl + Shift + v将计算机剪贴板复制到设备剪贴板;
oCtrl + 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-1 启动服务用例规约表
用例编号 UC01 用例名称 启动服务
功能描述 用户如果想在PC端实现实时显示Android设备的屏幕,首先要将Android设备的设备序列号、设备ip和设备端口号刷新让系统验证,然后启动服务,PC端实时显示Android设备的屏幕。
执行者 用户
前置条件 安卓手机端在开发者选项中打开usb调试
后置条件 PC端实时显示Android设备的屏幕
涉众利益 用户
基本路径 1.用户先启动系统,在PC端的USB接口插入USB线,显示系统主界面,点击“刷新设备列表”按钮,然后设备信息在设备信息复选框内显示出来,系统自动获取adb路径;
2.用户点击“启动服务”按钮,PC机上的系统界面会出现启动界面,PC端实时显示Android设备的屏幕。
扩展 1.刷新设备列表不成功:USB线损坏或没插紧
2.启动服务不成功:USB线损坏或没插紧
字段列表 Android设备信息:设备序列号、设备ip和设备端口号
业务规则 1.设备序列号不能为空
2.设备序列号不能错误
3.设备ip不能为空
4.设备ip不能错误
5.设备端口号不能为空
6.设备端口号不能错误
备注 系统响应时间不能超过3秒
5.2.2 相关配置用例规约表
表5-2 相关配置用例规约表
用例编号 UC02 用例名称 相关配置
功能描述 在启动服务之前,用户可以进行设备相关配置,例如:用户可以设置比特率、后台录制、录像保存路径、视频尺寸和视频录制格式
执行者 用户
前置条件 用户成功启动系统
后置条件 PC端实时显示Android设备的屏幕
涉众利益 用户
基本路径 1.在启动服务之前,用户可以系统主界面进行设备相关配置
1.1用户可以设置比特率,如设置比特率为8000000;
1.2用户可以让该系统进行后台录制(只录制,不显示界面);
1.3用户可以选择录像保存路径,例如将录像保存到D盘;
1.4用户设置视频尺寸和视频录制格式,例如设置视频尺寸为1080*720,视频格式为MP4.
扩展 无
字段列表 1.设置比特率:2000000,6000000,8000000和10000000
2.视频尺寸:480,720,1080和native
3.视频录制格式:MP4
业务规则 无
备注 无

5.2.3 无线连接用例规约表
表5-3 无线连接用例规约表
用例编号 UC03 用例名称 无线连接
功能描述 用户可以用局域网将PC端和Android设备连接起来
执行者 用户
前置条件 保证PC端和Android设备在同一局域网内
后置条件 PC端实时显示Android设备的屏幕
涉众利益 用户
基本路径 1.在安卓手机上的找到开发者选项并打开usb调试
2.将安卓手机通过usb线连接到电脑
3.在系统主界面点击“刷新设备列表”,会看到有设备号更新出来
4.点击“获取设备IP”
5.点击“启动adbd”
6.点击“无线连接”
7.再次点击“刷新设备列表”,发现多出了一个IP地址开头的设备,选择这个设备
8.点击“启动服务”
扩展 无线连接异常
扩展点: 1.PC端和Android设备不在同一局域网
2.PC端没有联网
3.Android设备没有联网
字段列表 Android设备信息:设备序列号、设备ip和设备端口号
业务规则 1.设备序列号不能为空
2.设备序列号不能错误
3.设备ip不能为空
4.设备ip不能错误
5.设备端口号不能为空
6.设备端口号不能错误
备注 启动adbd以后不用再连着usb线了,以后连接断开都不再需要,除非安卓adbd停了需要重新启动

5.3 类图
5.3.1 系统实现类图
在这里插入图片描述

5-2 系统实现类图
5.4 顺序图
5.4.1 启动服务顺序图
在这里插入图片描述

图5-3 启动服务顺序图

说明:用户先启动系统,在PC端的USB接口插入USB线,显示系统主界面,点击“刷新设备列表”按钮,然后设备信息在设备信息复选框内显示出来,系统自动获取adb路径;用户点击“启动服务”按钮,出现启动界面,PC端实时显示Android设备的屏幕。若刷新或启动异常,则系统自动停止服务并且不会显示安卓屏幕。

5.4.2 相关配置顺序图
在这里插入图片描述

图5-4 相关配置顺序图

说明:在启动服务之前,用户可以系统主界面进行设备相关配置,用户可以设置比特率、后台录制、录像保存路径、视频尺寸和视频录制格式
5.4.3 无线连接顺序类图
在这里插入图片描述

图5-5 无线连接顺序图

说明:将安卓手机通过usb线连接到电脑上,在系统界面点击“刷新设备列表”,更新出来设备信息,然后点击“获取设备IP”,然后点击“启动adbd”,然后点击“无线连接”,再次点击“刷新设备列表”,此时会发现多出了一个IP地址并选择这个设备,最后点击“启动服务”,最后PC端显示安卓屏幕。若是启动异常,则系统会自动停止服务并且不会显示安卓屏幕。

5.5 状态图
5.5.1 用户状态图

在这里插入图片描述

图5-6 用户状态图

说明:当用户成功该系统,在该系统的主界面刷新设备列表,系统会根据设备序列号、设备ip和设备端口号来连接Android设备,其次用户可以设置相关配置,例如设置视频尺寸,然后启动服务以显示Android屏幕,最后退出该系统。
5.6 活动图
5.6.1 用户连接活动图
在这里插入图片描述

图5-7 用户连接活动图

说明:用户启动安卓实时投屏系统,系统进入该系统主界面,用户可以选择连接模式:USB线连接模式、无线连接模式。1)线连接模式:用户在该系统主界面点击“刷新设备列表”,系统根据刷新出来的设备序列号、设备ip和设备端口号来连接Andriod设备,之后用户可以选择“设置相关配置”,例如设置视频尺寸,最后启动服务,若启动成功,在PC端会“显示Android设备屏幕”,用户可以选择退出系统;若启动失败,系统自动“停止服务”并退出系统。 2)无线连接模式:系统通过usb连接安卓手机到电脑,在系统主界面点击“刷新设备列表”,更新出来设备信息,然后点击“获取设备IP”,然后点击“启动adbd”,然后点击“无线连接”,再次点击“刷新设备列表”,此时会发现多出了一个IP地址并选择这个设备,最后点击“启动服务”,最后PC端显示安卓屏幕。若是启动异常,则系统会自动停止服务并且不会显示安卓屏幕。
5.7 组件图
基本概念:组件图中主要包含三种元素,即组件、接口和关系。组件图可以使用包来进行组织,使用注解与约束来进行解释和限定。组件图在面向对象设计过程中起着非常重要的作用:它明确了系统设计,降低了沟通成本,而且按照面向对象方法进行设计的系统和子系统通常保证了低耦合度,提高了可重用性
在这里插入图片描述

图5-8 组件图
5.8 部署图
基本概念:是一种展示运行时进行处理的节点和在节点上存在的制品的配置的图。部署图它阐述了在实际应用中软件和它的运行环境的关系,并且描述了软件部署在硬件上的具体方式。部署图中的主要元素包括节点与节点之间的关联关系。此外,部署图中也可以使用注解和约束。

在这里插入图片描述

图5-9 组件图

第6章 系统实现思路

6.1 adb reverse实现思路
在这里插入图片描述

图6-1 adb reverse实现流程图

说明:启动该系统,在USB线或无线下,刷新设备列表,【adb reverse】会【启动adb】来【获取adb路径】和【获取设备的信息】,获取adb路径是为正常的启动并建立反向代理,获取设备的信息是为了知道设备序列号、设备ip和设备端口号,这样连接Andriod设备;当启动失败时,系统会【停止adb】、【移除adb】和【输出错误信息】;当想要退出该系统时(停止服务),【adb reverse】会自动【停止adb】并且【移除adb】。
6.2 server实现思路
在这里插入图片描述

图6-2 server实现流程图
说明:当【server】开始工作时,会有三种状态:启动服务成功、启动服务失败。当启动服务成功时,【server】会根据设备序列号、设备ip和设备端口号来【连接安卓设备】,接着会在PC端【显示安卓屏幕】,当停止服务时,【server】会断开与Andriod设备的连接;若启动服务失败,则会【输出错误信息】断开与Andriod设备的连接。

6.3 解码器实现思路
在这里插入图片描述

图6-3 解码器实现流程图

说明:【解码器】接收从【server】发送的视频数据,建立【临时缓冲区】,用于临时缓存视频数据,即【缓存h264的视频数据】,接着进行解码–>【解析数据包】,【解码器】将一段视频数据处理好,然后【申请解码缓冲区】,用于【缓存yuv解码数据】,将解码后的yuv数据【保存到AVPacket】中,最后发送给【渲染器】。

6.4 渲染器实现思路

在这里插入图片描述

图6-4 渲染器实现流程图

说明:【解码器】接收从ServerSocket发送的视频数据,建立【临时缓冲区】,用于临时缓存视频数据,即【缓存h264的视频数据】,接着进行解码–>【解析数据包】,【解码器】将一段视频数据处理好,然后【申请解码缓冲区】,用于【缓存yuv解码数据】,将解码后的yuv数据【保存到AVPacket】中,最后发送给渲染器。

6.5 输入输出实现思路
在这里插入图片描述

图6-5 输入输出实现流程图

说明:PC端和Andriod设备之间的互动体现在与【输入输出】的控制指令,【Event】包括【控制事件】、【定时器事件】、【文本事件】、【鼠标移动事件】、【鼠标点击事件】、【手指触摸事件】、【键盘事件】和【鼠标滑轮事件】,将这些普通事件封装转换成Qt鼠标键盘事件【QtEvent】,通过【QtEvent】去调用Android事件【AndroidMotionevent】。

参考文献

[1]安晓辉.Qt on Android.北京:电子工业出版社,2015.1-60.
[2]谭浩强.C++面向对象程序设计(第2版).北京:清华大学出版社,2014.60-121.
[3]董相志.Windows网络编程案例教程.北京:清华大学出版社,2014.25-65.
[4]约翰.克赛尼希 . OpenGL编程指南(原书第9版).北京:机械工业出版社,2013.1-70.
[5]刘歧,赵文杰.FFmpeg从入门到精通 .北京:机械工业出版社,2012.11-52.
[6]展晓凯,魏晓红.音视频开发进阶指南.北京:机械工业出版社,2011.1-72.
[7]何俊林.Android音视频开发.北京:电子工业出版社,2011.1-72
[8]霍亚飞.Qt Creator快速入门(第3版).北京:北京航空航天大学出版社,2011.1-32.
[9]Nicholas Sherriff (Nick). Learn Qt 5: use Qt, C++ and QML to build modern, responsive cross-platform desktop applications.Packt Publishing,2018.4-44.
[10]Frantisek Korbel.FFmpeg Basics 2012.CreateSpace Independent Publishing Platform ,2012.2-67.
[11]Lee Zhi Eng.Qt5 C++ GUI Programming Cookbook: Practical recipes for building cross-platform GUI applications, widgets, and animations with Qt 5.Packt publishing,2019.25-45.
[12]Jeong Seo,Jong Lee,Wei Park .Screen image presentation apparatus and method for mobile phone(2006).https://patents.glgoo.top/patent/US20070171192A1/en
[13]Markandeya, Sushil, Roy, Kaushik.SAP ABAP | | screen programming(2014) .https://booksc.xyz/book/37405470/3398f2
[14]Kenneth P.Hinckley,koji Yatani.Multi-screen object-hold and page-change gesture(2010).https://patents.glgoo.top/patent/US20110209089A1/en
[15] 刘堃.浅析多屏互动和屏幕镜像技术及其应用 (2014).https://www.doc88.com/p-2061216245451.html
[16]Kenneth P.Hinckley,koji Yatani.Multi-screen synchronous slide gesture(2010).https://patents.glgoo.top/patent/US8751970B2/en
[17]Yang, Siyu; Li, Bin; Song, You; Xu, Jizheng; Lu, Yan.A Hardware-Accelerated System for High Resolution Real-Time Screen Sharing(2019).https://www.zhangqiaokeyan.com/academic-journal-foreign_circuits-and-systems-video-technology-ieee-transactions_thesis/0204113116506.html
[18]Tan, Shizhe; Zhang, Fengyuan.A Study on Multi-Screen Sharing System Using H.264/AVC Encoder(2017).https://www.zhangqiaokeyan.com/academic-journal-foreign_international-arab-journal-information-technology_thesis/020411791453.html
[19]Igor Khalatian.One-click universal screen sharing(2006).https://patents.glgoo.top/patent/US7933955B2/en

致谢

首先感谢学校为作者提供了深造的机会,在四年的学习时间里,各位老师悉心教导,使作者学到了很多知识也学会了独立处理问题的本领。
在毕业设计过程中,作者的导师循循善诱的教导,在学习、工作和思想上都给予了作者莫大的帮助和鼓励,在此,对老师表示深深的感谢。老师深厚的学术造诣、严谨的治学态度和忘我的工作作风永远是我学习的榜样和追求的目标。
最后,衷心的感谢所有关心和帮助过作者的老师和朋友。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值