- 博客(15)
- 资源 (10)
- 收藏
- 关注
原创 FFMpeg硬件加速实现源码分析 - 硬件加速释放
本篇是系列文章的收官之篇,最后我们讲解硬件加速释放,特别是硬件解码释放,先看下流程图:在提到,avcodec_free_context是退出流程的调用接口,用来释放用户创建的解码器。
2025-11-14 11:40:44
358
原创 FFMpeg硬件加速实现源码分析 - 硬件解码
本篇重点分析硬件解码流程,即avcodec_send_packet和avcodec_receive_frame内部调用流程。
2025-11-13 16:05:15
822
原创 FFMpeg硬件加速实现源码分析 - 硬件加速初始化
先看下类图:本篇继续讲解下半部分的类图关系,即设置AVCodecContext的hw_device_ctx、hw_frames_ctx、internal->hwaccel_priv_data(即VTContext)和hwaccel。
2025-11-07 17:02:56
984
原创 FFMpeg硬件加速实现源码分析 - 打开解码器
(2)、AVCodec则是具体解码器的信息,包括名字、ID、支持的像素格式、profiles等,AVCodec是嵌套在FFCodec结构体里面的第一个成员变量,所以指向AVCodec的指针和指向FFCodec的指针是重叠的,这个知识点很重要,例如FFMpeg通过AVCodecContext的codec变量,根据用户选择的像素格式来查找硬件加速hwaccel时,就需要强制转换为FFCodec。关于硬件加速初始化流程,请阅读文章:FFMpeg硬件加速在iOS平台实现源码分析 - 硬件加速初始化流程。
2025-11-06 10:16:19
597
原创 FFMpeg硬件加速实现源码分析 - FFMpeg接口调用流程
(4)、创建avctx->hw_device_ctx(AVHWDeviceContext):av_hwdevice_ctx_create, iOS平台出入AV_HWDEVICE_TYPE_VIDEOTOOLBOX。(5)、设置硬件加速像素格式回调:avctx->get_format,在回调函数里面iOS平台选择AV_PIX_FMT_VIDEOTOOLBOX。(1)、发送数据:avcodec_send_packet,调用底层实际的硬件加速解码接口解码视频帧,并且暂存结果。(后面有专门文章介绍此步骤)
2025-11-05 10:33:20
344
原创 FFMpeg硬件加速实现源码分析
1、回顾下FFMpeg的API调用过程。接下来拆分5篇文章具体介绍,敬请期待。3、分析硬件加速初始化流程。5、分析释放硬件解码流程。2、分析打开解码器流程。4、分析硬件解码流程。
2025-11-05 09:36:31
563
原创 WebRTC移动端自定义音视频
WebRTC是基于点对点视频通话,底层协议栈主要是SRTP、UDP,基于SDP会话协议交互通话前报文(会话描述、ICE报文),通过ICE代理搜集双方的地址信息,大多数情况下音视频数据来源于手机的摄像头和麦克风,本文探讨的是基于源码自定义外部音视频数据。1、源码下载要开通VPN,下载基于iOS版本的源码https://webrtc.github.io/webrtc-org/native-code/ios/,需要注意的是如果源码在Linux平台下载,记得拷贝到mac之后要执行gclient sync同步
2021-07-23 15:49:55
1617
原创 WebRTC - ICE, STUN and TURN理解
WebRTC前期建立连接中,需要用到ICE、STUN以及TURN协议,下面对这三个协议做详细描述:1、ICE协议ICE - Interactive Connectivity Establishment:交互连接建立协议,是一种为基于offer和answer模型的UDP多媒体会话建立的NAT(网络地址翻译器)穿越协议,2、STUN协议3、TURN协议...
2021-04-20 18:12:05
609
原创 编解码 - 帧内预测过程剖解
帧内编码指的就是像预测、变换等压缩操作所使用的数据是来自本帧内,非其它视频流中的帧。下面详细讲解预测过程:1、寻找最佳预测像素集合(帧内预测的目标)使用已经编码或者重建好的相邻块来作为参考源,主要指的就是top或者left部分块(参考的是光栅扫描顺序),用以上参考块来预测当前的块,之所以用相邻块是因为跟当前块的相似度最高,相识度高意味着冗余度高,冗余度高意味着压缩率好。常用的预测模式:水平、垂直、对角线和其它角度方向,如下图所示:2、生成残余值就是预测块和当前块的差值,如上图所示,不
2021-04-19 14:37:59
1033
原创 基于块的编码器架构
现代的codecs,像H.265和VP9采用的是混合、基于块预测的架构,如下图所示:在这个模型中,视频序列的每一帧图片会被分为帧内预测和帧间预测帧,就是我们所说的I帧和P、B帧,编码器对于复杂的场景变换自动插入I帧,并且会有自己的检测算法。以下详细描述整个视频编码流程:1、拆分块:每一帧拆分成块形状区域:H.264的macroblocks,即我们说的16x16;VP9的64x64;H.265的CTU(编码树单元);AV1的128x128,然后每一块按照光栅顺序输入到编码管线当中。每一个块还可以递
2021-04-14 12:03:40
475
原创 OpenGL ES对于缓存的管理
缓存是指图形处理器能够控制和管理的连续的RAM。对缓存管理分三个阶段:1、构建阶段生成独一无二的标识符:glGenBuffer()。绑定运算使用的缓存:glBindBuffer()。初始化数据:glBufferData()or glBufferSubData()。2、启动阶段启用或者禁止缓存:glEnableVertextAttribArray() or glDisa...
2020-01-10 22:25:17
492
1
原创 Masonry布局过程剖解
自动布局的核心公式:obj1.attr = mutiplier * obj2.attr + constant (默认mutiplier = 1)第一阶段:创建约束创建者,收集约束试图、约束属性、参考试图、参考属性、约束关系、偏移量。1、创建MASConstraintMaker,初始化的时候传入当前试图作为约束试图。2、收集约束属性:通过调用约束创建者left、right、top、b...
2019-12-06 11:05:36
461
原创 AFNetworking请求和响应解析过程剖解
AFNetworking 3.x是我们熟悉的iOS常用的网络库,这里对它的源码进行分析,我们从最简单的get请求,剖解一下从请求开始,到响应拿到结果的过程。第一阶段:任务创建1、请求创建和序列化:NSMutableURLRequest创建、设置HTTP方法、设置头部信息、根据请求方法序列化参数到地址或者body里面来形成字符串。2、创建NSURLSessionDataTask...
2019-12-05 16:01:14
521
iOS Apps for Masterminds (第四版 - iOS 12)
2018-09-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅