资源简介
该音频编码器实现了音频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个文件信息
相关资源
- 最简单的基于FFMPEG的AVDevice的 1.2
- 最简单的基于FFMPEG+SDL的视频播放器
- ffmpeg提取mp4关键帧保存为jpg.zip
- ffmpeg+qt的简单播放器
- 使用ffmpeg将多张图片生成H264裸流并获
- ffmpeg h264 转换jpg
- 利用FFmpeg将Jpeg图片转为任意视频容器
- ffmpeg exeWINXP的最后一个可运行版本
- 最简单的基于FFMPEG的视频编码器修正
- ffmpeg-vs2013
- 基于FFMPEG_SDL2_音视频播放_参考音频时
- ffmpeg-3.2-win32-shared.zip
- ffmpeg录音
- ffmpeg资料全
- ffmpeg_windows屏幕录制并编码成H264
- windows32位系统的ffmpeg
- 利用ffmpeg提取任意格式视频帧关键帧
- ffmpeg3.0源码
- FFmpeg解码+SDL播放
- ffmpeg封装H264成MP4、AVI视频格式,及提
- 从零开始学习音视频编程技术十二 录
- AudioResample
- 最简单的基于FFmpeg的libswscale的教程
- ffmpeg-2.5.2-win32-shared
- 利用FFmpeg将mkv视频转换为H.264
- 音频红外发射与接收装置
- 台湾鑫创、 USB 音频方案、 TYPE-C 耳机
- 安卓交叉编译ffmepgx86_64版本
- ffmepg的安卓arm(armeabi-v7a)版本
- 基于ARM9的远程视频监控系统
评论
共有 条评论