HarmonyOS鸿蒙NEXT应用开发中如何实现跨端投屏/同屏?支持安卓/Windows接收视频与操作?

HarmonyOS鸿蒙NEXT应用开发中如何实现跨端投屏/同屏?支持安卓/Windows接收视频与操作?

如何能让HarmonyOS NEXT开发的软件里面投屏视频能够在安卓或者Windows端接收到我的视频,并且能够看到我的一切动作,比如点击button等。

3 回复

使用AVCastPicker实现音视频投播的开发步骤如下:

  1. 通过AVSessionManager创建并激活媒体会话。

  2. 设置媒体资源信息,注册基础播控回调,接入系统播控中心的基础播控。接入投播组件前需要先适配媒体播控中心的基础播控业务,具体需要接入的内容请按照应用类型参考应用接入自检表。应用可以通过filter字段设置需要发现和过滤的协议类型,来匹配应用期望的投播设备。

  3. 在需要投播的播放界面创建投播组件AVCastPicker。若创建AVCastPicker后应用界面未显示,或点开Picker显示空白,请排查是否按步骤1、2接入了系统播控中心的基础播控,且正确设置了AVMetadata与Extras参数。

  4. 注册AVSession投播控制回调。用于感知投播设备连接。连接成功后通过session获取AVCastController,用于后期的投播控制;应用监听on(‘outputDeviceChange’)回调,在收到设备切换到对端的信息时,就可以刷新应用内的播放界面为“投播页面或遥控器页面”,并暂停本机播放。在收到切换设备到本机的信息时,可以刷新应用内的播放界面为“本地播放页面”,并开始在本机播放。

  5. 使用AVCastController进行资源播放。如果使用本地资源播放,必须确认资源文件可用,并使用应用沙箱路径访问对应资源,参考获取应用文件路径。应用沙箱的介绍及如何向应用沙箱推送文件,请参考文件管理。

  6. 使用AVCastController,监听控制命令和进行播放控制。应用可以通过如下监听与控制指令,实现从应用内控制投播设备,及响应来自对端设备或者系统播控中心的控制。系统播控中心会按照应用的注册监听,来动态置灰和点亮控制卡片的按钮。

  7. 申请投播长时任务,避免应用在投播时进入后台时被系统冻结,导致无法持续投播。

  8. 结束投播。当远端设备断开的时候,应用会收到事件,系统会自动断开连接。应用也可以使用断开投播的接口,主动进行投播连接的断开。建议应用监听并保存AVCastController.on(‘playbackStateChange’)回调中的position,当投播断开时,可以刷新为“本地播放详情页”在本端继续播放,并根据这个position来调整本地播放的进度。

具体的开发步骤可参考:投播组件开发指导

更多关于HarmonyOS鸿蒙NEXT应用开发中如何实现跨端投屏/同屏?支持安卓/Windows接收视频与操作?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


HarmonyOS NEXT实现跨端投屏可通过分布式能力完成。使用Distributed Screen组件可建立多设备屏幕协同,需调用createDistributedScreen接口创建投屏会话。对于Windows/安卓设备接收,需通过HiLink协议建立连接,使用Hdcp2.2加密传输视频流。操作指令通过分布式软总线传递,需在ability中实现onRemoteRequest回调处理跨端操作。注意:安卓/Win端需安装对应鸿蒙互联服务组件。

在HarmonyOS NEXT中实现跨端投屏/同屏功能可以通过以下技术方案:

  1. 核心机制:
  • 使用分布式能力框架(Distributed Scheduler)建立跨设备连接
  • 通过AVSession服务实现媒体投屏
  • 利用InputDeviceManager实现操作同步
  1. 具体实现步骤:

a) 投屏视频传输:

// 创建AVSession
AVSession session = new AVSession(context, "MySession", AVSession.TYPE_REMOTE_PLAYBACK);
AVSessionController controller = session.getController();

// 设置投屏参数
AVMetaData metaData = new AVMetaData.Builder()
    .setTitle("投屏内容")
    .build();
session.setMetaData(metaData);

// 启动投屏
AVPlaybackState state = new AVPlaybackState.Builder()
    .setState(AVPlaybackState.STATE_PLAYING)
    .build();
controller.setPlaybackState(state);

b) 操作同步实现:

// 注册输入设备监听
InputDeviceManager manager = (InputDeviceManager) getSystemService(INPUT_DEVICE_SERVICE);
manager.registerInputDeviceListener(listener, null);

// 处理跨端输入事件
@Override
public void onInputEvent(InputEvent event) {
    if (event instanceof KeyEvent) {
        // 转发按键操作
    } else if (event instanceof MotionEvent) {
        // 转发触控操作
    }
}
  1. 跨平台兼容方案:
  • 对安卓/Win端需实现对应的接收服务
  • 建议使用WebRTC协议进行跨平台视频流传输
  • 操作指令可通过自定义Socket协议传输

注意事项:

  • 需在manifest中声明ohos.permission.DISTRIBUTED_DATASYNC权限
  • 接收端设备需安装对应的服务组件
  • 视频编解码建议使用H.264标准确保兼容性

这种方案可以实现HarmonyOS到其他平台的单向投屏和操作同步,实际效果取决于网络状况和接收端的解码能力。

回到顶部