ffmpeg编解码API

int avcodec_decode_audio3(AVCodecContext *avctx, int16_t *samples,

                         int *frame_size_ptr,

                         AVPacket *avpkt);

// 解码音频流AVPacket

// 使用av_read_frame读取媒体流后需要进行判断,如果为音频流则调用该函数解码

// 返回结果<0时失败,此时程序应该退出检查原因

// 返回>=0时正常,假设 读取包为:AVPacket vPacket 返回值为 int vLen; 每次解码正常时,对vPacket做

// 如下处理:

//   vPacket.size -= vLen;
//   vPacket.data += vLen;

// 如果 vPacket.size==0,则继续读下一流包,否则继续调度该方法进行解码,直到vPacket.size==0

//

 

int avcodec_decode_video2(AVCodecContext *avctx, AVFrame *picture,

                         int *got_picture_ptr,

                         AVPacket *avpkt);

// 解码视频流AVPacket

// 使用av_read_frame读取媒体流后需要进行判断,如果为视频流则调用该函数解码

// 返回结果<0时失败,此时程序应该退出检查原因

// 返回>=0时正常,假设 读取包为:AVPacket vPacket 返回值为 int vLen; 每次解码正常时,对vPacket做

// 如下处理:

//   vPacket.size -= vLen;
//   vPacket.data += vLen;

// 如果 vPacket.size==0,则继续读下一流包,否则继续调度该方法进行解码,直到vPacket.size==0

// 返回 got_picture_ptr > 0 时,表示解码到了AVFrame *picture,其后可以对picture进程处理

int av_read_frame(AVFormatContext *s, AVPacket *pkt);

// 从输入源文件容器中读取一个AVPacket数据包

// 该函数读出的包并不每次都是有效的,对于读出的包我们都应该进行相应的解码(视频解码/音频解码),

// 在返回值>=0时,循环调用该函数进行读取,循环调用之前请调用av_free_packet函数清理AVPacket

 

void av_free_packet(AVPacket *pkt);

// 释放AVPacket对象

 

void av_init_packet(AVPacket *pkt);

// 使用默认值初始化AVPacket

// 定义AVPacket对象后,请使用av_init_packet进行初始化

// AVPacket是个很重要的结构,该结构在读媒体源文件和写输出文件时都需要用到

// int64_t pts; 显示时间戳

// int64_t dts; 解码时间戳

// uint8_t *data; 包数据

// int   size; 包数据长度

// int   stream_index; 包所属流序号

// int   duration; 时长

// 以上信息,如果是在读媒体源文件那么avcodec会初始化,如果是输出文件,用户需要对以上信息赋值

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值