IOS Live开发系列I
浏览:1165 次

我一直很忙,几次都没有写博客!然而,该公司一直热衷于直播开发技术,而且公司不在直播的方向,所以就在几年前,我花时间研究了直播开发,阅读了许多大神的技术博客,写了一个简单的演示,并基于在线大神的技术博客构建了一个简易的本地RTMP服务器!由于时间问题,我不记得录了。目前,演示仅完成现场音频和视频采集、转码、RTMP协议流和本地RTMP简单服务器流。尚未写入拉取流。RTMP流使用VLC播放视频流!
网上有丹尼尔写的各种播客,都很好。但我想写这个播客来记录我当时的想法并分享,这样你就可以指出缺点并改进这个小项目!我想表达我对现场开发的热爱,哈哈…如果我有幸帮助您,我感到荣幸!
这篇文章只是对一些需要学习的直播概念的介绍,然后是如何捕获视频!在不久的将来,我会写一篇详细的文章,一点一点地介绍它!
规划步骤:
好吧,别胡说八道,我们直接开始吧!
iOS实时开发(从底层开始开发)
一
2.iOS直播开发(开发从底层开始)-音频和视频的硬编码
3.iOS直播开发(开发从底层开始)-RTP协议流
4.iOS直播开发(开发从底部开始)-nginx直播本地服务器设置
等待
真实的战斗地图
形象
代码链接:Github:

技术部分:
脑涂片:![实时思维导图.png]
形象
视频直播的一般过程是在大脑中描绘的。还有一些功能没有列出,比如聊天、送礼、踢球、禁忌等,但本文只是视频直播的简单实现!
现在,让我们谈谈以下几点和使用的类(将附上演示,并附上详细的评论)
1.音频和视频捕获
音频和视频采集。互联网上也有很多很棒的技术博客和演示。我将在这里介绍iOS配乐
使用AVFoundation框架进行音频和视频捕获
音频和视频录制期间的AVCaptureSession//管理器
AVCaptureDevice//设备管理器(用于操作闪光灯、对焦、相机开关等)
AVCaptureDeviceInput//音视频输入数据的管理对象
AVCaptureVideoDataOutput//视频输出数据管理器
AVCaptureAudioDataOutput//音频输出数据管理器
AVCaptureVideoPreviewLayer//用于显示视频的图像

请注意,您必须设置音频和视频输出对象的代理方法,然后在代理方法中获取sampleBuffer,然后确定captureOutput是音频还是视频,以对音频和视频数据进行相应的编码
-(void)captureOutput:(AVCaptureOutput*)capture输出didOutputSampleBuffer:(CMSampleBufferRef)sampleBufferfromConnection:(AVCaptureConnection*)连接{
}
您还可以使用GPUImageVideoCamera收集和获取视频数据。你可以使用GPUImage美化你的脸,添加水印,人脸识别等
2.流媒体
流媒体是指通过流传输在互联网上播放的媒体格式。它是一种在传输时进行广播的媒体。这是一种多媒体!
然后我们需要知道几个关键词
帧:视频由许多连续图像组成,每个帧代表一个静止图像
GOP:(图片组)图片组,GOP是一组连续的图片,每个图片都是一个帧,而GOP是许多帧的集合!
框架分类:I框架、P框架、B框架
为了提高压缩比并减小视频文件的大小,在编码连续动态图像时,通常将多个连续图像编码为P、B和I帧类型
I帧:一组连续图片(GOP)的第一帧。I帧采用帧内压缩(也称为关键帧压缩)。I帧压缩不依赖于其他帧。如果通过尽可能去除图像空间的冗余信息进行压缩,它可以用作图像!
P帧:预测帧(也称为前向参考帧)。P帧的压缩取决于前一帧。通过完全减少图像序列中先前编码帧的时间冗余信息,压缩传输数据的编码图像!
B帧:也称为双向预测帧。当一帧被压缩成B帧时,它根据相邻前一帧、该帧和后续帧的数据的不同点来压缩该帧,也就是说,只有这两个帧之间的差异