自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(6)
  • 收藏
  • 关注

原创 基于RTMP的音视频拉流实现3

要再增加⼀级缓冲区解决问题,即是从FrameQueue队列读取到Frame的数据后,先缓存到一个buffer⾥,然后再从该buffer读取数据给到SDL回调函数。这⾥的时间戳是 audio_buf 结束位置的时间戳,而不是 audio_buf 起始位置的时间戳,所以当 audio_buf 有剩余时需要减去。RTMPPlayer类:创建读取packet包线程,循环读取packet包放入相应的队列。Init:传递同步对象,packet queue对象,frame queue对象。

2023-05-02 14:11:31 215

原创 基于RTMP的音视频拉流实现2

Loop: 循环:1.等待音频包队列足够数据;2.循环:解码,设置帧的pts,获取可写帧,放入FrameQueue。3.获取packet,向解码器发送packet。初始化packet_queue_和frame_queue_的成员变量。H264Decoder类:封装H264解码器,初始化解码器,解码packet。Loop: 循环从包队列获取packet解码后放入图像队列。AudioDecodeLoop类:用于音频解码。VideoDecodeLoop类:用于视频解码。Init: 初始化解码器,设置参数。

2023-05-02 14:10:48 105

原创 基于RTMP的音视频拉流实现1

4)可非阻塞: push和pop的时候可以使用非阻塞的方式。2)时长计算:可以结算队列里的数据维持播放的时间长度。3)可阻塞:push和pop的时候可以使用阻塞的方式。1)有边界:可以设置最大缓存数量。6)可以唤醒队列进行退出。

2023-05-02 14:10:30 190 1

原创 RTMP推流的基本框架

8.VideoCapture类:继承CommonLooper,实现虚函数loop,不断循环以捕获视频数据。9.AudioCapture类:继承CommonLooper,实现虚函数loop,不断循环以捕获音频数据。3.RTMPPusher类:启动循环发送线程,将各种消息类型封装,然后基于RTMP发送到服务器。6.H264Encoder类:将接收的视频帧使用H264编码为packet。7.CommonLooper类:作为视频捕获和音频捕获的基类,多态。1.Properties类:用于保存相应的属性。

2023-04-23 18:00:53 312

原创 RTMP中Message和Chunk

如果一个流同时包含音频和视频数据包,它们将具有相同的Message Stream ID。Message StreamID 用于将音频和视频流标识为流的一部分。但是,每个音频和视频数据包都有自己的Chunk stream ID,用于将数据包标识为属于流中的特定Chunk stream。不同的 chunk stream ID 通常用于标识不同类型的数据、不同的数据来源,或者允许对 RTMP 协议中的数据传输进行更细粒度的控制。

2023-04-23 16:42:59 168

原创 ffmpeg音频重采样的实现

不同的⾳源有不同的格式,采样率等,所谓的重采样,就是改变⾳频的采样率、sample format、声道数等参数,使之按照我们期望的参数输出。c) 接收音频:从audio fifo中读取一帧数据并写入目标缓存。5.冲刷缓冲区,以及进行内存释放。

2023-04-23 15:27:08 332 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除