音视频开发
文章平均质量分 84
相知-
这个作者很懒,什么都没留下…
展开
-
ffplay播放器剖析(8)----逐帧/音量调节/快进快退/倍数分析
就是SDL_MixAudioFormat调用audio_volume进行修改音量,一开始是都初始化为0,如果不是静音的话那么就修改音量,否则就是0给SDL输出,因此可以得知静音只需要初始化为0即可!快进之前先获取上一帧pts然后赋值给pos,incr是快进时间,如果通过码流算出对应的是位置,然后pos加上incr后通过stream_seek进行seek。不同的方案是由flags来确定的,当我们使用avformat_seek_file时会传入flags,然后avformat_seek_file会自己判断。原创 2023-07-24 22:21:02 · 755 阅读 · 0 评论 -
ffplay播放器剖析(7)----音视频暂停模块分析
2.toggle_pause调用stream_toggle_pause。这个函数可以知道,如果当前状态是暂停的话,那么就会进入if函数。3.stream_toggle_pause修改暂停变量。get_clock当是暂停状态时就是获取时钟的pts。1.通过SDL触发事件调用toggle_pause。这个就是在之前的基础上加上暂停到开始的时间。看一下if函数流程,首先我们知道我们。就是将paused取反。同理是设置外部时钟的。原创 2023-07-24 19:45:58 · 923 阅读 · 0 评论 -
ffplay播放器剖析(6)----音视频同步分析
具体以什么为基准时就是看你设置的参数,然后通过get_master_clock来获取主时钟,因此3大时钟都会 设置!!!if(!原创 2023-07-24 15:00:24 · 1062 阅读 · 0 评论 -
ffplay播放器剖析(5)----视频输出剖析
首先判断pictq是否为空(调用frame_queue_nb_remaining判断是否还有未显示的帧),如果为空则继续调用video_display显示上一帧。本质就是通过上一帧和待显示帧pts来计算的,如果考虑到同步,则还需要考虑当前与主时钟的差距来决定是重复上一帧,还是丢帧,还是正常显示下一帧(待显示帧)frame中的像素格式是FFmpeg中定义的像素格式,FFmpeg中定义的很多像素格式与SDL中定义的像素格式是同一种格式,只不过是名称不同。原创 2023-07-21 16:40:13 · 621 阅读 · 0 评论 -
ffplay播放器剖析(3)----解码线程剖析
通过decoder_decode_frame读取到帧后,对该帧进行判断是否要丢弃,原理就说看视频帧和其他帧同步的差值为多少,get_master_clock就说获取其他帧的pts,然后和当前视频帧的pts差值就说diff,然后通过判断条件是否选择丢弃。主要是通过get_video_frame获取到frame,并且计算出真正的pts,duration,然后通过queue_picture插入到frame视频队列中去。因为真正读取帧的函数是decoder_decode_frame,由该函数控制帧类型的.原创 2023-07-18 16:27:18 · 118 阅读 · 0 评论 -
ffplay播放器剖析(2)----读取线程刨析
通过流的编码器信息赋值给编码器上下文后,通过其解码器信息中的id通过avcodec_find_decoder查找编码器,然后如果用户指定编码器的话,就通过avcodec_find_decoder_by_name使用用户指定的解码器,然后调用avcodec_open2打开解码器.stream_start_time是获取流的起始时间,pkt_ts是当前pkt的pts,pkt_in_play_range就是判断该pkt是否在时间时间范围内部。原创 2023-07-17 20:03:14 · 349 阅读 · 0 评论 -
ffplay播放器剖析(1)----数据结构剖析
ffplay是FFmpeg源码提供的一个播放器,它是由FFmpeg和SDL的API实现的播放器,对后续播放器的二次开发有着借鉴意义,比如哔哩哔哔哩的ijkplayer.原创 2023-07-16 20:04:31 · 310 阅读 · 0 评论 -
音视频编码实战-------pcm+yuv数据转成MP4
avcodec_parameters_from_context:将编码器上下文中的参数拷贝到音视频流中的编码器参数中AVCodecParameters。编码器上下文的flags要设置一下AV_CODEC_FLAG_GLOBAL_HEADER这个参数,不然的话很多视频播放器是播放不了的,尤其是视频流。av_packet_alloc得到的数据必须要设置stream_index,不然stream_index都默认为0了。swr_alloc_set_opts:设置重采样配置参数,并且分配重采样器上下文。原创 2023-07-12 21:38:10 · 1313 阅读 · 0 评论 -
视频编码流程 YUV数据编码为H264数据
视频编码时,设置编码器上下文参数有:码率,宽,高,格式,帧率等。通常使用av_image_get_buffer_size来计算。然后计算一帧的数据:宽 * 高 * 格式占用字节数。av_opt_set就是用来设置参数的。frame设置:宽,高,格式。原创 2023-07-08 18:28:53 · 1125 阅读 · 0 评论 -
音频编码流程 ----- PCM编码为AAC格式
确保帧数据可写,尽可能避免数据复制.如果帧可写,则不执行任何操作,如果不可写,则分配新缓冲区并复制数据.返回: 成功时为 0,错误时为负 AVERROR.这个函数就是将你输入的一帧数据写入AVFrame格式输出,便于后面编码send,recvice使用。原创 2023-07-08 16:07:25 · 1528 阅读 · 0 评论 -
AVIO内存输入模式
创建AVIOContext,然后创建AVFormatContext,将AVIOContext绑定到AVFormatContext->pb,最后调用avformat_open_input函数即可,只不过这时avformat_open_input函数的第二个参数url就不用传了,直接传入NULL即可。write_packet:是写入的钩子函数,当需要写入时调用该函数。read_packet:是读取的钩子函数,当需要读取时调用该函数。seek:是随机访问的钩子函数,当需要随机访问时调用该函数。原创 2023-06-23 21:41:42 · 195 阅读 · 0 评论 -
音视频解码流程解析
文章目录1.音频解码过程2.FFmpeg解音频流程3.关键函数说明1.音频解码过程2.FFmpeg解音频流程3.关键函数说明avcodec_find_decoder:根据指定AVCodecID查找注册的解码器av_parser_init:初始化AVCodecParserContextavcodec_alloc_context3:创建AVCodecContext上下文avcodec_open2:将解码器和解码器上下文进行关联av_parser_parse2:解析获得一个AVPacket原创 2023-06-23 21:08:04 · 725 阅读 · 0 评论 -
FLV格式分析
FLV(Flash Video)是Adobe公司推出的一种流媒体格式,由于其封装后的音视频简单等特点,非常使用于互联网的使用. 目前主流的视频网站基本上都支持FLV,其格式封装的文件后缀为.flv。原创 2023-06-23 19:58:00 · 1071 阅读 · 0 评论 -
H264 NALU分析
H.264从1999年开始,到2003年形成草案,最后在2007年定稿有待核实。在ITU的标准⾥称为H.264,在MPEG的标准⾥是MPEG-4的⼀个组成部分–MPEG-4 Part 10,⼜叫Advanced Video Codec,因此常常称为MPEG-4 AVC或直接叫AVC。原创 2023-06-17 21:20:32 · 813 阅读 · 0 评论 -
AAC ADTS格式分析
AAC音频格式:Advanced Audio Coding(⾼级⾳频解码),是⼀种由MPEG-4标准定义的有损⾳频压缩格式,由Fraunhofer发展,Dolby, SonyAT&T是主要的贡献者。ADIF:Audio Data Interchange Format ⾳频数据交换格式。这种格式的特征是可以确定的找到这个⾳频数据的开始,不需进⾏在⾳频数据流中开始的解码,即它的解码必须在明确定义的开始处进⾏。故这种格式常⽤在磁盘⽂件中。ADTS的全称是Audio Data Transport Stream。原创 2023-06-16 20:25:46 · 1246 阅读 · 0 评论 -
FFmpeg 内存模型分析
有了前面的知识铺垫,不难分析出read_frame_internal是调用ff_packet_list_put来获取AVPacket的,但是这里要注意ff_packet_list_put并不是简单的将AVPacket给read_frame_internal。我们解复用后,媒体流数据就会被分离开来,分别生成对应AVPacketList,然后通过av_read_frame读取一个AVPacket来读取,然而如果有一个新的AVPacket也想要指向之前的AVPacket,那么内存模型应该是什么样子的呢?原创 2023-06-16 00:18:15 · 1195 阅读 · 0 评论 -
FFmpeg编程入门
•AVUtil:核心工具库,下面的许多其他模块都会依赖该库做一些基本的音视频处理操作。•AVFormat:文件格式和协议库,该模块是最重要的模块之一,封装了Protocol层和Demuxer、Muxer层,使得协议和格式对于开发者来说是透明的。•AVCodec:编解码库,封装了Codec层,但是有一些Codec是具备自己的License的,FFmpeg是不会默认添加像libx264、FDK-AAC等库的,但是FFmpeg就像一个平台一样,可以将其他的第三方的Codec以插件的方式。原创 2023-06-14 00:09:11 · 1178 阅读 · 2 评论 -
FFmpeg命令实战(中)
ffmpeg -i test.mp4 -r 15 -codec copy output.mp4 (错误命令,没有改变帧率)保留编码格式:ffmpeg -i test.mp4 -vcodec copy -an test_copy.h264。强制格式:ffmpeg -i test.mp4 -vcodec libx264 -an test_h264.mp4。保留编码格式:ffmpeg -i test.mp4 -acodec copy -vn test.aac。原创 2023-05-22 01:39:13 · 591 阅读 · 0 评论 -
FFmpeg命令实战(上)
这里有两个压缩包,ffmpeg-master-latest-win64-gpl-shared这个里面包含了ffmpeg的lib文件,可以进行ffmpeg的二次开发,ffmpeg-master-latest-win64-gpl只包含了ffmpeg的工具。-codec:media_specifier codec_name 强制使用设置的多媒体解码器,media_specifier可用值为a(音频), v(视频)和s字幕。-bytes 按字节进行定位拖动(0=off 1=on -1=auto)。原创 2023-05-20 02:35:55 · 1618 阅读 · 0 评论