Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将内部播放捕获音频添加到android中的媒体录制器中,以便仅在android 10中获取第三方应用程序内部声音?_Java_Android_Kotlin_Audio_Video - Fatal编程技术网

Java 如何将内部播放捕获音频添加到android中的媒体录制器中,以便仅在android 10中获取第三方应用程序内部声音?

Java 如何将内部播放捕获音频添加到android中的媒体录制器中,以便仅在android 10中获取第三方应用程序内部声音?,java,android,kotlin,audio,video,Java,Android,Kotlin,Audio,Video,我想创建屏幕录制应用程序,我搜索了很多关于只捕获声音的内部电话。 我已经创建了应用程序使用媒体录音机和媒体投影它工作良好。我面临的问题是,我如何添加功能,仅使用其他应用程序(如游戏)的内部声音录制视频。 这里是我关于MediaRecorder和MediaProjection的代码 private MediaProjection mMediaProjection; private MediaRecorder mMediaRecorder; private Virtua

我想创建屏幕录制应用程序,我搜索了很多关于只捕获声音的内部电话。 我已经创建了应用程序使用媒体录音机和媒体投影它工作良好。我面临的问题是,我如何添加功能,仅使用其他应用程序(如游戏)的内部声音录制视频。 这里是我关于MediaRecorder和MediaProjection的代码

     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();

}