代码改变世界

FFMpeg笔记(十四)继续说说FFmpeg 升级6.1 遇到的那些坑

2024-06-08 16:02 by jiayayao, 76 阅读, 0 推荐, 收藏, 编辑
摘要:一、mp4 秒播率下降 灰度阶段发现秒播率略低0.x%,以为是灰度的数据抖动。上线后短视频业务方找过来,说秒播率明显下降。一起分析,发现业务方不止关心1秒秒播率,也关心首次播放vv 的200ms 秒播率,筛选出来发现数据大降。。然后我就开始分析。思路是将起播分为多个阶段,查数据看哪个阶段的耗时有明显 阅读全文

FFMpeg笔记(十三)FFmpeg 升级6.1

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

FFMpeg笔记(十二)MP4 box解析

2023-05-27 12:38 by jiayayao, 1154 阅读, 0 推荐, 收藏, 编辑
摘要:mp4是MPEG-4 Part 14的实现,包含3大box。 一、ftyp file type box,包含视频文件使用的mp4标准,也作为probe mp4的标志; 二、moov 包含媒体的元数据信息,包含一个mvhd(也就是header box)和若干个trak(track)。trak包含一条音 阅读全文

FFMpeg笔记(十一)常用FFmpeg命令行

2022-02-14 20:29 by jiayayao, 221 阅读, 0 推荐, 收藏, 编辑
摘要:获取yuv文件(100帧) ffmpeg -i /Users/jiayayao/Documents/Samples/video/3_1280_720_30fps_h264.mp4 -vframes 100 output.yuv 获取全部yuv文件 ffmpeg -i /Users/jiayayao/ 阅读全文

WebRTC笔记(四)NAT、STUN和ICE

2020-07-12 21:44 by jiayayao, 1323 阅读, 0 推荐, 收藏, 编辑
摘要:一、NAT NAT(Network Address Translator),网络地址转换。NAT是在IPv4地址日益缺乏的情况下产生一种缓解地址问题的方案。它的主要目的是为了地址重用。 NAT的基本思想是,由NAT设备(比如家用路由器)修改从私有网络发送到互联网的IP报文的源地址字段,以及修改从互联 阅读全文

WebRTC笔记(二)NetEQ模块简单分析

2020-04-05 18:33 by jiayayao, 1982 阅读, 0 推荐, 收藏, 编辑
摘要:NetEQ是WebRTC的音频处理模块,主要包含MCU和DSP两大处理单元,包含自适应缓冲区、语音解码器、抖动控制和丢包隐藏模块及播放四大部分。MCU的主要作用的安排数据包的插入和控制数据包的输出。插入的关注点是插入的位置,输出的关注点是输出的时间。抖动消除的算法思路在MCU控制模块中得以体现。DS 阅读全文

FFMpeg笔记(八) 读取RTP数据时的PTS计算[转载]

2020-04-04 21:29 by jiayayao, 3272 阅读, 0 推荐, 收藏, 编辑
摘要:结构体struct RTPDemuxContext中有若干时间戳相关的成员,含义如下 timestamp:上一个接收到的RTP时间戳 base_timestamp:第一个接收到的RTP时间戳 cur_timestamp:未知 unwrapped_timestamp:假如rtp时间没有32位溢出的话, 阅读全文

LeetCode 9. 回文数

2020-02-09 23:00 by jiayayao, 163 阅读, 0 推荐, 收藏, 编辑
摘要:判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 示例 1: 输入: 121输出: true示例 2: 输入: -121输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3: 输入: 10输出: 阅读全文

一个线程相关的高CPU占用问题的定位

2019-12-21 21:54 by jiayayao, 692 阅读, 0 推荐, 收藏, 编辑
摘要:最近在重构项目代码时,发现两个线程同时访问一个加锁的std::list队列时,会出现恶性竞争锁的现象。 具体现象是A线程总是拿不到锁,B线程抢占几次后,A才抢占到。 由于是重构项目,也无法通过回滚代码来解决。 最终定位问题是,重构时对std::list队列单独封装了一个类导致的。单独封装一个类,那么 阅读全文

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

2019-12-21 20:42 by jiayayao, 1545 阅读, 0 推荐, 收藏, 编辑
摘要:视频源,不论是从采集设备采集到的,还是本身压制好的文件,其流中的数据都是按照编码顺序存储的。比如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 阅读全文