You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
SoftwareEngineering/设计/ffmpeg推拉流播放器录像.md

2.5 KiB

流媒体平台

流媒体底层需求

  • 支持第三方接入开发
  • 支持内部产品平台
  • 支持跨平台(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代码