master
parent
7a6d9b01f0
commit
3302c953ef
@ -0,0 +1,127 @@ |
||||
|
||||
# 流媒体平台 |
||||
## 流媒体底层需求 |
||||
- 支持第三方接入开发 |
||||
- 支持内部产品平台 |
||||
- 支持跨平台(linux、windows、Android、ios...) |
||||
- 流媒体输入源 |
||||
- 视频文件 |
||||
- 编码芯片 |
||||
- camera |
||||
- 网络流:rtmp、rtsp、hls、udp、webrtc... |
||||
- 其他源 |
||||
- 流媒体输出 |
||||
- 网络推流:rtmp、rtsp、hls、udp(ts)、webrtc... |
||||
- Ndi |
||||
- 本地播放器 |
||||
- 视频文件存储 |
||||
- hdmi |
||||
- 编解码:软编码和硬编码 |
||||
- 视频:h264、h265 |
||||
- 音频:aac ... |
||||
- 流媒体服务器:设备部署,云服务器 |
||||
- 编译支持 |
||||
- 单独编译:适合独立开发 |
||||
- 集成编译:适合集成到产品开发 |
||||
|
||||
## 中间层 |
||||
- Lua framework (kiloview) |
||||
- 包装底层sdk,提供应用层接入api |
||||
- Java framework |
||||
- TODO |
||||
|
||||
## 应用层 |
||||
- 开发方式 |
||||
- 接入流媒体底层sdk |
||||
- 接入中间层sdk |
||||
|
||||
|
||||
# 流媒体底层设计 |
||||
- 独立仓库、独立编译、提高开发和调试效率 |
||||
- 设计成sdk,cmake构建跨平台编译系统 |
||||
- 提供api接入文件、和接入demo |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# 需求 |
||||
1.依据目前代码,底层使用ffmpeg代码,重新编码实现流媒体推拉流,播放,保存,录像磁盘管理功能 |
||||
|
||||
# 目前代码存在问题 |
||||
1.集成在kiloview整体编译环境,不方便独立调试、测试、跨平台移植、客户定制 |
||||
2.对象继承和组合的选择 |
||||
|
||||
# 设计构想 |
||||
1.代码独立仓库,不依赖目前工程编译系统,cmake实现跨平台编译,减少后续可能的移植工作量 |
||||
2.代码设计成sdk,提供接入文档,具体业务接入sdk实现业务功能 |
||||
3.使用C++11编码 |
||||
|
||||
|
||||
# 需求分解 |
||||
## 支持的视频源 |
||||
1.视频文件 |
||||
2.网络流(rtmp、rtsp、ts、hls) |
||||
3.编码器 |
||||
4.音视频采集设备 |
||||
|
||||
## 推流 |
||||
1.rtmp、rtsp、ts |
||||
2.可扩展私有协议 |
||||
|
||||
## 编解码 |
||||
1.软件编解码 |
||||
2.硬件编解码 |
||||
|
||||
## 录像 |
||||
1.录像保存 |
||||
2.磁盘管理 |
||||
|
||||
## 播放器 |
||||
1.多视频播放 |
||||
|
||||
# 设计要求 |
||||
1.功能设计SDK化,给业务层提供接口,应对各种需求 |
||||
2.代码执行效率高,内存占用少 |
||||
3.独立代码仓库,多系统适配(linux,windows,Android,ios),cmake构建跨平台编译 |
||||
4.多通道支持 |
||||
|
||||
# 实施步骤 |
||||
1.讨论需求 |
||||
2.业务抽象、定义接口,接口文档,审核接口 |
||||
3.编码 |
||||
4.编写测试代码 |
||||
5.测试 |
||||
6.项目接入 |
||||
|
||||
|
||||
# 代码结构 |
||||
## 基础库 |
||||
1.日志系统 |
||||
2.线程池 |
||||
3.事件通知 |
||||
## 三方库 |
||||
## sdk代码 |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
Binary file not shown.
@ -0,0 +1,37 @@ |
||||
# 工作总结 |
||||
## 工作情况 |
||||
- 完成多路视频以多套节目方式输出到ts流demo开发 |
||||
- 熟悉kiloview 软件平台 |
||||
- 熟悉了Streamer代码架构 |
||||
- 熟悉了开发编译调试流程 |
||||
- 熟悉了lua demo测试Streamer代码 |
||||
- 完成h265视频采集推流验证 |
||||
- 搭建rtmp、rtsp测试体流媒体服务器 |
||||
- ffmpeg 打rtmp支持h265补丁 |
||||
- ffmpeg命令行测试推拉h265视频(rtmp、rtsp、udp、hls) |
||||
- ffmpeg编写测试demo测试推拉h265视频 |
||||
- s2Pro开发板验证hdmi视频采集编码成h265视频推流 |
||||
|
||||
## 发现问题 |
||||
- Streamer代码设计 |
||||
- 部分代码接口定的太死,不适合扩展 |
||||
- 继承和组合的选择,部分代码不该选择继承的选择了继承 |
||||
- ... |
||||
- Streamer代码编译集成在kiloview整体编译环境,编译调试速度慢 |
||||
- 流媒体核心开发调试依赖上层lua开发,开发效率低下 |
||||
|
||||
## 改善策略 |
||||
- 建立代码review机制,严格把控代码api和架构设计 |
||||
- 组件化 |
||||
- 日志模块 |
||||
- ... |
||||
- 架构设计需要做公开讨论,让所有开发人员清晰架构各部分职责 |
||||
- 梳理并整理代码,流媒体核心代码设计成sdk,独立于项目开发,编写独立的测试demo |
||||
|
||||
## 工作方向 |
||||
- 流媒体核心代码sdk化设计及编码 |
||||
- NDI、webrtc方向研究及落地 |
||||
- 软件平台化规范化方向研究及落地 |
||||
|
||||
## 工作计划 |
||||
- 待定:工作方向如上,实施计划同领导沟通后再定 |
@ -0,0 +1,59 @@ |
||||
|
||||
# 流媒体平台 |
||||
## 流媒体底层需求 |
||||
- 支持第三方接入开发 |
||||
- 支持内部产品平台 |
||||
- 支持跨平台(linux、windows、Android、ios...) |
||||
- 流媒体输入源 |
||||
- 视频文件 |
||||
- 编码芯片 |
||||
- camera |
||||
- 网络流:rtmp、rtsp、hls、udp、webrtc... |
||||
- 其他源 |
||||
- 流媒体输出 |
||||
- 网络推流:rtmp、rtsp、hls、udp(ts)、webrtc... |
||||
- Ndi |
||||
- 本地播放器 |
||||
- 视频文件存储 |
||||
- hdmi |
||||
- 编解码:软编码和硬编码 |
||||
- 视频:h264、h265 |
||||
- 音频:aac ... |
||||
- 流媒体服务器:设备部署,云服务器 |
||||
- 编译支持 |
||||
- 单独编译:适合独立开发 |
||||
- 集成编译:适合集成到产品开发 |
||||
|
||||
## 中间层 |
||||
- Lua framework (kiloview) |
||||
- 包装底层sdk,提供应用层接入api |
||||
- Java framework |
||||
- TODO |
||||
|
||||
## 应用层 |
||||
- 开发方式 |
||||
- 接入流媒体底层sdk(不需要lua环境的) |
||||
- 接入中间层sdk (需要lua环境的) |
||||
|
||||
|
||||
## 流媒体底层设计 |
||||
- 独立仓库、独立编译、提高开发和调试效率 |
||||
- 设计成sdk,cmake构建跨平台编译系统 |
||||
- 提供api接入文件、和接入demo |
||||
|
||||
|
||||
## 流媒体底层sdk化实施步骤 |
||||
- 讨论需求 |
||||
- 业务抽象、定义接口,接口文档,审核接口 |
||||
- 编码 |
||||
- 编写测试代码 |
||||
- 测试 |
||||
- 项目接入 |
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
Binary file not shown.
Loading…
Reference in new issue