一直在忙, 也没写过几次播客! 但一直热衷于直播开发技术, 公司又不是直播方向的, 所以就年前忙里偷袭研究了一下直播开发, 然后翻阅了很多大神的技术博客等, 写了一个简单的Demo, 又根据网上大神们的技术博客搭建了简易的本地RTMP服务器! 由于时间问题, 没来记得来记录下来, 目前demo 只完成了直播音视频采集, 转码, RTMP协议推流, 和本地RTMP简易服务器 推流这一环节, 拉流还没来得及写, RTMP流的播放用的是VLC, 来实现视频流的播放的!
网上有各种大牛写的播客, 都很好的, 但我写这篇播客的目的就是, 想记录一下当时的思路, 还有分享出来, 让各位大神指点一下不足之处, 来完善这个小项目! 表达一下我对直播开发的热爱哈哈...如果有幸能给大家帮些忙, 我倍感荣幸!
好, 废话不多说, 接下来我们直接开始!
代码链接: Github: https://github.com/jessonliu/JFLivePlaye
技术部分------ ??
脑涂: ![ 直播思维导图.png ]
视频直播的大概流程就上脑涂上所画的, 还有一些没列出来, 比如, 聊天, 送礼, 踢出, 禁言, 等等一系列功能, 但本文只是针对视频直播的简单实现!
下边来说一下以下的几个点和使用到的类(后边会附上demo, 里边还有详细的备注)
1. 音视频采集
音视频采集, 网上也有很多大神些的技术博客, demo 等, 我这里边只针对iOS 原声的来介绍以下
利用AVFoundation框架, 进行音视频采集
AVCaptureSession // 音视频录制期间管理者
AVCaptureDevice // 设备管理者, (用来操作所闪光灯, 聚焦, 摄像头切换等)
AVCaptureDeviceInput // 音视频输入数据的管理对象
AVCaptureVideoDataOutput // 视频输出数据的管理者
AVCaptureAudioDataOutput // 音频输出数据的管理者
AVCaptureVideoPreviewLayer // 用来展示视频的图像
注意, 必须要设置音视频输出对象的代理方法, 然后在代理方法中获取sampleBuffer, 然后判断captureOutput是音频还是视频, 来进行音视频数据相应的编码
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection {
}
也可以利用GPUImageVideoCamera 来进行视频数据的采集获取, 可以利用GPUImage 进行美颜, 添加水印, 人脸识别等
2.流媒体
流媒体是指采用流式传输的方式在网上播放的媒体格式, 是边传边播的媒体,是多媒体的一种!
然后就是大家需要了解的几个关键词
帧:视频是由很多连续图像组成, 每一帧就代表一幅静止的图像
GOP:(Group of Pictures)画面组,一个GOP就是一组连续的画面,每个画面都是一帧,GOP就是很多帧的集合!
帧的

