
音视频开发
文章平均质量分 92
音视频编解码 播放器 流媒体服务开发等等
C9程序猿
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
SRS流媒体服务器(5)源码分析之RTMP简单和复杂握手
学习RTMP握手逻辑前,需明确RTMP协议的连接流程及简单握手与复杂握手的区别。RTMP握手过程包括接收客户端发送的C0C1数据,解析C1,生成并发送S0S1S2数据,最后接收C2数据。复杂握手优先尝试,若失败则转为简单握手。复杂握手通过Schema0和Schema1两种方式解析C1,其中Schema0为固定位置验证,Schema1则通过时间戳计算Digest位置,安全性更高。简单握手中C1和S1从第9字节开始为随机数,S2是C1的复制,C2是S1的复制。代码示例展示了复杂握手和简单握手的实现细节,包括数据原创 2025-05-16 23:10:49 · 590 阅读 · 0 评论 -
WebRTC 服务器之Janus概述和环境搭建
Janus 是由 Meetecho 开发的通用 WebRTC 服务器,它为构建 WebRTC 应用程序提供了一个模块化框架。服务器目标:实际功能是在浏览器通过 Janus 核心连接的服务器端插件中实现的。这种模块化架构允许占用空间小,同时提供最大的灵活性。主要特点。原创 2025-05-03 13:55:47 · 1492 阅读 · 0 评论 -
基于 http-flv 的端到端延迟优化
先让ai看看直播互动体验和商业应用场景(电商直播、在线教育等)需要低延迟高延迟会影响互动体验,降低用户参与度推流端延迟:编码、发送缓存等拉流端延迟:边缘节点加载延迟、本地缓存GOP Cache 策略:缓存 N 组 GOP 序列,降低加载延迟观众端本地缓存优化:解决网络抖动,但会增加总视觉延迟通过调整推流、转码、CDN 等配置,实现总视觉延迟 3-6 秒可能存在技术瓶颈,如网络带宽探测、播放流畅性等需要更复杂的算法和策略来平衡延迟和流畅性。原创 2024-12-10 14:06:26 · 771 阅读 · 0 评论 -
WebRTC基础理论和通话原理
WebRTC(Web RealTime Communication)是 Google于2010以6829万美元从 Global IP Solutions 公司购买,并 于2011年将其开源,旨在建立一个互联网浏览器间的实时通信的平台,让 WebRTC技术成为 H5标准之一。它定义了一组标准化的API,用于在浏览器和移动应用程序中进行实时语音、视频和数据通信,无需安装任何插件或其他软件。原创 2024-11-07 13:41:07 · 1214 阅读 · 0 评论 -
RTP H264封包和解包分析
R: 1 bit保留位必须设置为0,接收者必须忽略该位。此处的Type就是NALU头中的Type,取1-23的那个值,表示 NAL单元荷载类型定义,原创 2024-10-10 14:38:33 · 1658 阅读 · 0 评论 -
RTMP协议分析
RTMP协议是应⽤层协议,是要靠底层可靠的传输层协议(通常是TCP)来保证信息传输的可靠性的。在基于传输层协议的链接建⽴完成后,RTMP协议也要客户端和服务器通过“握⼿”来建⽴基于传输层链接之上的RTMP Connection链接,在Connection链接上会传输⼀些控制信息,如SetChunkSize,SetACKWindowSize。其中CreateStream命令会创建⼀个Stream链接,⽤于传输具体的⾳视频数据和控制这些信息传输的命令信息。原创 2024-10-17 14:03:14 · 1242 阅读 · 0 评论 -
RTMP 传输结构分析
•RTMP中时间戳的单位为毫秒(ms)•时间戳为相对于某个时间点的相对值•时间戳的长度为32bit,不考虑回滚的话,最大可表示49天17小时2分钟47.296秒•Timestamp delta单位也是毫秒,为相对于前一个时间戳的一个无符号整数;可能为24bit或32bit•RTMP Message的extended时间戳 4个字节•大端存储。原创 2024-10-17 14:03:44 · 1078 阅读 · 0 评论 -
ffplay播放器 暂停、逐帧、音量、快进快退seek功能分析
本文章由理论结合实践阅读ffplay播放器源代码,清晰的将ffplay各种复杂功能解剖分析。学习资料分享。原创 2024-09-24 10:00:00 · 1665 阅读 · 0 评论 -
RTSP 音视频play同步分析
当然,这只是少数例外。要实现RTP媒体间同步,需要借助于RTCP,在RTCP的SR包中,包含有对,音频帧RTP时间戳和视频帧RTP时间戳通过对,都可以准确定位到绝对时间轴NTP上,音频帧和视频帧的相对时间关系就可以确定下来 了。首先,这个时间戳就是一个值且必须满足大家都来使用这个值,用来反映某个数据块的产生(采集)时间点的, 后采集的数据块的时间戳肯定是大于先采集的数据块的。第二,在实时流传输中,数据采集后立刻传递到RTP 模块进行发送,那么,其实,数据块的采集时间戳就直接作为RTP包的时间戳。原创 2024-10-10 13:36:22 · 1811 阅读 · 0 评论 -
RTP AAC封包和解包分析
有很多相通的知识,本文主要讲解aac封包细节。原创 2024-10-15 09:39:39 · 997 阅读 · 0 评论 -
ffplay播放器研究分析
PacketQueue设计思路:设计⼀个多线程安全的队列引⼊serial的概念,区别前后数据包是否连续,主要应⽤于seek操作。设计了两类特殊的packet——flush_pkt和nullpkt(类似⽤于多线程编程的事件模型——往队列中放⼊ flush事件、放⼊null事件),我们在⾳频输出、视频输出、播放控制等模块时也会继续对flush_pkt和 nullpkt的作⽤展开分析。创建视频图像缩放上下文的函数。第⼀参数可以传NULL,默认会开辟⼀块新的空间。原创 2024-09-24 18:02:44 · 1213 阅读 · 0 评论 -
RTSP RTP RTCP SDP基础知识
实时流传输协议(RTSP:Real Time Streaming Protocol)是⼀种⽹络传输协议,旨在发送低延迟流。该协议由RealNetworks,Netscape和哥伦⽐亚⼤学的专家在1996年开发。它定义了应如何打包流中的数据以进⾏传输。RTSP 用于创建和控制流媒体服务器上的多媒体会话。比如多媒体流播放、暂停、快进和快退。RTSP 常用于视频会议、视频监控、远程教学和视频点播等场景。- RTP 负责传输多媒体数据(如音频和视频)。服务器默认端口号5004。原创 2024-10-09 17:46:59 · 2376 阅读 · 0 评论 -
flv格式分析与解复用
FLV(Flash Video)是Adobe公司推出的⼀种流媒体格式,由于其封装后的,⾮常适合于互联⽹上使⽤。⽬前主流的视频⽹站基本都⽀持FLV。采⽤FLV 格式封装的⽂件后缀为.flv。FLV封装格式是由⼀个⽂件头(file header)和 ⽂件体(file Body)组成。其中,FLV body由⼀ 对对的(Previous Tag Size字段 + tag)组成。Previous Tag Size字段 排列在Tag之前,占⽤4 个字节。原创 2024-08-23 14:32:58 · 1722 阅读 · 0 评论 -
ffmpeg AAC音频编码介绍
PCM(Pulse Code Modulation,脉冲编码调制)⾳频数据是未经压缩的⾳频采样数据裸流,它是由模拟信 号经过采样、量化、编码转换成的标准数字⾳频数据。描述PCM数据的6个参数:1. Sample Rate : 采样频率。8kHz(电话)、44.1kHz(CD)、48kHz(DVD)。2. Sample Size : 量化位数。通常该值为16-bit。3. Number of Channels : 通道个数。原创 2024-09-01 21:52:12 · 1842 阅读 · 0 评论 -
⾳频重采样及基本概念
所谓的重采样,就是改变⾳频的采样率、sample format、声道数等参数,使之按照我们期望的参数输出。比如降低采样率 减少文件占用内存。原创 2024-09-01 18:22:59 · 1629 阅读 · 0 评论 -
ffmpeg H264编码实战
◼ 为了能够在最后熵编码的时候压缩率更高,对于送到熵编码(以行程编码为例)的“像素串”,包含的0越多,越能提高压缩率。为了达到这个目标:◼ 先通过帧内预测或者帧间预测去除空间冗余和时间冗余,从而得到一个像素值相比编码块小很多的残差块。◼ 然后再通过 DCT 变换将低频和高频信息分离开来得到变换块然后再对变换块的系数做量化。原创 2024-09-04 18:20:02 · 1946 阅读 · 0 评论 -
音视频开发基石之H264编码分析
GOP 指的就是两个I帧之间的间隔. ⽐较说GOP为120,如果是720 p60 的话,那就是2s⼀次I帧.在视频编码序列中,主要有三种编码帧:I帧、P帧、B帧,如下所示:1. I帧即Intra-coded picture(帧内编码图像帧),不参考其他图像帧,只利⽤本帧的信息进⾏编码。2. P帧即Predictive-codedPicture(预测编码图像帧),利⽤之前的I帧或P帧,采⽤运动预测的⽅式进⾏帧间预测编码。原创 2024-08-14 19:19:13 · 1541 阅读 · 0 评论 -
windows环境编译ffmpeg +visual studio 2022
1.坑有点多,主要出现在路劲上。比如export LIB=$LIB";D:\msys64\usr\local\lib" 加入了也没什么用,应该是msys2子系统不能识别D:xxxx 使用/usr/local/lib这种方法就可以。2.在编译三方库时不是很顺利,CC=cl --toolchain=msvc 反正关于msvc编译器的命令,就有问题。原创 2024-08-08 15:24:49 · 1361 阅读 · 0 评论 -
ffmpeg 音视频解码
1.AVCodecParser:⽤于解析输⼊的数据流并把它分成⼀帧⼀帧的压缩编码数据。⽐较形象 的说法就是把⻓⻓的⼀段连续的数据“切割”成⼀段段的数据。2.FFmpeg提供了两组函数,分别⽤于编码和解码:解码:调⽤avcodec_receive_frame(),如果成功会返回⼀个包含未压缩数据的 AVFrame。编码:调⽤avcodec_receive_packet(),如果成功会返回⼀个包含压缩数据的 AVPacket。原创 2024-09-01 13:05:47 · 1113 阅读 · 0 评论 -
音视频开发 sdl库
◼ SDL_Window 代表了一个“窗口”◼ SDL_Renderer 代表了一个“渲染器”◼ SDL_Texture 代表了一个“纹理”◼ SDL_Rect 一个简单的矩形结构存储RGB和存储纹理的区别:比如一个从左到右由红色渐变到蓝色的矩形,用存储RGB的话就需要把矩形中每个点的具体颜色值存储下来;而纹理只是一些描述信息,比如记录了矩形的大小、起始颜色、终止颜色等信息,显卡可以通过这些信息推算出矩形块的详细信息。所以相对于存储RGB而已,存储纹理占用的内存要少的多理解:以一条美食街举例。原创 2024-08-05 20:52:48 · 508 阅读 · 0 评论 -
深入理解音视频pts,dts,time_base以及时间数学公式
总结:ffmpeg提供了很多现成的api函数,我们在使用前需要知道它们之间的关系,不然在求学的道路上,很难快速学习。必须佩服开发人员对时间的理解,我们在求学也要多留意世界的奥妙,参悟宇宙法则,再结合实际进行创新。学习资料分享。原创 2024-09-23 14:23:17 · 1686 阅读 · 0 评论 -
AAC格式分析
AAC是编码格式,ADTS是一种容器格式,在处理AAC音频时需要注意两者的区别和联系。ADTS格式在每个AAC音频帧的开头添加了一些头部信息,如采样率、声道数等,用于指示这个音频帧的属性。这样可以方便接收方识别和解析音频数据。原创 2024-08-15 12:16:02 · 1497 阅读 · 0 评论 -
音视频解码 AVIO内存输入模式
下列主要介绍使用avio内存输入模式,进行初始化,数据来源绑定以及读取数据。//1.自定义io 稍后必须用av_free()释放/**2.定义io上下文* 分配并初始化一个AVIOContext对象,用于缓冲式I/O操作。之后必须使用avio_context_free()函数释放该对象。* @param buffer 用于通过AVIOContext进行输入/输出操作的内存块。* @param buffer_size 缓冲区的大小对于性能非常重要。原创 2024-09-01 13:42:59 · 875 阅读 · 0 评论 -
ffmpeg 内存模型
最近在学习ffmpeg,阅读了一些packet和frame关于内存操作的api。在此长话短说,只说核心点。原创 2024-08-11 18:18:58 · 811 阅读 · 0 评论 -
ffplay音视频同步分析
double pts;// 当前帧(待播放)显示时间戳,播放后,当前帧变成上一帧//两时间差值,可以理解为持续时间// 最后一次更新的系统时钟// 时钟速度控制,用于控制播放速度int serial;int paused;// = 1 说明是暂停状态} Clock;audio:视频同步到⾳频。上⼀节中的A被触发,video输出需要作同步,同步的参考 (get_master_clock)是audclk.video:⾳频同步到视频。原创 2024-09-23 14:34:31 · 989 阅读 · 0 评论