Java 如何将内部播放捕获音频添加到android中的媒体录制器中,以便仅在android 10中获取第三方应用程序内部声音?
我想创建屏幕录制应用程序,我搜索了很多关于只捕获声音的内部电话。 我已经创建了应用程序使用媒体录音机和媒体投影它工作良好。我面临的问题是,我如何添加功能,仅使用其他应用程序(如游戏)的内部声音录制视频。 这里是我关于MediaRecorder和MediaProjection的代码Java 如何将内部播放捕获音频添加到android中的媒体录制器中,以便仅在android 10中获取第三方应用程序内部声音?,java,android,kotlin,audio,video,Java,Android,Kotlin,Audio,Video,我想创建屏幕录制应用程序,我搜索了很多关于只捕获声音的内部电话。 我已经创建了应用程序使用媒体录音机和媒体投影它工作良好。我面临的问题是,我如何添加功能,仅使用其他应用程序(如游戏)的内部声音录制视频。 这里是我关于MediaRecorder和MediaProjection的代码 private MediaProjection mMediaProjection; private MediaRecorder mMediaRecorder; private Virtua
private MediaProjection mMediaProjection;
private MediaRecorder mMediaRecorder;
private VirtualDisplay mVirtualDisplay;
private void initRecorder() throws Exception {
filePath = path + "/" + name + ".mp4";
fileName = name + ".mp4";
mMediaRecorder = new MediaRecorder();
if (isAudioEnabled) {
mMediaRecorder.setAudioSource(audioSourceAsInt);
}
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
mMediaRecorder.setOutputFormat(outputFormatAsInt);
if (orientationHint != 400){
mMediaRecorder.setOrientationHint(orientationHint);
}
if (isAudioEnabled) {
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
mMediaRecorder.setAudioEncodingBitRate(audioBitrate);
mMediaRecorder.setAudioSamplingRate(audioSamplingRate);
}
mMediaRecorder.setVideoEncoder(videoEncoderAsInt);
if (returnedUri != null) {
try {
ContentResolver contentResolver = getContentResolver();
FileDescriptor inputPFD = Objects.requireNonNull(contentResolver.openFileDescriptor(returnedUri, "rw")).getFileDescriptor();
mMediaRecorder.setOutputFile(inputPFD);
} catch (Exception e) {
ResultReceiver receiver = mIntent.getParcelableExtra(ScreenRecordService.BUNDLED_LISTENER);
Bundle bundle = new Bundle();
bundle.putString("errorReason", Log.getStackTraceString(e));
if (receiver != null) {
receiver.send(Activity.RESULT_OK, bundle);
}
}
}else{
mMediaRecorder.setOutputFile(filePath);
}
mMediaRecorder.setVideoSize(mScreenWidth, mScreenHeight);
if (!isCustomSettingsEnabled) {
if (!isVideoHD) {
mMediaRecorder.setVideoEncodingBitRate(12000000);
mMediaRecorder.setVideoFrameRate(30);
} else {
mMediaRecorder.setVideoEncodingBitRate(5 * mScreenWidth * mScreenHeight);
mMediaRecorder.setVideoFrameRate(60); //after setVideoSource(), setOutFormat()
}
} else {
mMediaRecorder.setVideoEncodingBitRate(videoBitrate);
mMediaRecorder.setVideoFrameRate(videoFrameRate);
}
mMediaRecorder.prepare();
}