以下是我自己写的小demo
#include <errno.h>
#include <android/log.h>
#include <libavutil/avutil.h>
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
AVFormatContext *fmt_ctx=NULL;
AVCodecContext *codec_ctx;
AVCodec *codec;
AVPacket packet;
AVFrame *frame;
int frame_ptr;
void mylog(const char * fmt, ...);
void Java_com_test_multi_MultiPlayerActivity_test(){
avcodec_register_all();
av_register_all();
if(avformat_open_input(&fmt_ctx,"/sdcard/wma",NULL,NULL)!=0)
{mylog("errno %d",errno);}
if(avformat_find_stream_info(fmt_ctx,NULL)<0)
{mylog("errno %d",errno);}
codec_ctx=fmt_ctx->streams[0]->codec;
codec = avcodec_find_decoder(codec_ctx->codec_id);
mylog("id=%d",codec->id);
if (avcodec_open2(codec_ctx, codec,NULL) < 0)
{mylog("errno %d",errno);}
while(av_read_frame(fmt_ctx,&packet)==0){
frame=avcodec_alloc_frame();
avcodec_decode_audio4(codec_ctx, frame, &frame_ptr,&packet);
mylog("frame_ptr %d",frame_ptr);
if(frame_ptr){
int data_size = av_samples_get_buffer_size(frame->linesize,codec_ctx->channels,frame->nb_samples,codec_ctx->sample_fmt, 0);
mylog("data count %d",data_size);
/*int i=0;
for(;i<data_size;++i){
mylog("data %d",(frame->data[0])[i]);
}*/
}
av_free_packet(&packet);
}
avformat_close_input(&fmt_ctx);
}
void mylog(const char* fmt,...){
va_list arg_ptr;
va_start(arg_ptr, fmt);
__android_log_vprint(ANDROID_LOG_ERROR, "multi",fmt, arg_ptr);
}
分享到:
相关推荐
在本文中,我们将深入探讨如何使用C++与FFmpeg库实现音频的解码和播放功能。FFmpeg是一个开源项目,提供了强大的音视频处理工具和库,包括libavcodec(用于编码和解码)、libavformat(用于多媒体容器格式的解析)和...
在本实例中,我们将探讨如何在Visual Studio 2008环境下,利用FFmpeg SDK 3.2进行音频解码。 首先,安装FFmpeg SDK 3.2是开发的基础。你需要下载并解压FFmpeg源代码,然后通过configure脚本配置编译环境,生成适用...
在Android平台上,使用FFmpeg库进行音频解码和OpenSL ES进行播放是常见的技术实践,尤其是在处理各种格式的音频文件时。FFmpeg是一个强大的开源多媒体处理框架,它提供了丰富的音频和视频编解码器,而OpenSL ES是...
在这个主题“FFMPEG_音频解码MP3_PCM_本地文件”中,我们将深入探讨如何使用FFmpeg来解码MP3音频文件,并将其转换为PCM(脉冲编码调制)格式,这是一种原始的无损音频数据格式。 首先,理解FFmpeg的基本结构至关...
总结,这个“ffmpeg解码音频并保存PCM的简单demo”是一个很好的起点,帮助我们理解FFmpeg如何处理音频解码,以及如何将解码后的数据以PCM格式保存。通过深入学习和实践,你可以利用FFmpeg的强大功能处理各种复杂的...
FFmpeg和OpenSL是两种在Android平台上处理音频的开源库,它们在音频解码和播放方面发挥着重要作用。FFmpeg是一个强大的多媒体处理框架,而OpenSL ES是Android原生的音频系统接口。在这个示例中,我们将深入探讨如何...
FFmpeg的解码器在完成上述步骤后,会生成YUV格式的视频帧。YUV是一种无损的视频色彩空间,将RGB色彩信息分解为亮度(Y)和两个色差分量(U和V)。这种格式便于视频处理和存储,因为它减少了对带宽的需求。 在...
总之,FFmpeg音频编码和解码实例为我们提供了一个实践平台,通过分析和运行代码,可以深入理解音频编码解码的工作流程,以及FFmpeg库在实际开发中的应用。这对于任何想在多媒体领域进行开发的程序员来说,都是一个...
FFmpeg提供了一系列内置的解码器,如H.264视频解码器和AAC音频解码器,它们可以处理MP4中常见的编码格式。 4. **解码视频流**:对于视频流,使用`avcodec_decode_video2`函数进行解码,得到YUV格式的视频帧。YUV是...
本资源包含的是一个使用FFmpeg进行视、音频解码的示例,帮助开发者了解如何在Android环境中集成并应用FFmpeg。 首先,让我们深入理解FFmpeg的核心概念。FFmpeg库由多个组件组成,包括libavcodec(编码和解码库)、...
FFmpeg库提供了对多种视频和音频格式的支持,包括H.264。其解码功能主要由libavcodec组件提供,这是一个包含大量编解码器的库。在这个H.264解码demo中,开发人员可能会用到以下关键函数和步骤: 1. **初始化解码器...
FFmpeg是一款强大的开源多媒体处理工具,它包含了音视频编解码库libavcodec,音频处理库libavformat,视频过滤库libavfilter,以及用于图形界面的SDL(Simple DirectMedia Layer)库。在这个"ffmpeg+SDL解码播放例子...
调用`avcodec_open2()`初始化解码器,之后可以使用`avcodec_decode_video2()`对解码后的像素数据进行解包。 3. **Encoding(编码)**:如果需要重新编码,过程与解码类似,但这里使用的是编码器。`avcodec_find_...
在VC(Visual C++)环境下,通过FFmpeg库,我们可以实现对各种视频流的解码,包括H264和MPEG4等常见的编码格式。 首先,解码视频流的步骤大致分为以下几个部分: 1. **初始化FFmpeg库**:在VC项目中,我们需要引入...
FFmpeg是一个开源的多媒体处理工具,它包含了各种音频和视频编码、解码、转换以及流媒体功能。在FFmpeg中,DirectX Video Acceleration (DXVA) 是一种利用GPU进行硬件解码的技术,特别是在处理高清视频时能显著降低...
在这个"ffmpeg+SDL2实现的音频播放器V2.0(无杂音)"项目中,开发者利用 FFmpeg 的音频解码功能和 SDL2 的音频播放能力构建了一个高质量的音频播放器。以下是这个项目中涉及的主要知识点: 1. **FFmpeg 音频解码**...
在音频处理方面,FFmpeg提供了丰富的音频编码器和解码器,支持多种音频格式。 4. **音频编码** 在获取了音频裸流数据后,我们需要对其进行编码以便在网络上传输。FFmpeg的libavcodec库包含了许多音频编码器,例如...
3. 码流程:FFmpeg的处理流程通常包括注册组件、打开文件、获取CODEC参数、打开解码器、读取并解码数据帧、关闭等步骤。 四、编译FFmpeg时的注意事项 在编译FFmpeg时,可能会遇到缺少库文件或者编译器的情况,如...
FFmpeg 是一个强大的开源多媒体处理框架,用于处理音频和视频数据。在FFmpeg中,`av_seek_frame`函数是用于在多媒体流中进行定位的重要工具,它可以让你在解码过程中跳转到特定的时间点。本教程将深入讲解如何使用`...