开发者社区 问答 正文

阿里云推流SDK这边使用录屏推流,想实现不要音频内录可以帮忙处理下吗?

阿里云推流SDK这边使用录屏推流,想实现不要音频内录,音频是通过麦克风去接收扬声器得到手机内部的声音,现在遇到问题,可以帮忙处理下吗?用过3种模式,下面靠近扬声器的麦克风都不会开启,导致一直无法接收到扬声器的声音。你们是不是因为有音频内录,所以设置了只开启不靠近扬声器的麦克风,防止出现回音的问题?还是我改代码不对导致的。如果你们提供个关闭音频内录的方法,看下是否需要同时处理这个问题。

展开
收起
真的很搞笑 2024-03-06 22:06:34 96 分享 版权
来自: 阿里云视频云
3 条回答
写回答
取消 提交回答
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    根据您的描述,您希望实现在阿里云推流SDK中使用录屏推流时,不使用音频内录,而是通过麦克风接收扬声器的声音。在这种情况下,您可以尝试以下方法来关闭音频内录并启用麦克风:

    1. 关闭音频内录功能:在您的代码中,找到与音频内录相关的部分,并将其禁用或注释掉。这样,您的应用程序将不再录制内部音频。

    2. 启用麦克风:确保您的应用程序具有访问麦克风的权限。在AndroidManifest.xml文件中添加以下权限声明:

    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    
    1. 选择麦克风模式:根据您的需求,选择合适的麦克风模式。您可以使用AudioRecord类来设置麦克风模式。以下是一个示例代码片段,用于设置麦克风模式:
    int audioSource = MediaRecorder.AudioSource.MIC; // 使用麦克风作为音频源
    int sampleRateInHz = 44100; // 设置采样率
    int channelConfig = AudioFormat.CHANNEL_IN_MONO; // 设置声道配置(单声道)
    int audioFormat = AudioFormat.ENCODING_PCM_16BIT; // 设置音频格式
    
    AudioRecord audioRecord = new AudioRecord(audioSource, sampleRateInHz, channelConfig, audioFormat, bufferSize);
    

    请注意,上述代码仅为示例,您需要根据您的实际需求进行适当的调整和错误处理。

    通过关闭音频内录并启用麦克风,您应该能够捕获来自麦克风的音频,而不再依赖音频内录。这样,您就可以实现通过麦克风接收扬声器的声音,并将其推流到阿里云服务器。

    请确保在修改代码后进行充分的测试,以确保您的应用程序按预期工作,并且没有其他问题。

    2024-03-08 19:09:44
    赞同 展开评论
  • ,阿里云推流SDK不支持直接禁用音频内录。如果需要通过麦克风捕捉外部扬声器播放的声音而不是内部音频循环,可能需要进一步排查或尝试其他解决方案。由于录音模式和硬件设置的影响,靠近扬声器的麦克风可能因为软件层面的防回音机制或其他系统设定而未启用。

    2024-03-07 15:47:18
    赞同 展开评论
  • 阿里云大降价~

    在使用阿里云推流SDK进行录屏推流时,如果您想要实现不带音频内录的功能,可以尝试以下方法:

    1. 在初始化推流时,设置音频轨道为null,这样就不会采集到音频数据。示例如下:
    AliyunLivePusher pusher = new AliyunLivePusher(context);
    pusher.setAudioSource(null); // 设置音频轨道为null
    
    1. 如果您希望同时采集麦克风音频和扬声器声音,可以尝试使用MediaProjectionManager进行屏幕录制,然后将录制的视频数据和麦克风音频数据分别推送到阿里云推流SDK。这样可以避免音频内录的问题。示例如下:
    // 初始化MediaProjectionManager
    MediaProjectionManager mediaProjectionManager = (MediaProjectionManager) context.getSystemService(Context.MEDIA_PROJECTION_SERVICE);
    
    // 开始屏幕录制
    startActivityForResult(mediaProjectionManager.createScreenCaptureIntent(), REQUEST_CODE);
    
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == REQUEST_CODE) {
            if (resultCode == RESULT_OK) {
                // 获取MediaProjection对象
                MediaProjection mediaProjection = mediaProjectionManager.getMediaProjection(resultCode, data);
    
                // 创建VirtualDisplay对象,用于显示屏幕录制内容
                VirtualDisplay virtualDisplay = mediaProjection.createVirtualDisplay("ScreenCapture", width, height, screenDensity, DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR, null, null);
    
                // 将录制的视频数据和麦克风音频数据分别推送到阿里云推流SDK
                // ...
            } else {
                // 用户拒绝授权
                Log.e(TAG, "用户拒绝授权");
            }
        }
    }
    
    1. 如果以上方法仍无法解决问题,建议您联系阿里云技术支持,以便他们为您提供更详细的解决方案。
    2024-03-07 14:25:24
    赞同 展开评论