FFmpeg 新旧API编码

本文介绍了FFmpeg从2.8版本到4.4版本的更新,并对比了新旧API在音频编码上的差异。主要内容包括:旧API的编码器注册、查找编码器、创建AVCodecContext、打开编码器、创建AVFrame、编码过程,以及新API的创建AVFrame和编码过程。通过对比,展示了FFmpeg新API如何简化和优化音频编码操作。
摘要由CSDN通过智能技术生成

背景

直播SDK一开始使用的FFmpeg 2.8版本的,现在的FFmpeg最新版已经是4.4了。播放器编辑器使用的FFmpeg都是4.0的版本;新版本FFmpeg在内部结构也做了优化,效率、稳定性相比较旧版本都提升了不少。所以直播SDK FFmpeg也要必须升级了。

简介

直播SDK内部主要3部分使用了FFmpeg:

  1. 使用libavcodec 编码Audio;
  2. 使用libavcodec 编码Video;
  3. 使用libavformat 合成/推流;

我会先讲解使用旧AP Ilibavcodec编码Audio、Video的过程。然后再讲解使用新API编码Audio、Video的过程,通过前后的对比就可以很容易的知道直播SDK FFmpeg升级点在哪里?这里只是通过分析新旧API的使用来对比出我们直播SDK的更新点,同时也可以学习如何通过FFmpeg新旧API编码Audio、Video、Muxer。因为篇幅有限,这里并不会具体去讲解每个API内部的源码逻辑,感兴趣可以自行了解。

libavcodec旧API编码Audio

文本阐述感觉是比较枯燥的,这里先上图了解下通过FFmpeg libavcodec模块旧API如何编码Audio。后面在具体介绍API的作用与功能。

动图封面

编码器注册

av_register_all()也可以使用avcodec_register_all()代替。查看源码可以发现av_register_all()内部调用了avcodec_register_all()。它的作用更就是注册所有的编解码器。

查找编码器

编码器注册好了之后就可以通过avcodec_find_encoder_by_name()、avcodec_find_encoder()获取我们想要的编码器。例如:通过avcodec_find_encoder(AV_CODEC_ID_AAC), 如果我们想使用libfdk-aac编码器编码音频必须在FFmpeg交叉编译的时候链接进去。否则我们在获取编码器的时候会使用FFmpeg内部默认的AAC编码器。

创建 AVCodecContext

当编码器创建好了之后,就需要根据编码器创建AVCodecContext,并初始化编码参数:采样里、声道数、采样格式等。

AVCodecContext *avCodecContext = avcodec_alloc_context3(codec);
avCodecContext->codec_type = AVMEDIA_TYPE_AUDIO;
avCodecContext->sample_rate = 44100;
avCodecContext->bit_rate = 64000;
avCodecContext->sample_fmt = AV_SAMPLE_FMT_S16;
avCodecConte
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FFmpeg是一个开源的跨平台的音视频处理框架,而FFmpeg Java API则是基于Java语言封装了FFmpeg功能的一个库。 使用FFmpeg Java API,我们可以在Java程序中方便地进行音视频的解码、编码、转码、剪切、合并等操作。通过调用FFmpeg的各种命令和参数,可以实现对音视频文件的各种处理需求。 FFmpeg Java API的主要特点包括: 1. 跨平台:由于基于Java语言开发,FFmpeg Java API可以在各种操作系统上使用,包括Windows、Linux、Mac等。 2. 功能强大:FFmpeg提供了丰富的音视频处理功能,FFmpeg Java API则封装了这些功能,使得在Java程序中可以方便地调用。 3. 简单易用:FFmpeg Java API提供了简洁的接口和方法,使得开发者可以快速上手,并快速实现各种音视频处理需求。 4. 高效性能:FFmpeg本身就是一个高性能的音视频处理框架,而FFmpeg Java API则是通过JNI技术与Java进行交互,保证了高效的执行速度和内存管理。 除了基本的音视频编解码功能外,FFmpeg Java API还支持基于滤镜的视频处理、音频处理、字幕添加等功能,使得开发者可以实现更加丰富的音视频处理效果。 总而言之,FFmpeg Java API是一个功能强大、跨平台、简单易用的音视频处理库,可以帮助开发者在Java程序中实现各种音视频处理需求。无论是简单的音视频格式转换,还是复杂的剪辑合成,FFmpeg Java API都能提供便捷的解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值