Android|使用阿里云推流 SDK 实现双路推流不同画面
内容提要
本文介绍了使用阿里云推流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,如大牛直播,这样会更加方便和稳定。