PS :在网上找了很多系统内录的功能帖子,都是基于AudioRecoder 然后加系统签名。。。
这种方法在真机上没有测试过,不知道可不可行。但是这种方案对于虚拟设备,是肯定不行的,因为虚拟设备没有对应的硬件驱动,所以是肯定取不到的。
那么就的从系统里面去截取。
直接上代码:
在framework的audiofliger中去截取:
在 aosp/frameworks/av/services/audioflinger/Thread.cpp中:
ssize_t framesWritten = mNormalSink->write((char *)mSinkBuffer + offset, count);
ATRACE_END();
if (framesWritten > 0) {
bytesWritten = framesWritten * mFrameSize;
} else {
bytesWritten = framesWritten;
}
/*int tmpFd = open("/data/misc/audioserver/AudioFlinger.pcm", O_WRONLY | O_APPEND);
if ( tmpFd < 0 ) {
ALOGE("Creat AF dump file failed!");
} else {
write(tmpFd, (char *)mSinkBuffer + offset, bytesWritten);
close(tmpFd);
}*/
其中 (char *)mSinkBuffer + offset 即每一个声音帧 , bytesWritten 就是长度