Android ffmpeg解码后的音频帧保存为pcm数据
2019-05-06 09:56
295 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/baidu_41666295/article/details/89875031
1.首先要解码每一帧数据,判断是否为音频帧
// 循环读取一帧视频
while (av_read_frame(fmt_ctx, &avPacket) >= 0) {
//判断是否为视频流
if (avPacket.stream_index == videoStream->index) {
LOGE(“AVStream is VideoStream”);
got_frame = 0;
//对该帧进行解码
ret = avcodec_decode_video2(dec_ctx, frame, &got_frame, &avPacket);
if (ret < 0) {
LOGE(“Error decoding video\n ret=%d”, ret);
break;
}
if (got_frame) {
av_frame_unref(filt_frame);
}
}else if(avPacket.stream_index==audioStream->index){ //音频流 LOGE("AVStream is AudioStream"); got_frame = 0; encode_audio(env,&avPacket,frame); } av_frame_unref(frame); av_packet_unref(&avPacket); }
- 从音频帧取出音频原始数据
int encode_audio(JNIEnv * env, AVPacket* packet, AVFrame* frame){
//解码
int ret = avcodec_decode_audio4(audioCodecCtx, frame, &got_frame, packet);
if(ret < 0){
LOGE(“avcodec_decode_audio4 failed”);
return ret;
}
//解码一帧成功
if(got_frame)
// 获取一个采样点字节数,比如16位采样点值为2字节
int data_size = av_get_bytes_per_sample(audioCodecCtx->sample_fmt);
// 音频数据写成pcm文件
if (frame->data[0] && frame->data[1]) {
LOGE(“frame.data[1]”);
for (int i = 0; i < audioCodecCtx->frame_size; i++)
{
fwrite(frame->data[0] + i * data_size, 1, data_size, file_pcm);
fwrite(frame->data[1] + i * data_size, 1, data_size, file_pcm);
}
}else if(frame->data[0]) {
LOGE(“frame.data[0]”);
fwrite(frame->data[0], 1, frame->linesize[0],file_pcm);
}
}
return 0;
}
相关文章推荐
- ffmpeg 保存avcodec_decode_audio4解码后的PCM数据
- ffmpeg解码音频保存为PCM
- ffmpeg解码音频保存为PCM
- 【FFmpeg杂记】音频解码输出PCM格式数据分析
- Android音频开发(5):音频数据的编解码
- Android音频开发(5):音频数据的编解码
- Android本地视频播放器开发--ffmpeg解码视频文件中的音频(2)
- Android开发:使用AudioTrack播放PCM音频数据【附源码】
- 在Android系统中使用TeeSink功能截取任意音频流的原始PCM音频数据
- Android+FFmpeg+OpenSL ES音频解码播放
- Android 对保存在 sharedpreference的重要数据进行编解码
- Android开发:使用AudioTrack播放PCM音频数据【附源码】
- 基于FFmpeg的音频编码(PCM数据编码成AAC android)
- Android音视频学习第2章:使用ffmpeg进行音频解码
- FFmpeg视频解码,保存原始YUV数据(使用最新FFmpeg4.1)
- FFmpeg 音频编码(PCM数据编码成AAC android)
- 使用 ffmpeg 进行网络推流:拉流->解封装->解码->处理原始数据(音频、视频)->编码->编码->推流
- ffmpeg解码音频数据时,进行重采样(即改变文件原有的采样率)
- Android本地视频播放器开发--ffmpeg解码视频文件中的音频(1)
- 使用AudioTrack播放PCM音频数据(android)