自研视频直播技术点分析及使用LFLiveKit,ijkplayer

来源:互联网 发布:js中createelement 编辑:程序博客网 时间:2024/05/29 13:22

一、自研成本很大,如下:
1、人力:保守计算,客户端两人、后端两人、运维一人、而且这几位人员都是在视频技术上有过经验的
2、硬件资源:服务器、带宽、CDN
3、时间成本:自己开发肯定是要比接入第三方时间长的,等自己开发好后,但是错过了直播的爆发期,这个成本是耗不起的
4、直播所涉及的开发量是很大的,比如直播中的聊天室功能、美颜算法、视频点播。。。。。
5、运维:运维其实就是填坑,直播的技术如果不完善的话,会出现无数坑等着来填,而此时再考虑迁移到第三方已经来不及了

二、常见的视频直播相关协议:
附:MAC -安装了Homebrew实现搭建本地Nginx+RTMP 推流
1、RTMP(Real Time Messaging Protocol,实时消息传送协议)
RTMP是Adobe Systems公司为Flash播放器和服务器之间音频、视频和数据传输开发的开放协议。它有三种变种:
1)、工作在TCP之上的明文协议,使用端口1935;
2)、RTMPT封装在HTTP请求之中,可穿越防火墙;
3)、RTMPS类似RTMPT,但使用的是HTTPS连接;
RTMP协议是被Flash用于对象、视频、音频的传输。这个协议建立在TCP协议或者轮询HTTP协议之上。RTMP协议就像一个用来装数据包的容器,这些数据既可以是AMF格式的数据,也可以是FLV中的视音频数据。一个单一的连接可以通过不同的通道传输多路网络流,这些通道中的包都是按照固定大小的包传输的。

三、直播下的聊天室功能
1、直播的场景下,除了视频直播还有一块就是聊天功能,观众打开一个直播房间时,也就自动进入了一个聊天室,观众可以发文字发表情进行互动,道具打赏也是基于聊天室的接口做上去的。
2、聊天室和群聊的功能类似,两者的区别是:聊天室的场景下,用户进入后才能看到聊天信息,群成员信息,退出后再进来就看不到之前的历史消息了。
3、聊天室其实是im即时通讯中的一个功能,im主要能实现一对一聊天、群聊、聊天室3种场景。

四、推流
LFLiveKit:框架支持RTMP。github地址https://github.com/LaiFengiOS/LFLiveKit
LFLiveKit库里已经集成GPUImage框架用于美颜功能,GPUImage基于OpenGl开发,纯OC语言框架,封装好了各种滤镜同时也可以编写自定义的滤镜,其本身内置了多达125种常见的滤镜效果。
以下是该框架主要类功能的分析:

LFLiveSession是整个sdk核心,提供对外部的主要接口。其主要功能有:管理推流开关,管理音视频录制及渲染,管理录制渲染后的音视频编吗,管理编吗后的数据上传,管理音视频的基础配置,回调推流状态和异常上报等。LFLiveAudioConfiguration音频配置,配置相关音频信息(音频质量,码率,采样率,声道数)LFLiveVideoConfiguration视频配置,配置相关音频基本信息(视频质量,码率,帧数,分辨率)和应用配置如最大最小帧率等。LFVideoCapture视频管理类,管理视频的输入和输出。同时处理业务需求如:美颜,亮度,水印等效果。用了一个第三方:GPUIImage处理渲染效果LFAudioCapture音频管理,管理音频的输入开关。这一块儿没有多大的定制,应用的原生的API即可。LFH264VideoEncoder,LFHardwareVideoEncoder视频编码类,分别对应8.0以前和8.0以后的两种设备的视频编码类。都遵守LFVideoEncoding协议,并设置LFStreamSocketDelegate协议给session管理LFHardwareAudioEncoder音频编码类,遵守LFVideoEncoding协议,并设置LFStreamSocketDelegate协议给session管理LFFrame数据信息的基类,作为上传到服务器数据的基本模型LFVideoFrame视频信息,作为上传到服务器视频数据的模型LFAudioFrame音频信息,作为上传到服务器音频数据的模型LFLiveStreamInfo推流信息:推流地址(目前主要应用rtmp推流);流状态;音视频配置信息;异常信息LFStreamRTMPSocket数据上传管理类:开关数据上传,回调连接状态和异常。遵循LFStreamSocket协议,并设置LFStreamSocketDelegate给session管理LFLiveDebug调试信息:这个是开发时候的内部表示,主要用于记录调试作用。LFStreamingBuffer本地采样:通过本地采样监控缓冲区,可实现相关切换帧率码率等策略

五、播放
ijkplayer:是基于FFmpeg的跨平台播放器框架,由B站开发。目前已被多个主流直播App集成使用。github地址:https://github.com/Bilibili/ijkplayer

原创粉丝点击