作者:万合
距离HarmonyOS 2.0正式发布已然过去三个多月了,最新数据表示已有超过1亿台设备升级到了HarmonyOS操作系统。然而,针对广大的应用研发者而言,HarmonyOS似乎和Android无什么差异,更加多地亦便是做有些原有功能的适配或迁移。针对HarmonyOS最核心的技术亮点——分布式软总线,还不清楚怎样实现,更不清楚该怎样与自己的业务相结合。
在1688直播域供给侧,咱们始终在持续探索怎样加强商家开播能力、降低商家开播成本,当认识到分布式软总线的特性后,咱们发掘HarmonyOS的这些能力非常切合1688商家多设备开播诉求,于是咱们开发了这个结合分布式软总线的多设备开播方法。
本文我将结合业务场景从技术方向,分享下1688直播供给侧是怎样基于HarmonyOS的分布式软总线技术,实现多设备协同开播,助力1688商家降低开播成本、加强开播能力。
与一般的手机开播区别,咱们的方法触及到多设备多屏幕,实现除了录制主播以外,还能够连接额外的摄像头专门录制商品,大屏展示直播的数据和预览,协播与主播大屏互动等功能。先经过一段视频认识下咱们技术制品方法的实现效果,请点击下述链接查看视频:
1688 商家基于 HarmonyOS 的多屏协同直播技术方法
1、业务背景
1688是国内领先的B2B电商平台,咱们服务的客户重点包含工厂老板、淘宝卖家、实体店主、档口商家等。因为疫情引起线下实体生意的萎缩,越来越多的工厂、档口老板寻求线上直播带货转型,随着业务的发展,今年咱们亦孵化了专门面向商家侧的App——1688商家版,供给给商家更加专业的服务,包含直播、洽谈、 工作台等,本文的实践案例正是在1688商家版直播域场景。
1.1 痛点
区别于淘宝直播的主播很大都是商家请来的专业MCN团队,1688直播的主播大都数便是商家自己,她们对自己的货品如数家珍,但却对电商直播缺乏专业的开播能力和开播设备。怎样在1688商家投入有限资源的前提下,帮忙商家降低开播门槛、加强开播质量呢,经过线下走访商家,咱们发掘几个平常的开播关联的问题。
主播频繁走近摄像头展示商品细节
主播与协播单一设备互动
工厂环境简陋便携性困难
总结下,1688直播商家在开播设备方面重点存在以下三大痛点:
1. 直播缺乏特定功能设备 缺乏商品摄像头,当前摄像头距离商品远,主播必须频繁走近开播设备才可展示商品细节,影响直播观感;缺乏互动大屏,手机直播互动屏幕小,主播必须走近开播设备才可看清观众留言与观众互动,影响直播体验。
2. 直播设备之间难以协同 开播工具协同难,主播用到的录制设备、互动设备和协播运用的中控设备之间不互通操作困难;主播协播互动难,一般主播讲解商品、协播上品发券,因为双方的设备间缺乏互动只能口播沟通缺乏私密性。
3. 直播设备投入低能力差 开播设备投入低,1688的非常多主播本身是中小商家,直播投入追求性价比,开播设备参差不齐;开播设备便携差,在工厂车间等繁杂场景必须驻播和走播协同开播,设备难以便携,缺乏多机位开播能力。
1.2 状况
现有的设备是不是满足商家大屏多摄像头、设备间协同互动、便携低门槛的开播诉求呢?咱们先来对比下它们的特性:
开播设备选型对比: 手机开播,手机分别负责推流、互动,有必定的协同便携能力,然则存在屏幕小和摄像头不可配等问题;PC开播,具备可配置的摄像头和大屏,硬件成本不高,但设备大便携性差况且功能集中在一台设备缺乏互动性;直播一体机开播,专门为直播开播定制的设备有大屏功能强,然则硬件门槛较高况且硬件都是烧录没法定制。
综上,咱们期望供给给商家直播的开播工具必须具备多设备协同、大屏互动、连接线路少、硬件可配、高性价比,那样,有无同期满足这些优点的开播方法呢?
2、方法设计
当前咱们App已然有非常多主播是HarmonyOS用户,针对已然具备HarmonyOS设备的中小商家,咱们提出了基于分布式软总线的多设备协同开播方法。
2.1 方法概述
主播运用手机开播时,当遇到大屏设备,能够一键将直播能力流转到大屏设备上,此时候主播的手机呈现遥控器状态,大屏表示屏上分别展示实时数据看板、实时互动信息和主播讲解的采集画面。倘若场景中有商品摄像头,主播手机亦能够唤起商品摄像头,商品摄像头会将采集的音视频数据传输给大屏设备表示,最后由大屏设备完成合流推流。协播能够经过连接大屏设备,从而获取实时音视频流播放,实现与主播观众的协同互动。该方法重点有两大核心技术能力,分别是直播互动在跨设备上的迁移流转、音视频流在多设备上的协同传输。
2.2 方法特点
该方法同期具备以上开播工具的优点: 多设备间有效协同。专门录制主播讲解的摄像头,专门采集商品画面的摄像头,大屏设备展示主播讲解画面合并分发视频流,主播手机操控所有开播设备,协播手机播放视频流观看;大屏互动。大屏设备展示直播数据和互动信息,主播手机能够操控大屏互动,协播手机能够与主播、观众大屏互动;便携线路少。多设备间在同一局域网内完成无线连接;设备可配。录制主播和录制商品的摄像头可选配置,大屏互动设备可选配置;高性价比设备。主播、协播普通HarmonyOS手机,普通表示器外接HarmonyOS设备,摄像头按照清晰度需求可配。
3、技术实现
实现以上制品方法的核心技术能力是直播互动的迁移流转和音视频流的协同传输,这两个技术能力的底层都是基于HarmonyOS的分布式软总线在咱们项目上的拓展封装。接下来,我先简单介绍下分布式软总线。
分布式总线是华为鸿蒙提出的概念,它的灵感应该来自于计算机系统,在计算机系统里把CPU、输入、输出设备等之间传送信息的公共通路叫总线。而软总线是经过创立多设备间的虚拟通信连接,完成多设备间无理学线路连接的互联互通,从而低时延高带宽的设备间信息传输功能,使得各个设备之间能够经过无线的方式实现有效的数据传输。
从上面的架构图中,咱们能够看到分布式软总线封装了多种通讯协议,并且将设备的发掘、连接、传输统一封装成对外透明的接口,研发者只必须经过简单的调用就能够实现多设备间的互联互通,无需关心联通的细节。
咱们方法中的直播互动正是基于分布式软总线实现多设备迁移流转,音视频流亦是经过软总线通道实现跨设备的传输,下面给大众仔细介绍下这两个技术制品能力的实现。
3.1 直播互动的迁移流转
1 制品功能
直播互动在多设备上迁移流转重点三个功能: 直播实时数据迁移大屏;主播、协播互动迁移大屏;主播中台掌控操作大屏。
2 技术方法
主播端App改造原有Android项目,增多HarmonyOS Ability依赖,新增开播掌控的FA;大屏端App是原有App上新增了大屏的HAP,包含直播数据FA 、实时互动FA;协播端APP是亦原有Android项目新增与主播和买家互动的FA。
主播App首要发掘并连接周边大屏,而后将直播数据FA和实时互动FA,无缝流转迁移到大屏设备,主播App转至开播掌控FA,主播App经过中台掌控能够操作大屏和协播App,设备间的互动经过IDL通信实现。必须重视的是,以上三个设备的App都是基于原有项目改造新增的能力,三者为同一个App。
3 代码实现
咱们以主播端App唤起大屏端App同期自己转中台掌控为例:
1、在LiveControlAbility的进行流转设备注册; ContinuationRegisterManager continuationRegisterManager = getContinuationRegisterManager();
continuationRegisterManager.register(getBundleName(), null, callback, requestCallback);
2、在 ContinuationDeviceCallback连接设备回调成功后调用connectAbility唤起大屏PA ScreenServiceAbility并传递关联参数;private IContinuationDeviceCallback callback = newIContinuationDeviceCallback() {@Override
public void onDeviceConnectDone(String selectDeviceId, StringdeviceType) {
connectAa(selectDeviceId);
continuationRegisterManager.updateConnectStatus(abilityToken, selectDeviceId, DeviceConnectState.CONNECTED.getState(),null);
}
}
};3、在大屏ScreenServiceAbility的onConnect接收数据并拉起大屏FA ScreenPageAbility; public IRemoteObject onConnect(Intent intent) {
jumpScreen();
return new ScreenRemoteForController();
}4、ScreenRemoteForController继承自 HarmonyControllerInterfaceSkeletonScreen在OnConnect回调以后初始化,并且接收从主播App发送的指令如唤起其他设备,再经过EventHandler进行事件分发。
class ScreenRemoteForController extends HarmonyControllerInterfaceSkeleton {
ScreenRemoteForController() {
super("IScreenRemoteInterface");
}
@Override
public void sendCommand(String command) throws RemoteException {
MyApplication.getHandler().sendEvent(command);
}4 难点和限制
跨设备通信
HarmonyOS的设备当前通信方式只支持以IDL的方式,并且IDL是单向通信的,为了实现设备之间双向通信,咱们采取在IDL中的增多回调的办法,或采用创建两个双向IDL的方式实现设备间的双通。
Android与HarmonyOS混合兼容研发
当前咱们的所有功能都是在原有Android项目上进行的HarmonyOS增量研发,而后再进行混合打包。这儿的功能研发受限于还有非常多基本库尚未完成HarmonyOS的迁移适配、HarmonyOS和Android间的兼容与通信等。
3.2 音视频流的协同传输
1 制品功能
音视频流在跨设备上的协同传输重点四个功能: 主播音视频采集流转到大屏摄像头;唤起商品摄像头采集商品画面并流转大屏设备;大屏设备合并商品和主播画面播放并推流;音视频流传输到协播手机播放观看。
2 技术方法
主播App在连接大屏设备后将关闭音视频采集、预览功能;大屏App上新增录制预览能力和合流推流能力,同期必须增多编码将采集到的音视频流传输到协播App上;商品摄像头上增多采集音视频和传输到大屏设备的能力;协播App去掉之前从云端拉取流的方式,改为本地解码后播放音视频流。
主播App 在连接大屏设备后,会唤起大屏设备的摄像头录制音视频并表示预览,大屏设备起步后拉起商品摄像头,同期对采集的音视频流编码,将流传输到大屏设备上合流并推流,协播手机能够获取大屏音视频流播放。
3 代码实现
咱们以商品摄像头被唤起后采集音视频传输到大屏端为例:
1、当商品摄像头被唤起后,首要初始化SurfaceProvider,并在其surfaceCallback回调中连接后台ScreenServiceAbility服务,同期打开摄像头; protected SurfaceOps.Callback surfaceCallback = new SurfaceOps.Callback() {
@Override
public void surfaceCreated(SurfaceOps surfaceOps) {
previewSurface = surfaceOps.getSurface();
Intent intent = new Intent();
Operation operation = newIntent.OperationBuilder()
.withDeviceId("")
.withBundleName(mCameraAbility.getBundleName())
.withAbilityName("com.alibaba.screencamera.ScreenServiceAbility")
.build();
intent.setOperation(operation);
intent.setParam("client_role", "camera");
mCameraAbility.connectAbility(intent, mAbilityConnection);
openCamera();
}
};2、起步的后台服务ScreenServiceAbility在onConnect时将音视频数据进行传输; public IRemoteObject onConnect(Intent intent) {
return newScreenRemoteFoSlave() {@Override
public void onPcmReady(byte[] pcmData) throws RemoteException {
mControllerCallback.onPcmReady(pcmData);
}
@Override
public void onYuvData(int type, int length, int seq, byte[] cameraData) throws RemoteException {
mControllerCallback.onReturnData(type, length, seq, cameraData);
}
}return null;
}3、以商品摄像头采集的视频数据为例,将YUV数据格式编码后发送; mCodec.registerCodecListener(new Codec.ICodecListener() {
@Override
public void onReadBuffer(ByteBuffer byteBuffer, BufferInfo bufferInfo, int trackId) {
byte[] msg = new byte[bufferInfo.size];
byteBuffer.clear();
byteBuffer.get(msg);
sendEncodedDataToRemote(msg, bufferInfo);
}
}
);
mCodec.setCodecFormat(fmt);
mCodec.start();4、将转化后的YUV视频帧数据先做切片而后经过ScreenService后台服务进行发送; private void sendEncodedDataToRemote(byte[] data, BufferInfo bufferInfo) {
byte[] msgTemp = new byte[bufferInfo.size];
System.arraycopy(data, position, msgTemp,0, msgTemp.length);
mScreenServiceProxy.onYuvData(CameraUtil.IRemoteMsg.MSG_TYPE_SLICE_END, bufferInfo.size, 0, data);
}5、大屏设备收到商品摄像头发送的音视频数据进行解码后播放。 private ControllerCallbackStub mControllerCallback = new ControllerCallbackStub("com.alibaba.cameraohos.IControlFaCallback") {
@Override
public void onPcmReady(byte[] pcmData) throws RemoteException {
mPlayRecord.playTransData(pcmData);
}
@Override
public void onReturnData(int type, int length, int seq, byte[] cameraData) throws RemoteException {
createMyDecoder();
initMuxer();
}
};4 难点和限制
音视频流本地编解码传输
有别于传统的本地编码推流,本方法里面设备间音视频流都是在局域网内传输,因为分布式软总线的带宽有限,而视频数据很强,咱们采用对本地视频流YUV数据进行编解码,经过切片合流的方式,达到了720P的视频流传输。
多设备的组网
HarmonyOS的设备组网必须基于前提要求,包含同一WiFi、开启蓝牙、暂时只支持登录相同华为账号,之因此条件苛刻的原由我想重点还是安全性思虑,不外在咱们这个场景中,设备都是服务于同一个直播账号,登录相同的华为账号再进行开播场景亦恰当。
4、总结和展望
4.1 总结
咱们的方法具备以下三个特点: 软件方法处理硬件限制。利用HarmonyOS分布式软总线技术,采用软件方法打破1688直播场景的硬件限制,将应用功能打散到最匹配的硬件设备上,实现硬件资源的互助互补结合场景拓展开播能力。结合1688商家直播的场景特点,基于HarmonyOS的分布式软总线的特性,处理直播互动、音视频传输的无缝流转,实现大屏互动、多设备开播功能低本有效处理商家痛点。在基本不改变原有1688开播功能的基本上,软件层面实现同一个应用在多设备上区别能力表达,硬件层面可按照商家实力选取合适设备,研发成本低,商家投入少
分布式软总线是HarmonyOS操作系统独有的能力,当前方法最大的缺点便是没法在其他操作系统的手机上实现,因此仅有HarmonyOS的用户才具备这个能力。将来咱们会探索在Android和iOS上实现类似的功能,同期亦期盼咱们在电商直播的多设备协同开播的实践,能够带启发更加多技术制品利用分布式软总线能力落地业务场景。
4.2 展望
基于咱们沉淀的直播互动迁移和音视频协同传输两大技术能力,将来咱们会在这两个方向进一步探索 多机位多摄像头开播,丰富直播内容。随着集团Artc逐步适配HarmonyOS并供给更加多流处理能力,咱们能够供给专业高清的摄像头录制商品,可移动的摄像头走播工厂,多方向的摄像头采集直播画面,进一步提高咱们的直播内容质量标准化的中控盒子,降低开播成本。将音视频流合流分发、投屏展示、开播掌控的能力集中在一个中控设备上,主播只必须持有该设备就能够实现以上打包的开播能力
当前咱们的方法重点还是软件应用的研发并不触及硬件的研发,因此实质运用的时候必须的摄像头和大屏设备能力都是采用HarmonyOS的手机完成的,倘若咱们拥有烧录OpenHarmony的摄像头和投屏盒子,将进一步降低商家的成本、丰富开播的能力。随着5G和万物互联时代的发展,目之可及的前景还是非常广阔。
参考:分布式语音照相 https://gitee.com/panthole/harmonyos-codelabs/tree/master/VoiceCamera跨设备迁移视频内容 https://gitee.com/panthole/harmonyos-codelabs/tree/master/DistributedVideoCodelabHamonyOS视频解码能力播放预览画面 https://gitee.com/panthole/harmonyos-codelabs/tree/master/CodecDemo
关注咱们,每周 3 篇移动技术实践&干货给你思考!
|