代码改变世界

随笔分类 -  视频编解码

FFMpeg笔记(十三)升级FFmpeg6.1

2024-03-24 11:21 by jiayayao, 57 阅读, 收藏, 编辑
摘要: FFmpeg最新版已更新6.1,许多之前标记为deprecated的api被彻底删除了,同时也增加了很多新的特性和功能。FFmpeg团队持续优化代码,新版本往往也具有更高的编码和解码效率,更多的格式支持,因此及时更新FFmpeg版本,有利于提升应用的处理速度和资源利用率。本文记录项目中FFmpeg更 阅读全文

iOS VideoToolBox decoder解码失败(-12909和-12911)问题解决(二)

2022-01-04 22:05 by jiayayao, 904 阅读, 收藏, 编辑
摘要: 之前解决过一个-12909报错的问题,后来在工作中又遇到了。这次是解码没有报错,但是callback函数中返回了-12909,还是一样的分析思路。最终定位: 问题原因: 这次出问题的视频源是iPhone录制和拍摄的mp4视频,其extradata中的pps有两个,如果使用CMVideoFormatD 阅读全文

真无缝切换

2019-12-21 22:02 by jiayayao, 986 阅读, 收藏, 编辑
摘要: 视频切换清晰度时,用户无感知,那才是最好的播放体验。 目前一些播放器采用的切换清晰度是通过切换播放器来实现的,这其实是很low的。 切换播放器本身不能准确校准时间戳,同时还存在视频回放或跳播问题。 因此有必要实现视频播放时的真无缝切换,让用户无感知。 阅读全文

iOS的VideoToolBox与Android的MediaCodec对PTS的处理异同

2019-12-21 20:42 by jiayayao, 1463 阅读, 收藏, 编辑
摘要: 视频源,不论是从采集设备采集到的,还是本身压制好的文件,其流中的数据都是按照编码顺序存储的。比如1 2 3 4 5,5帧视频数据,1编码成I帧,2 3 4编码成B帧,5编码成P帧。 编码过程: 1. 编码1为I帧; 2. 2,3,4准备编码为B帧,先缓存下来,记录其时间点作为PTS; 3. 再编码5 阅读全文

H265码流格式

2019-06-22 17:56 by jiayayao, 5735 阅读, 收藏, 编辑
摘要: 一、H265码流格式 VPS:视频参数集,用于传输视频分级信息,有利于兼容标准在可分级视频编码或多视点视频的扩展。 NALU header定义: H264的NALU type是首字节&0x1f,H265的NALU type是(首字节&0x7E)>>1; NALU type定义: 二、丢帧 在性能不足 阅读全文

视频播放器的丢帧逻辑

2018-11-26 23:58 by jiayayao, 2630 阅读, 收藏, 编辑
摘要: 最近在做播放器在电视盒子上的适配,发现一个严重的问题:低端机型解码能力不足。表现是丢帧,音画不同步。对此,有两种解决方法。 一、解码前丢帧 思路是记录25帧(1s)解码的总时间decodeTotalTime,减去25帧播放的总时间playTotalTime得到差值diff。如果diff大于0,说明解 阅读全文

为提高播放数据所做的努力

2018-10-03 16:40 by jiayayao, 181 阅读, 收藏, 编辑
摘要: 成功率 1. find_stream_info失败后的重试,一般为3次; 2. 细分错误码,找到具体的错误原因; 秒播率 1. 先prepare,再setsurface(即java和native并行执行创建逻辑);和除此之外的其他并行逻辑; 2. 设置AVFormat的probesize和max_a 阅读全文

[转载]FFmpeg中使用libx264进行码率控制

2018-10-01 15:01 by jiayayao, 4595 阅读, 收藏, 编辑
摘要: 1. X264显式支持的一趟码率控制方法有:ABR, CQP, CRF. 缺省方法是CRF。这三种方式的优先级是ABR > CQP > CRF. if ( bitrate ) rc_method = ABR; else if ( qp || qp_constant ) rc_method = CQP 阅读全文

iOS VideoToolBox decoder解码失败(-12909和-12911)问题解决

2018-09-02 20:21 by jiayayao, 4627 阅读, 收藏, 编辑
摘要: 对于任何H.264解码器而言,都要将SPS和PPS信息传递给解码器。FFmpeg内部做了设置,所以没有显示设置。但是对于硬件解码器来讲,开发者必须手动设置。另外,使用FFmpeg解码出来的视频帧是以YUV格式存储于内存中的,但是对于硬件解码器来讲,一般都是直接解码到显存,便于后续的处理与渲染。H.2 阅读全文

H.264从SPS中提取视频宽高

2018-08-05 23:12 by jiayayao, 2945 阅读, 收藏, 编辑
摘要: H.264有两种封装模式: (1)annexb模式:传统模式,使用start code来分隔NAL, SPS和PPS是在ES流的头部; (2)mp4模式:没有start code,使用NALU长度(固定字节,通常为4个字节)来分隔NAL。AVCodecContext的extradata内部保存着分隔 阅读全文

视频直播时的QoS策略

2017-07-28 14:23 by jiayayao, 3602 阅读, 收藏, 编辑
摘要: 一、如何判断当前的网络状况 可以以发送一帧视频数据的时间为依据,判断当前网络拥塞情况。 网络中出现丢包和抖动,导致接收端接收数据超时,会激发发送端数据重传,重传机制本身挤占网络带宽,导致sendbuffer中的数据进一步发送失败,致使sendbuffer中的数据不断增多,达到上溢的警戒线,此时应用层 阅读全文

H.264的码率控制:CBR和VBR

2017-07-20 17:15 by jiayayao, 4284 阅读, 收藏, 编辑
摘要: CBR: Constants Bits Rate, 静态比特率。 比特率在流的进行过程中基本保持恒定并且接近目标比特率,当对复杂内容编码时质量会下降。 在流式播放方案中使用CBR编码最为有效;优点是带宽恒定;缺点是画面变化较快时,视频质量无法达到要求,同时也会在简单的内容上浪费带宽; VBR: Va 阅读全文

H.264编码格式简单分析

2017-06-27 19:08 by jiayayao, 6163 阅读, 收藏, 编辑
摘要: 本文记录一下H.264的编码格式。H.264官方文档:https://github.com/jiayayao/DataSheet/tree/master/encode-decode/h264。 一、H.264编码格式 H.264从层次来看分为两层:视频编码层(VCL, Video Coding La 阅读全文

vlc源码分析(六) 调用OpenMAX硬解码H.265

2017-06-08 20:13 by jiayayao, 7638 阅读, 收藏, 编辑
摘要: H.265(HEVC)编码格式能够在得到相同编码质量视频的前提下,使用相当于H.264(AVC)一半的存储容量,虽然H.265的算法复杂度比H.264高一个数量级,但是硬件水平在不断提高,因此H.265使用场合逐渐多了起来。好多硬件厂商芯片内部实现了H.265的硬解码。最近调试了vlc-androi 阅读全文

vlc源码分析(五) 流媒体的音视频同步

2017-05-22 19:26 by jiayayao, 7808 阅读, 收藏, 编辑
摘要: vlc播放流媒体时实现音视频同步,简单来说就是发送方发送的RTP包带有时间戳,接收方根据此时间戳不断校正本地时钟,播放音视频时根据本地时钟进行同步播放。首先了解两个概念:stream clock和system clock。stream clock是流时钟,可以理解为RTP包中的时间戳;system 阅读全文

所有流媒体协议,编解码规范和媒体封装格式的datasheet的下载地址

2017-05-16 15:18 by jiayayao, 558 阅读, 收藏, 编辑
摘要: https://github.com/jiayayao/DataSheet All datasheet about stream protocol, encode-decode spec and media format. 所有流媒体协议,编解码规范和媒体封装格式的datasheet的下载地址,欢迎 阅读全文

vlc源码分析(四) 调用libts接收TS流

2017-05-15 20:31 by jiayayao, 4807 阅读, 收藏, 编辑
摘要: 代码分析前,先要了解TS流基本概念:TS流之基本概念。 VLC解析TS流是通过libts库来分离的,libts库使用libdvbpsi库来解TS表。VLC使用模块加载机制来加载libts库,具体调用的文件是ts.c. 1. libts库在加载的时候,会将以下如下两个函数注册下去,当接收到PAT或者P 阅读全文

TS流基本概念

2017-05-15 20:20 by jiayayao, 29397 阅读, 收藏, 编辑
摘要: 在MPEG-2标准中,有两种不同类型的码流输出到信道:一种是节目码流(Program Stream, PS),适用于没有误差产生的媒体存储,如DVD等存储介质;另一种是传送流(Transport stream, TS),适用于有信道噪声产生的传输,目前TS流广泛应用于广播电视中,如机顶盒等。 一、基 阅读全文

vlc源码分析(二) 播放流程

2017-04-23 13:57 by jiayayao, 10514 阅读, 收藏, 编辑
摘要: 当点击播放文件或者输入要播放的文件后,vlc会执行一系列的流程。 首先需要了解视频以及流媒体处理及播放的流程,由链接中的描述,视频以及流媒体处理时,首先要解协议(http,rtmp,rtsp等),然后是解封装(mp4,mkv,avi等),获得音频码流和视频码流,分别解码后,再根据时间戳进行同步。使用 阅读全文