• 大小: 19.05MB
    文件类型: .zip
    金币: 2
    下载: 0 次
    发布日期: 2024-01-30
  • 语言: 其他
  • 标签: FFmpeg  音频  PCM  AAC  编码  

资源简介

该音频编码器实现了音频PCM采样数据编码为AAC码流。 尽管该音频编码器的代码十分简单,但是几乎包含了使用FFMPEG编码一个音频所有必备的API。十分适合FFmpeg的初学者。 1.1版本增加了多平台下编译的支持:Windows,MacOS,以及Linux。

资源截图

代码片段和文件信息

/**
 *最简单的基于FFmpeg的音频编码器
 *Simplest FFmpeg Audio Encoder
 *
 *雷霄骅 Lei Xiaohua
 *leixiaohua1020@126.com
 *中国传媒大学/数字电视技术
 *Communication University of China / Digital TV Technology
 *http://blog.csdn.net/leixiaohua1020
 *
 *本程序实现了音频PCM采样数据编码为压缩码流(MP3,WMA,AAC等)。
 *是最简单的FFmpeg音频编码方面的教程。
 *通过学习本例子可以了解FFmpeg的编码流程。
 *This software encode PCM data to AAC bitstream.
 *It‘s the simplest audio encoding software based on FFmpeg. 
 *Suitable for beginner of FFmpeg 
 */

#include 

#define __STDC_CONSTANT_MACROS

#ifdef _WIN32
//Windows
extern “C“
{
#include “libavcodec/avcodec.h“
#include “libavformat/avformat.h“
};
#else
//Linux...
#ifdef __cplusplus
extern “C“
{
#endif
#include 
#include 
#ifdef __cplusplus
};
#endif
#endif


int flush_encoder(AVFormatContext *fmt_ctxunsigned int stream_index){
int ret;
int got_frame;
AVPacket enc_pkt;
if (!(fmt_ctx->streams[stream_index]->codec->codec->capabilities &
CODEC_CAP_DELAY))
return 0;
while (1) {
enc_pkt.data = NULL;
enc_pkt.size = 0;
av_init_packet(&enc_pkt);
ret = avcodec_encode_audio2 (fmt_ctx->streams[stream_index]->codec &enc_pkt
NULL &got_frame);
av_frame_free(NULL);
if (ret < 0)
break;
if (!got_frame){
ret=0;
break;
}
printf(“Flush Encoder: Succeed to encode 1 frame!\tsize:%5d\n“enc_pkt.size);
/* mux encoded frame */
ret = av_write_frame(fmt_ctx &enc_pkt);
if (ret < 0)
break;
}
return ret;
}

int main(int argc char* argv[])
{
AVFormatContext* pFormatCtx;
AVOutputFormat* fmt;
AVStream* audio_st;
AVCodecContext* pCodecCtx;
AVCodec* pCodec;

uint8_t* frame_buf;
AVframe* pframe;
AVPacket pkt;

int got_frame=0;
int ret=0;
int size=0;

FILE *in_file=NULL;                         //Raw PCM data
int framenum=1000;                          //Audio frame number
const char* out_file = “tdjm.aac“;          //Output URL
int i;

in_file= fopen(“tdjm.pcm“ “rb“);

av_register_all();

//Method 1.
pFormatCtx = avformat_alloc_context();
fmt = av_guess_format(NULL out_file NULL);
pFormatCtx->oformat = fmt;


//Method 2.
//avformat_alloc_output_context2(&pFormatCtx NULL NULL out_file);
//fmt = pFormatCtx->oformat;

//Open output URL
if (avio_open(&pFormatCtx->pbout_file AVIO_FLAG_READ_WRITE) < 0){
printf(“Failed to open output file!\n“);
return -1;
}

audio_st = avformat_new_stream(pFormatCtx 0);
if (audio_st==NULL){
return -1;
}
pCodecCtx = audio_st->codec;
pCodecCtx->codec_id = fmt->audio_codec;
pCodecCtx->codec_type = AVMEDIA_TYPE_AUDIO;
pCodecCtx->sample_fmt = AV_SAMPLE_FMT_S16;
pCodecCtx->sample_rate= 44100;
pCodecCtx->channel_layout=AV_CH_LAYOUT_STEREO;
pCodecCtx->channels = av_get_channel_layout_nb_channels(pCodecCtx->channel_layout);
pCodecCtx->bit_rate = 64000;  

//Show some information
av_dump_format(pFormatCtx 0 out_file 1)

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件          28  2015-02-12 17:38  .gitignore
     文件         509  2015-02-12 17:38  readme.txt
     文件       63611  2015-02-12 17:38  simplest_ffmpeg_audio_encoder.jpg
     文件         934  2015-02-12 17:38  simplest_ffmpeg_audio_encoder.sln
     文件       19968  2015-02-12 17:38  simplest_ffmpeg_audio_encoder.suo
     目录           0  2015-02-12 17:38  simplest_ffmpeg_audio_encoder\
     文件          67  2015-02-12 17:38  simplest_ffmpeg_audio_encoder\.gitignore
     文件         509  2015-02-12 17:38  simplest_ffmpeg_audio_encoder\ReadMe.txt
     文件    19294208  2015-02-12 17:38  simplest_ffmpeg_audio_encoder\avcodec-56.dll
     文件     1341440  2015-02-12 17:38  simplest_ffmpeg_audio_encoder\avdevice-56.dll
     文件     2201088  2015-02-12 17:38  simplest_ffmpeg_audio_encoder\avfilter-5.dll
     文件     5721088  2015-02-12 17:38  simplest_ffmpeg_audio_encoder\avformat-56.dll
     文件      424960  2015-02-12 17:38  simplest_ffmpeg_audio_encoder\avutil-54.dll
     文件         632  2015-02-12 17:38  simplest_ffmpeg_audio_encoder\compile_cl.bat
     文件         439  2015-02-12 17:38  simplest_ffmpeg_audio_encoder\compile_gcc.sh
     文件         459  2015-02-12 17:38  simplest_ffmpeg_audio_encoder\compile_mingw.sh
     目录           0  2015-02-12 17:38  simplest_ffmpeg_audio_encoder\include\
     文件        7976  2015-02-12 17:38  simplest_ffmpeg_audio_encoder\include\_mingw.h
     文件        5721  2015-02-12 17:38  simplest_ffmpeg_audio_encoder\include\inttypes.h
     目录           0  2015-02-12 17:38  simplest_ffmpeg_audio_encoder\include\libavcodec\
     文件      177529  2015-02-12 17:38  simplest_ffmpeg_audio_encoder\include\libavcodec\avcodec.h
     文件        3111  2015-02-12 17:38  simplest_ffmpeg_audio_encoder\include\libavcodec\avfft.h
     文件        3659  2015-02-12 17:38  simplest_ffmpeg_audio_encoder\include\libavcodec\dv_profile.h
     文件        2358  2015-02-12 17:38  simplest_ffmpeg_audio_encoder\include\libavcodec\dxva2.h
     文件       10623  2015-02-12 17:38  simplest_ffmpeg_audio_encoder\include\libavcodec\old_codec_ids.h
     文件        4007  2015-02-12 17:38  simplest_ffmpeg_audio_encoder\include\libavcodec\vaapi.h
     文件        5437  2015-02-12 17:38  simplest_ffmpeg_audio_encoder\include\libavcodec\vda.h
     文件        6200  2015-02-12 17:38  simplest_ffmpeg_audio_encoder\include\libavcodec\vdpau.h
     文件        6035  2015-02-12 17:38  simplest_ffmpeg_audio_encoder\include\libavcodec\version.h
     文件        6062  2015-02-12 17:38  simplest_ffmpeg_audio_encoder\include\libavcodec\xvmc.h
     目录           0  2015-02-12 17:38  simplest_ffmpeg_audio_encoder\include\libavdevice\
............此处省略106个文件信息

评论

共有 条评论