目录
目录README.md

OH!直播 - 基于OpenHarmony的实时视频直播跨平台应用

项目简介

OH!直播是一款基于OpenHarmony系统开发的实时视频直播跨平台应用。项目利用ArkUI-X框架、FFmpeg和OpenGL ES技术,支持RTSP协议的视频流拉取、解码和渲染,提供高清流畅的视频播放体验。应用旨在推动国产化系统生态发展,为核心技术自主可控贡献力量。


功能特性

  • 协议支持: 支持播放基于RTP/RTSP协议的实时视频流。
  • 自定义视频源: 用户可通过输入视频流URL自定义视频来源。
  • 高清流畅播放: 支持720p和1080p高清视频流播放,帧率稳定在30fps以上。
  • 跨平台支持: 基于ArkUI-X框架,一次开发多端部署。
  • 轻量化架构: 自实现视频解码和渲染,避免使用庞杂的第三方框架。

技术栈

  • ArkUI-X: 提供跨平台开发能力,支持XComponent组件用于高性能渲染。
  • FFmpeg: 实现视频流拉取和解码,支持多种视频编码格式。
  • OpenGL ES: 用于高性能视频渲染,支持YUV到RGB的实时转换。
  • EGL: 作为OpenGL与原生窗口系统的桥梁,管理渲染上下文和表面。

e7c8cd587b6a6397279b3b1622db502


核心模块

视频流拉取与解码模块

  • 功能: 基于FFmpeg实现RTSP协议的视频流接收与解码,输出YUV格式视频帧。
  • 实现:
    • 使用avformat_open_input连接RTSP流。
    • 使用avcodec_send_packetavcodec_receive_frame完成视频解码。
    • 解码后的YUV帧通过回调机制传递给渲染模块。

视频数据渲染模块

  • 功能: 基于OpenGL ES和EGL,将解码后的YUV视频帧高效渲染到屏幕。
  • 实现:
    • 使用EGL初始化OpenGL渲染环境。
    • 编写顶点和片段着色器完成YUV到RGB的转换。
    • 通过glTexImage2D上传YUV数据到GPU纹理,并调用glDrawElements完成渲染。

视频播放模块

  • 功能: 通过XComponent组件将渲染结果嵌入ArkUI-X界面,实现视频播放。
  • 实现:
    • 使用XComponentController管理Surface生命周期。
    • 通过NAPI桥接ArkTS与C++,传递Surface ID并启动视频流处理。
    • 渲染模块将视频帧绘制到XComponent提供的Surface上。

插件管理模块

  • 功能: 管理视频渲染器和窗口资源,提供对Surface的动态管理。
  • 实现:
    • SetSurfaceId: 创建或获取Native窗口和视频渲染器,并初始化渲染环境。
    • DestroySurface: 销毁指定Surface的资源,释放内存。
    • ChangeSurface: 动态调整Surface的尺寸。
    • GetXComponentStatus: 获取XComponent的初始化状态。

项目结构

├── entry/ 
│ ├── src/ 
│ │ ├── main/ 
│ │ │ ├── cpp/ 
│ │ │ │ ├── common/ # 公共头文件 
│ │ │ │ ├── manager/ # PluginManager模块 
│ │ │ │ ├── render/ # OpenGL渲染模块 
│ │ │ │ ├── thirdparty/ # FFmpeg库 
│ │ │ │ ├── types/ # 类型定义 
│ │ │ │ ├── napi_init.cpp # NAPI接口实现 
│ │ │ │ ├── video_stream_handler.cpp # 视频流处理模块 
│ │ │ ├── ets/ 
│ │ │ │ ├── entryability/ # 主界面逻辑 
│ │ │ │ ├── pages/ # 页面定义 
│ │ ├── mock/ # 测试用例 
│ │ ├── ohosTest/ # 测试模块 
│ │ ├── test/ # 单元测试 
├── build-profile.json5 # 构建配置 
├── obfuscation-rules.txt # 混淆规则

性能优化

  • 内存管理: 精细化内存分配与释放,避免内存泄漏。
  • GPU加速: 使用OpenGL ES完成YUV到RGB转换,降低CPU负载。
  • 错误处理: 完善网络异常、解码失败等情况的处理机制。

贡献者

  • 团队名称: 三叉星辉
  • 成员: 何延、刘文昊、孟浩洋

赛题题目:实时视频直播跨平台应用开发

赛题说明:

ArkUI-X是一个自渲染引擎的跨平台UI框架,可以让开发者使用ArkTS编写跨端UI,它具备简洁自然的UI信息语法、丰富的UI组件、多维的状态管理,以及实时界面预览等相关能力,帮助提升应用开发效率,并能在多种设备上实现生动而流畅的用户体验。目前支持OpenHarmony、HarmonyOS、Android、iOS四个平台,后续会逐步增加更多平台支持。开发者基于一套主代码,就可以构建支持多平台的精美、高性能应用。 实时视频流播放在直播、安防等场景下应用非常普遍,本赛题要求参赛者使可以使用Xcomponet和ffmpeg开发一个基于ArkUI-X跨平台框架的实时视频直播应用,直播的视频流来源不限制,需要使用如RTP/RTSP协议接收。

赛题要求:

  1. 功能性要求: 参赛者可以基于Xcomponet和ffmpeg实现实时视频码流播放。 视频要求必须是实时视频,分辨率720P/1080P,需要使用RTP/RTSP等传输协议。
  2. 性能要求 实时视频帧率在15-30FPS。 视频播放时CPU低于30%。 评分标准: 评分项 占比 说明 功能 30
    性能 30 流畅度 跨平台代码复用 20
    代码规范性 10 代码符合OpenHarmony社区规范,按照规范类型扣分点,每条减少1分,直至为0 文档质量 10 文档能将从架构和技术实现角度,说明架构和技术竞争力。

赛题联系人:

晏国淇 yanguoqi1@huawei.com 刘 龙 long.liu@huawei.com

参考资料:

ArkUI-X跨平台项目介绍:https://gitcode.com/arkui-x/docs/blob/master/zh-cn/README.md
XComponent介绍:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-basic-components-xcomponent-V5

参赛资源支持:

OpenHarmony社区可提供软硬件开发资源

赛题交流讨论链接:

https://www.chaspark.com/#/races/competitions/1136107857761329152

关于
331.9 MB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

©Copyright 2023 CCF 开源发展委员会
Powered by Trustie& IntelliDE 京ICP备13000930号