1、AVCaptureSession
2、AVCaptureVideoPreviewLayer
3、AVCaptureVideoDataOutput
4、AVCaptureStillImageOutput
5、AVCaptureAudioDataOutput
6、AVCaptureDeviceInput: AVMediaTypeVideo AVMediaTypeAudio
7、AVAssetWriter (可以设置视频属性:帧率;音频属性:码率)
8、AVAssetWriterInput: [AVAssetWriterInput assetWriterInputWithMediaType:AVMediaTypeVideo / AVMediaTypeAudio]
9、AVAssetWriter 添加输入源:AVAssetWriterInput
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection
10、输入源输入:数据流 AVAssetWriterInput appendSampleBuffer:sampleBuffer
视频学习:
https://www.bilibili.com/video/BV14b411J7WF?from=search&seid=14157488951126452002
11、视频渲染:显示到屏幕中(直播,短视频)
1、基于ffmpey的 ijkplayer kxmovie (播放器的源码分析!,这个2个框架视频渲染用OpenGL ES)
2、AVFoundation 视频采集、剪辑处理;GPUImage(开源)滤镜框架基于OpenGL ES(CoreImage难用、不开源)
3、编码 VideoToolBox / ffmpeg
4、播放:解码VideoToolBox / ffmpeg (audioToolbox 音频)
5、显示(KXMovie / ijkplayer / 直接显示OpenGL ES / Metal)
**编码就是压缩
截屏2021-04-1018.03.42.png
12
Y:亮度 UV:色度
图片渲染:
CPU:计算frame,解码。加载到CPU中没有立马还原成位图的
GPU:坐标、位图(纹理)
2018年底层OpenGL ES 图片渲染 ->19年后Metal
13
顶点着色器:计算坐标;片元着色器:填充颜色
14 直播APP架构
直播APP架构.png
15 GPUImage 视频处理 Android gafika库
16 编码方式(iOS 软硬编码都支持)
硬编码:非CPU进行编码,GPU(硬件编码)
软编码:使用CPU进行编码(手机容易发热)【ffmpeg】
17 iOS端:硬件兼容性好,直接进行硬编码
Android:推荐使用软编
18 编码标准
视频标准:H264 H265 VP8 VP9(Goole)
音频编码:AAC
19 推流(流媒体)
RTMP(基于TCP) HLS (基于HTTP)
20 流分发
适配不同平台的协议:RTMP、HLS、FLV 以及各个平台( ios Android PC 网页)
21 播放:解码、渲染
截屏2021-04-1413.39.22.png
22
16帧以上不会觉得卡顿,一般是30帧
23
H264分层设计
视频编码成:VCL 网络提取层:NAL
24 软硬编码
截屏2021-04-1416.28.55.png
25 硬编码实现
截屏2021-04-1416.40.33.png
26 h264(编码格式)是视频编码,没有音频
网友评论