教你如何开发一个完败Miracast的投屏新功能
手机与电视,是陪伴在我们生活最常见,陪伴最长久的智能设备。迅猛发展的移动终端与通信技术,赋予了手机更广阔多元的应用生态,大屏电视则以大视野和震撼影音,弥补了手里方寸带来的视觉局限。而今,手机的延伸需求越来越突出,无线投屏也正逐渐成为观看移动终端内容的主流方式之一,并在影音娱乐、远程教育、在线办公等方面扮演不可或缺的角色。
通过接入华为终端分布式技术Cast+ Kit,可以实现以华为手机为中心,以Cast+镜像投屏、Cast+流媒体投屏为载体,完成从手机小屏到高清大屏的柔滑转换,为用户带来大屏观影、大屏阅读和游戏自带8倍镜的全新感受。
话不多说,我们直接进入一星期教你快速集成华为Cast+ Kit的实战演练环节。跟着下方攻略即可轻松完成开发。
首先,接口调用过程一图了解——

简单来说开发接入大致可以分为六个流程,首先需要进行变量声明并获取PlayerClient实例;然后在应用启动时,获取PlayerClient实例,启动服务,注册监听;三要进行投屏业务相关内容设置,包括投屏属性设置、鉴权模式信息设置和可被周边设备发现的相关设置;四则是设置投屏显示Surface,这里需要注意的是应用层面,要求保证投屏过程中不能录屏、截屏、录音,要求SurfaceView要设置FLAG_SECURE;最后的两步则是与投屏相关的内容,也就是启动投屏、暂停投屏和断开连接的的执行。
集成开发全攻略——
- 首先创建一个应用工程,在AndroidManifest中添加所需要的权限

- 在lib目录下添加SDK的aar文件,并在应用级的build.gradle里面加上SDK的依赖。

- 初始化相关服务和实例

注册回调函数:
在IeventListener的onEvent中,sink端(设备)会上报各种消息,包括初始化服务、收到对端设备发来的连接请求、鉴权成功等;onDisplayEvent是手机端的回调,displayinfo是手机侧的信息

- 在初始化成功后,构建大屏投屏能力。设置其显示分辨率、显示帧数、开启被发现、配置低时延策略等等。


- 移动端PIN码输入正确或密码输入正确或非首次非密码模式投屏,会上报EVENT_ID_CONNECT_REQ消息,该消息下会携带请求连接移动端设备的ProjectionDevice信息。

- 首次PIN码模式会上报EVENT_ID_PIN_CODE_SHOW消息,PIN码可从dislayinfo.getPinCode()获得。

- EVENT_ID_CONNECT_REQ消息后,顺序上报EVENT_ID_DEVICE_CONNECTED和EVENT_ID_PAUSED消息。PAUSED消息下大屏端可以设置Surface并开始播放投屏视频流,前提是必须保证Surface有效并且收到PAUSED后才开始投屏操作,以免因设备原因出现黑屏问题。


集成完成啦,我们来感受下黑科技华为Cast+增强投屏技术带来的新体验吧。
首先华为Cast+Kit采用系统级连接入口,操作简单,在下拉菜单中选择“无线投屏”,点击相应设备后就可以完成投屏。

那么投屏效果如何呢?在市面上整体无线投屏时延基本在200ms左右的环境下,华为Cast+Kit拥有多项自研技术,可实现50ms的投屏超低时,保障了大型手机游戏的手眼合一。

*数据来自华为实验室,不同网络环境下投屏时延存在差异
关于华为 Cast+Kit更多开发详情,包括业务介绍、开发指南、接入准备、SDK如何获取等,戳以下空降链接:
https://developer.华为.com/consumer/cn/cast-kit
往期链接:别让算法和数据结构拖你职业生涯的后腿
原作者:普拉斯
教你如何开发一个完败Miracast的投屏新功能的更多相关文章
- 基于.NetCore开发博客项目 StarBlog - (16) 一些新功能 (监控/统计/配置/初始化)
系列文章 基于.NetCore开发博客项目 StarBlog - (1) 为什么需要自己写一个博客? 基于.NetCore开发博客项目 StarBlog - (2) 环境准备和创建项目 基于.NetC ...
- 教你分分钟开发一个属于自己的python模块(一)——能够直接在浏览器打印的方法
曾经,用惯了python print命令的人,惊叹于python语法的精简:后来,用过了tornado.django等web开发框架,不得不佩服当初开发这些框架的人们.于是,我们开始使用它们的框架== ...
- 如何用HMS Nearby Service给自己的APP开发一个名片交换功能?
在工作和生活中,遇见新的同事或者合作伙伴,交换名片是一个常见的用户需求,纸质名片常忘带.易丢失,是客户的一个痛点.因此,市场上出现了很多交换电子名片的APP和小程序.那么,如何给自己的APP开发一 ...
- Android | 教你如何用代码开发一个拍照翻译小程序
引子 想必有很多小伙伴喜欢外出旅游,能去海外玩一圈那是更好不过了,旅游前大家一定会对吃.穿.住.行.游玩路线做各种攻略,然后满怀期待的出发- 想象中的旅游 出发前,想象中的旅游目的地可能有漂亮 ...
- 【转】开发一个这样的 APP 要多长时间?
作者:蒋国刚 www.cnblogs.com/guogangj/p/4676836.html 呵呵. 这是一个“如有雷同,纯属巧合”的故事,外加一些废话,大家请勿对号入座.开始了…… 我有些尴尬地拿着 ...
- 开发一个这样的 APP 要多长时间?
作者:蒋国刚 www.cnblogs.com/guogangj/p/4676836.html 这是一个“如有雷同,纯属巧合”的故事,外加一些废话,大家请勿对号入座.开始了…… 我有些尴尬地拿着水杯,正 ...
- Android开发笔记:安卓程序截屏方法
1,基于Android SDK的截屏方法 (1)主要就是利用SDK提供的View.getDrawingCache()方法.网上已经有很多的实例了.首先创建一个android project,然后进行L ...
- 手把手教你用Vue2+webpack+node开发一个H5 app
手把手教你用Vue2+webpack+node开发一个H5 app 前一篇vue2 + webpack + node 开发一个小demo说到了用vue的一些基本用法,这一篇就讲一个复杂一点的更完整的 ...
- 手把手教你使用FineUI开发一个b/s结构的取送货管理信息系统系列博文索引
近阶段接到一些b/s类型的软件项目,但是团队成员之前大部分没有这方面的开发经验,于是自己选择了一套目前网上比较容易上手的开发框架(FineUI),计划录制一套视频讲座,来讲解如何利用FineUI快速开 ...
随机推荐
- C#/WPF/WinForm/.NET程序代码实现软件程序开机自动启动的两种常用方法的示例与源码下载带详细注释-源码代码-注册表方式-启动目录快捷方式
C#/WPF/WinForm/.NET程序代码实现软件程序开机自动启动的两种常用方法的示例与源码下载带详细注释-源码代码-注册表方式-启动目录快捷方式 C#实现自动启动的方法-两种方法 源码下载地址: ...
- Java实现 LeetCode 521 最长特殊序列 Ⅰ(出题人:“就是喜欢看你们不敢相信那么简单,又不敢提交的样子。”)
521. 最长特殊序列 Ⅰ 给定两个字符串,你需要从这两个字符串中找出最长的特殊序列.最长特殊序列定义如下:该序列为某字符串独有的最长子序列(即不能是其他字符串的子序列). 子序列可以通过删去字符串中 ...
- Java实现 LeetCode 60 第k个排列
60. 第k个排列 给出集合 [1,2,3,-,n],其所有元素共有 n! 种排列. 按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下: "123" &q ...
- 第八届蓝桥杯JavaB组国(决)赛真题
解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.平方十位数 题目描述 由0~9这10个数字不重复.不遗漏,可以组成很多10位数字. 这其中也有很多恰好是平方数(是某个数的平方). 比 ...
- Java实现莱布尼兹问题
历史上有许多计算圆周率pai的公式,其中,格雷戈里和莱布尼茨发现了下面的公式: pai = 4*(1-1/3+1/5-1/7 -) 参见[图1.png] 这个公式简单而优美,但美中不足,它收敛的太慢了 ...
- Linux 文件特殊权限-SetGID
SUID只针对二进制可执行文件,而SGID可以针对二进制文件,这时它和SUID非常类似,命令执行在执行程序的时候,组身份变换为该文件的属组,最常见的locate命令,普通用户也可以搜索文件目录,它也可 ...
- 团体天梯赛L1-041.寻找250
对方不想和你说话,并向你扔了一串数…… 而你必须从这一串数字中找到“250”这个高大上的感人数字. 输入格式: 输入在一行中给出不知道多少个绝对值不超过1000的整数,其中保证至少存在一个“250”. ...
- Java基础(十一)
一.连接到服务器 telnet是一种用于网络编程的非常强大的测试工具,你可以在命令shell中输入telnet来启动它. 二.实现服务器 服务器循环体: 1.通过输入数据流从客户端接收一个命令. 2. ...
- iOS-自定义Model转场动画-仿酷我音乐播放器效果
周末,闲来无事,仿写了酷我音乐播放器效果: 效果图如下: 实现思路: 1.实现手势处理视图旋转 2.自定义Model动画: 1.手势是利用了一个UIPanGestureRecognizer手势: 注意 ...
- 使用 UniApp 实现小程序的微信登录
微信登录思路: 在main.js 中封装公共函数,用于判断用户是否登录 在main.js 中分定义全局变量,用于存储接口地址 如果没有登录.则跳转至登录页面 进入登录页面 通过 wx.login 获取 ...