设计和开发直播客户端架构-DQLive for Android
浏览:839 次

DQLive公司
直播客户端架构设计与开发经典学习项目启动!
实时Android客户端app练习!欢迎使用Star并不断更新。
基于Sound Network SDK实现的推拉式流媒体很小,具有所有必要的功能。
特点:出色的直播间、观众侧直播间和主机侧架构设计,强大的模块重用和可扩展性,定制的生命周期感知控制器组件,以及按钮粒度的逻辑分离和自由组合。
Github项目地址:
它仅用于学习和交流技术、应用sdk、资源和图片材料。如有侵权,请联系删除。
项目屏幕截图
DQLive Live Android客户端app实践
视频效果:
直播技术选择
主机端:流媒体基于声音网络SDK,然后通过旁路推送到CDN。因此,独特的特点是启动广播的过程以及主机端的音频和视频处理。其他常规功能类似于观众终端。
观众端:拉流,可选播放器为ijkplayer、exo或语音网络MPK;其他锚数据卡、IM功能、奖励功能。
UI架构:Activity+Fragment+ViewMode+LiveData
定制控制器(支持热插拔模块化和生命周期感知)
组件通信:目前,EventBus将添加一个LiveDataBus。

模块化和组件化:AutoService。
依赖注入:Hilt。
网络相关:改造+科特林-科鲁汀+格森。
持久性:室温,MMKV。
动画:前期为SVGA,后期为+Lottie和Alpha MP4。
使用哪种技术进行直播,应结合每个项目的技术特点,并考虑项目学生的发展习惯和技术掌握情况。我还将逐步介绍一些尚未在项目中使用的Nice技术。
注意事项
直播间的水平非常重要!
直播间有很多功能。在设计和添加每个模块时,必须尽可能考虑高可用性、稳定性、可扩展性和可重用性。
基本组件下沉,以尽可能实现面向接口的编程和模块化和组件化。
方便项目功能模块的热插拔和新项目的快速重用或删除。
目前,直播间涉及的许多模块在直播间和主机端都被重用。
推拉流的LivePusher+MediaPlayer模块是一个单独的模块项目,可用于播放aar并提供外部服务。
开发原则和规范
标准化可以避免许多不必要的问题。细节可能无法决定成败,但可能会影响效率和情绪。
命名约定

各种文件和资源文件的命名规范可以轻松检索所需的内容,并便于将来的模块化分离或重构。
例如,通用前缀ic_、bg_或img_+大型模块名+函数名+状态(如果有)
。 例如,ic_ live_ room_chat_normal。png,ic_ push_ room_gift_已选择。png,大bg直播间加载默认.png
常用资源,cm_
如果布局正常,则应遵循正常布局:activity_、fragment_、dialog_、layout_、item_
添加模块名+函数名,含义清晰。
通常,如果资源名称太常见或太短,则很容易发生冲突。
使用标准化命名进行组件化和模块化时,也更容易分离资源。
通常,room代表直播间和广播方的共同资源,而pushroom是广播方独有的。
开发协议
直播间是一个活动单一的复杂商业载体。其附带的功能一般应继承直播间的基类开发,便于统一管理。
对于属于直播间的新创建的弹出窗口、全屏或半屏页面,不要使用Activity、继承BaseFragment或开发BaseModule。
建议在弹出窗口中使用BaseDataBindingDialog(DialogFragment),这有助于子模块的统一管理,不会因活动生命周期的变化而影响直播间推送和拉送流的逻辑。
对于大型UI,请使用ViewStub来延迟加载布局。
另外
推拉流是正常的。您只需要修改推送和拉取流地址即可进行测试。

事实上,可以添加的功能有很多,比如AI主播、换脸等,后期不断更新。