教你如何开发一个完败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快速开 ...
随机推荐
- CSDN怎么跳转到指定的位置
位置1 只需要给上面的链接和下面的id一致即可 位置1
- Java实现 LeetCode 535 TinyURL 的加密与解密(位运算加密)
535. TinyURL 的加密与解密 TinyURL是一种URL简化服务, 比如:当你输入一个URL https://leetcode.com/problems/design-tinyurl 时,它 ...
- Java实现蓝桥杯墓地雕塑
墓地雕塑 问题描述 在一个周长为10000的圆上等距分布着n个雕塑.现在又有m个新雕塑加入(位置可以随意放), 希望所有n+m个雕塑在圆周上均匀分布.这就需要移动其中一些原有的雕塑.要求n个雕塑移动的 ...
- Java实现凸包问题
1 问题描述 给定一个平面上n个点的集合,它的凸包就是包含所有这些点的最小凸多边形,求取满足此条件的所有点. 另外,形象生动的描述: (1)我们可以把这个问题看作如何用长度最短的栅栏把n头熟睡的老虎围 ...
- Java实现花朵数
一个N位的十进制正整数,如果它的每个位上的数字的N次方的和等于这个数本身,则称其为花朵数. 例如: 当N=3时,153就满足条件,因为 1^3 + 5^3 + 3^3 = 153,这样的数字也被称为水 ...
- Linux 独立服务管理
RPM包安装在默认位置 /etc/init.d/:启动脚本位置 /etc/sysconfig/:初始化环境配置文件位置 /etc/:配置文件位置 /etc/xinetd.conf/:xinetd配置文 ...
- MySQL死锁及解决方案
一.MySQL锁类型 1. MySQL常用存储引擎的锁机制 MyISAM和MEMORY采用表级锁(table-level locking) BDB采用页面锁(page-level locking)或表 ...
- python自学Day05(自学书籍python编程从入门到实践)
第6章 字典 6.1 一个简单的字典 先跟随书本创建一个简单的字典感受一下. alien_0 = {'color':'green','points':5} print(alien_0['color'] ...
- 宇宙第一IDE是谁?
更多精彩文章,尽在码农翻身 微服务把我坑了 如何降低程序员的工资? 程序员,你得选准跑路的时间! 两年,我学会了所有的编程语言! 一直CRUD,一直996,我烦透了,我要转型 字节码万岁! 上帝托梦给 ...
- jQuery中ajax 跳入error的原因总结
一个标准的jquery的ajax代码: $.ajax({ type: 'POST', url: 'getSecondClassification', data: {"sort2": ...