JavaCV的摄像头实战之六:保存为mp4文件(有声音),kafka和rabbitmq区别面试题

本文介绍了如何在JavaCV的RecordCameraSaveMp4WithAudio类中添加音频功能,包括使用AudioService进行音频采样、设置音频参数、启动定时任务以及在结束时释放资源。作者提供了详细的代码片段和初始化、输出和资源管理方法的改造过程。
摘要由CSDN通过智能技术生成

line.open(audioFormat);

// 数据线与音频数据的IO建立联系

line.start();

// 每次取得的原始数据大小

final int audioBufferSize = SAMPLE_RATE * CHANNEL_NUM;

// 初始化数组,用于暂存原始音频采样数据

audioBytes = new byte[audioBufferSize];

// 创建一个定时任务,任务的内容是定时做音频采样,再把采样数据交给帧录制器处理

sampleTask = new ScheduledThreadPoolExecutor(1);

}

/**

  • 程序结束前,释放音频相关的资源

*/

public void releaseOutputResource() {

// 结束的标志,避免采样的代码在whlie循环中不退出

isFinish = true;

// 结束定时任务

sampleTask.shutdown();

// 停止数据线

line.stop();

// 关闭数据线

line.close();

}

/**

  • 启动定时任务,每秒执行一次,采集音频数据给帧录制器

  • @param frameRate

*/

public void startSample(double frameRate) {

// 启动定时任务,每秒执行一次,采集音频数据给帧录制器

sampleTask.scheduleAtFixedRate((Runnable) new Runnable() {

@Override

public void run() {

try

{

int nBytesRead = 0;

while (nBytesRead == 0 && !isFinish) {

// 音频数据是从数据线中取得的

nBytesRead = line.read(audioBytes, 0, line.available());

}

// 如果nBytesRead<1,表示isFinish标志被设置true,此时该结束了

if (nBytesRead<1) {

return;

}

// 采样数据是16比特,也就是2字节,对应的数据类型就是short,

// 所以准备一个sh

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值