一分钟后音频停止录制

我正在尝试使用 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:


@Override

public 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;outDevice

2019-08-06 17:18:47.266 4332-22405/? V/APM_AudioPolicyManager: getNewOutputDevice() selected device 2

2019-08-06 17:18:47.266 4332-22405/? V/APM_AudioPolicyManager: ### curdevice : 2

2019-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:尝试WebViewForeground Service相同的结果进行初始化。

更新 4:尝试使用 Chrome(76.0.3809.132)在https://appr.tc/上进行演示调用。观察到相同的结果。

更新 5:尝试使用 Firefox 进行演示调用,它完美无缺地工作,这让我认为这是 Chromium 的错误吗?

更新 6:填写错误报告


慕的地8271018
浏览 289回答 3
3回答

largeQ

显然,这不是一项常见的任务,因为您的所有实施都只是一个WebView. 这很难与 Android 内部如此长的生存任务和生命周期保持一致。对于前。我们所做的每个VoIP应用程序,都有后台服务,以保持连接有效,并带有唤醒锁。这只是确保通话稳定性的一种方式。但是,我认为您可以尝试这样做。通过WebView在 Service 中管理您的工作。为此,您可以考虑将一些调用逻辑移到另一个视图中,然后开始新的Service和创建新的Window。这将确保您Window在Service. 好像。public class ServiceWithWebView extends Service {&nbsp; &nbsp; @Override&nbsp; &nbsp; public void onCreate() {&nbsp; &nbsp; &nbsp; &nbsp; super.onCreate();&nbsp; &nbsp; &nbsp; &nbsp; final WindowManager windowManager = (WindowManager)&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; getSystemService(WINDOW_SERVICE);&nbsp; &nbsp; &nbsp; &nbsp; params = new WindowManager.LayoutParams(WindowManager.LayoutParams.WRAP_CONTENT,&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; WindowManager.LayoutParams.WRAP_CONTENT,&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY);&nbsp; &nbsp; &nbsp; &nbsp; final LinearLayout view = new LinearLayout(this);&nbsp; &nbsp; &nbsp; &nbsp; view.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT));&nbsp; &nbsp; &nbsp; &nbsp; WebView wv = new WebView(this);&nbsp; &nbsp; &nbsp; &nbsp; wv.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));&nbsp; &nbsp; &nbsp; &nbsp; view.addView(wv);&nbsp; &nbsp; &nbsp; &nbsp; wv.loadUrl("http://google.com");&nbsp; &nbsp; &nbsp; &nbsp; windowManager.addView(view, params);&nbsp; &nbsp; }}

繁华开满天机

在通话期间,您应该努力在该活动中保持屏幕开启,并防止屏幕变暗。用这个:getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);在你的电话完成后:getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

慕田峪4524236

Android 会在离开前台几分钟后自动销毁您的活动,这将导致录音关闭。我在 android 上使用 webrtc,如果你想在 Android 上使用 webrtc 创建通话和视频通话,我建议使用本机 webrtc 并在前台服务上实现与 webrtc 相关的所有内容。前台服务将确保您的记录器和相机在活动被破坏时继续运行事件。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java