教你如何开发一个完败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快速开 ...
随机推荐
- Java实现 LeetCode 100 相同的树
100. 相同的树 给定两个二叉树,编写一个函数来检验它们是否相同. 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的. 示例 1: 输入: 1 1 / \ / \ 2 3 2 3 [ ...
- 第六届蓝桥杯JavaB组国(决)赛真题
解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.分机号 X老板脾气古怪,他们公司的电话分机号都是3位数,老板规定,所有号码必须是降序排列,且不能有重复的数位.比如: 751,520, ...
- 第七届蓝桥杯JavaA组省赛真题
解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1.煤球数量 煤球数目 有一堆煤球,堆成三角棱锥形.具体: 第一层放1个, 第二层3个(排列成三角形), 第三层6个(排列成三角形), 第 ...
- Dockerfile 解析
Dockerfile Dockerfile是用来构建Docker镜像的构建文件,是由一系列参数和命令构成的脚本. 构建的三个步骤:1.编写Dockerfile文件 2.docker build 3 ...
- Node.js躬行记(3)——命令行工具
一.自定义 创建一个空目录,然后通过npm init命令初始化package.json文件,并按提示输入相关信息或直接回车使用默认信息,生成的内容如下所示. { "name": & ...
- CSS3弹性布局内容对齐(justify-content)属性使用详解
内容对齐(justify-content)属性应用在弹性容器上,把弹性项沿着弹性容器的主轴线(main axis)对齐. 该操作发生在弹性长度以及自动边距被确定后. 它用来在存在剩余空间时如何加以分配 ...
- ios支付签名认证
一.解析json中参数的含义 private Long id; @ApiModelProperty(value = "创建时间") private Date gmtCreate; ...
- Say Something About Of Flash Android
Why am I need say something about of flash android? It's at my college life when I touch flash andro ...
- ASP.NET Core Blazor WebAssembly 之 .NET JavaScript互调
Blazor WebAssembly可以在浏览器上跑C#代码,但是很多时候显然还是需要跟JavaScript打交道.比如操作dom,当然跟angular.vue一样不提倡直接操作dom:比如浏览器的后 ...
- JS 姓氏,区域,消息组成的随机内容定时随机展示
var surname_g = "\u8D75\u94B1\u5B59\u674E\u5468\u5434\u90D1\u738B\u51AF\u9648\u891A\u536B\u848B ...