# 流媒体平台 ## 流媒体底层需求 - 支持第三方接入开发 - 支持内部产品平台 - 支持跨平台(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代码