diff --git a/设计/ffmpeg推拉流播放器录像.md b/设计/ffmpeg推拉流播放器录像.md new file mode 100644 index 0000000..30f9931 --- /dev/null +++ b/设计/ffmpeg推拉流播放器录像.md @@ -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代码 + + + + + + + diff --git a/设计/~$设计.docx b/设计/~$设计.docx new file mode 100644 index 0000000..08064cf Binary files /dev/null and b/设计/~$设计.docx differ diff --git a/设计/~WRL0003.tmp b/设计/~WRL0003.tmp new file mode 100644 index 0000000..e69de29 diff --git a/设计/工作总结-邓军.md b/设计/工作总结-邓军.md new file mode 100644 index 0000000..38b2ef0 --- /dev/null +++ b/设计/工作总结-邓军.md @@ -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方向研究及落地 +- 软件平台化规范化方向研究及落地 + +## 工作计划 +- 待定:工作方向如上,实施计划同领导沟通后再定 \ No newline at end of file diff --git a/设计/流媒体平台设计.md b/设计/流媒体平台设计.md new file mode 100644 index 0000000..02e8e00 --- /dev/null +++ b/设计/流媒体平台设计.md @@ -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化实施步骤 +- 讨论需求 +- 业务抽象、定义接口,接口文档,审核接口 +- 编码 +- 编写测试代码 +- 测试 +- 项目接入 + + + + + + + + diff --git a/设计/设计.docx b/设计/设计.docx new file mode 100644 index 0000000..3e1fb10 Binary files /dev/null and b/设计/设计.docx differ