Android|使用阿里云推流 SDK 实现双路推流不同画面

💡 原文中文,约1000字,阅读约需3分钟。
📝

内容提要

本文介绍了使用阿里云推流Android SDK实现同时推送两路不同画面的方法,通过启动另一个进程的Service进行第二路推流,通过AIDL传递视频帧进行处理后推送。经过调试和优化,实现了双路推流不同画面的效果。

🔎

延伸解读

方案选择背后的权衡

文章提到两种思路:一是推一路包含A和B区域的流,直播时截取A区域展示;二是推两路流,分别用于直播和录播。作者基于项目现状——推流端只有Android,而播放端需适配Web PC、Web Mobile、Android和iOS——选择了第二种。这种选择将改造集中在推流端,服务端只需简单调整,避免了多端播放器的适配工作,降低了整体复杂度。

跨进程推流的技术实现要点

由于阿里云推流Android SDK不支持多实例,作者通过启动另一个进程的Service来初始化第二个AlivcLivePusher。视频帧通过MemoryFile和AIDL传递ParcelFileDescriptor,Service读取后处理并推送第二路流,音频帧同理。这种方案绕过了SDK限制,但涉及跨进程通信和内存文件操作,对稳定性和性能有一定要求,需要充分调试和优化。

适用场景与长期建议

该方案适用于已有项目使用阿里云推流SDK且无原生多路推流支持的情况,作为一种临时解决方案。作者建议,如果没有历史包袱,应优先考虑原生支持多路推流的SDK,如大牛直播等,这样可能更加方便和稳定。因此,在技术选型初期评估多路推流需求,可以避免后续的复杂改造。

❓

Q&A

如何使用阿里云推流 SDK 实现双路推流?

通过启动另一个进程的Service来实现第二路推流,并使用AIDL传递视频帧进行处理后推送。

阿里云推流 Android SDK 是否支持多路推流?

阿里云推流 Android SDK 不支持多路推流,需要通过其他方式实现。

项目中为什么选择推送两路流而不是其他方案?

选择推送两路流是因为需要在直播时展示A区域,录播时展示A和B区域,且只需对推流端进行改造。

实现双路推流的过程中遇到了什么挑战?

主要挑战是阿里云推流 SDK 不支持多实例,无法在一个进程中同时使用两个 AlivcLivePusher 实例。

如何处理视频帧以实现双路推流?

通过写入 MemoryFile,并使用 AIDL 将 ParcelFileDescriptor 传递给 Service,Service 读取 MemoryFile 进行处理后推送第二路流。

如果没有历史包袱,应该选择什么样的SDK?

建议选择原生支持多路推流的SDK,如大牛直播,这样会更加方便和稳定。

🏷️

标签

➡️

继续阅读