Android使用OpenGL播放wav格式视频

1、定义natvie方法并生成相应的头文件

 

2、定义使用opengl操作视频的方法的类CreateBufferQueueAudioPlayer.cpp

CreateBufferQueueAudioPlayer.cpp


extern "C" {
#include "wavlib.h"
}
#include <SLES/OpenSLES.h>
#include <SLES/OpenSLES_Android.h>
#include <android/log.h>

#define ARRAY_LEN(a) (sizeof(a) / sizeof(a[0]))


//创建音频播放对象
void CreateBufferQueueAudioPlayer(
		WAV wav,
		SLEngineItf engineEngine,
		SLObjectItf outputMixObject,
		SLObjectItf &audioPlayerObject){

	// Android针对数据源的简单缓冲区队列定位器
	SLDataLocator_AndroidSimpleBufferQueue dataSourceLocator = {
		SL_DATALOCATOR_ANDROIDSIMPLEBUFFERQUEUE, // 定位器类型
		1                                        // 缓冲区数
	};


	// PCM数据源格式
	SLDataFormat_PCM dataSourceFormat = {
		SL_DATAFORMAT_PCM,        // 格式类型
		wav_get_channels(wav),    // 通道数
        wav_get_rate(wav)*(uint)1000, // 毫赫兹/秒的样本数
		wav_get_bits(wav),        // 每个样本的位数
		wav_get_bits(wav),        // 容器大小
		SL_SPEAKER_FRONT_CENTER,  // 通道屏蔽
		SL_BYTEORDER_LITTLEENDIAN // 字节顺序
	};

	// 数据源是含有PCM格式的简单缓冲区队列
	SLDataSource dataSource = {
		&dataSourceLocator, // 数据定位器
		&dataSourceFormat   // 数据格式
	};

	// 针对数据接收器的输出混合定位器
	SLDataLocator_OutputMix dataSinkLocator = {
		SL_DATALOCATOR_OUTPUTMIX, // 定位器类型
		outputMixObject           // 输出混合
	};

	// 数据定位器是一个输出混合
	SLDataSink dataSink = {
		&dataSinkLocator, // 定位器
		0                 // 格式
	};

	// 需要的接口
	SLInterfaceID interfaceIds[] = {
		SL_IID_BUFFERQUEUE
	};

	// 需要的接口,如果所需要的接口不要用,请求将失败
	SLboolean requiredInterfaces[] = {
		SL_BOOLEAN_TRUE // for SL_IID_BUFFERQUEUE
	};

	// 创建音频播放器对象
	SLresult result = (*engineEngine)->CreateAudioPlayer(
			engineEngine,
			&audioPlayerObject,
			&dataSource,
			&dataSink,
			ARRAY_LEN(interfaceIds),
			interfaceIds,
			requiredInterfaces);
}

 

3、使用OpenGL编译播放.wav格式的视频时,需要使用transcode中的avilib文件夹中的源码编译成的wavlib_static.so库,

指定编译wavlib_static.so时所需要的文件

 

4、指定所需要生成的目标.so

 

5、加载动态库

 

6、添加权限

 

7、调用播放方法

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值