为了账号安全,请及时绑定邮箱和手机立即绑定

一分钟后音频停止录制

一分钟后音频停止录制

慕的地8271018 2023-05-17 15:41:19
我正在尝试使用 WebRTC,一切正常,但似乎存在一个问题,即如果屏幕关闭超过一分钟,音频将停止录制,这意味着设备的音频将停止,直到我打开屏幕一次再次。我试过什么?1)我试过设置webSettings.setMediaPlaybackRequiresUserGesture(false);它对问题没有好处。2)我也尝试wakelock在我正在进行的 WebRTC 活动中添加一个,但它也没有用。以下是清单中声明的权限:<uses-permission android:name="android.permission.RECORD_AUDIO" /><uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />在活动中,我授予以下麦克风的权限WebChromeClient:@Overridepublic void onPermissionRequest(final PermissionRequest request) {    request.grant(request.getResources());}我想要的是?我希望能够在不打扰用户重新打开屏幕的情况下继续通话。请指出我正确的方向。谢谢!更新:我尝试在 Chrome 中加载 WebRTC url 并且发生了同样的事情,也就是说,音频停止从我的设备录制。更新 2:当音频停止来自设备时添加日志。2019-08-06 17:18:47.266 4332-22405/? V/APM_AudioPolicyManager: getAudioPolicyConfig: audioParam;outDevice2019-08-06 17:18:47.266 4332-22405/? V/APM_AudioPolicyManager: getNewOutputDevice() selected device 22019-08-06 17:18:47.266 4332-22405/? V/APM_AudioPolicyManager: ### curdevice : 22019-08-06 17:18:47.307 4332-22405/? V/APM_AudioPolicyManager: AudioPolicyManager:setRecordSilenced(uid:99066, silenced:1)2019-08-06 17:18:47.308 4332-22405/? V/APM_AudioPolicyManager: AudioPolicyManager:setRecordSilenced(uid:11556, silenced:1)更新 3:尝试WebView以Foreground Service相同的结果进行初始化。更新 4:尝试使用 Chrome(76.0.3809.132)在https://appr.tc/上进行演示调用。观察到相同的结果。更新 5:尝试使用 Firefox 进行演示调用,它完美无缺地工作,这让我认为这是 Chromium 的错误吗?更新 6:填写错误报告
查看完整描述

3 回答

?
largeQ

TA贡献2039条经验 获得超8个赞

显然,这不是一项常见的任务,因为您的所有实施都只是一个WebView. 这很难与 Android 内部如此长的生存任务和生命周期保持一致。对于前。我们所做的每个VoIP应用程序,都有后台服务,以保持连接有效,并带有唤醒锁。这只是确保通话稳定性的一种方式。


但是,我认为您可以尝试这样做。通过WebView在 Service 中管理您的工作。为此,您可以考虑将一些调用逻辑移到另一个视图中,然后开始新的Service和创建新的Window。这将确保您Window在Service. 好像。


public class ServiceWithWebView extends Service {


    @Override

    public void onCreate() {

        super.onCreate();


        final WindowManager windowManager = (WindowManager) 

                    getSystemService(WINDOW_SERVICE);

        params = new WindowManager.LayoutParams(WindowManager.LayoutParams.WRAP_CONTENT, 

                    WindowManager.LayoutParams.WRAP_CONTENT, 

                    WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY);


        final LinearLayout view = new LinearLayout(this);

        view.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout

              .LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT));


        WebView wv = new WebView(this);

        wv.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout

                 .LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));

        view.addView(wv);

        wv.loadUrl("http://google.com");


        windowManager.addView(view, params);

    }

}


查看完整回答
反对 回复 2023-05-17
?
繁华开满天机

TA贡献1816条经验 获得超4个赞

在通话期间,您应该努力在该活动中保持屏幕开启,并防止屏幕变暗。

用这个:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

在你的电话完成后:

getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);


查看完整回答
反对 回复 2023-05-17
?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

Android 会在离开前台几分钟后自动销毁您的活动,这将导致录音关闭。

我在 android 上使用 webrtc,如果你想在 Android 上使用 webrtc 创建通话和视频通话,我建议使用本机 webrtc 并在前台服务上实现与 webrtc 相关的所有内容。前台服务将确保您的记录器和相机在活动被破坏时继续运行事件。

查看完整回答
反对 回复 2023-05-17
  • 3 回答
  • 0 关注
  • 287 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号