【问题标题】:Android webRTC video call inside a Background Service后台服务中的 Android webRTC 视频通话
【发布时间】:2019-11-20 00:29:39
【问题描述】:

如果这个问题已经被问过,请原谅我,我找不到我的案例的答案。

所以,我有一个带有语音和视频通话功能的 Android 应用。我为此使用了 webRTC。

我能够使语音和视频通话在 Activity 中完美运行,但现在我想在用户退出 CallActivity 并返回 ChatActivity 时保持通话运行(发送文件/链接/照片示例)。

我设法让语音通话在后台服务中完美运行,但视频通话无法按预期工作。

即使正在播放视频轨道中的音频,也不会显示远程视频。

这是我的后台服务代码:

@Override
        public void onAddStream(MediaStream mediaStream) {
            if (mediaStream.videoTracks.size() > Constants.ONE || mediaStream.audioTracks.size() > Constants.ONE) {
                return;
            }

            //check for video track, means this is a video call
            if (!isAudioCall && mediaStream.videoTracks.size() > Constants.ZERO) {
                remoteVideoTrack = mediaStream.videoTracks.get(Constants.ZERO);
                CallActivityNew.remoteVideoTrack = remoteVideoTrack;
                try {
                    localAudioTrack.setEnabled(true);

                    //Now ask the UI to display the video track
                    sendOrderToActivity(Constants.START_REMOTE_VIDEO, null);
                } catch (Exception ignored) {}
            } else if (mediaStream.audioTracks.size() > Constants.ZERO) {
                //Means this is a Voice call, only audio tracks available
                remoteAudioTrack = mediaStream.audioTracks.get(Constants.ZERO);
                try {
                    localAudioTrack.setEnabled(true);
                    remoteAudioTrack.setEnabled(true);
                } catch (Exception ignored) {}
            }
        }

在我的 CallActivity 代码下方:

case Constants.START_REMOTE_VIDEO: {
                if (remoteVideoView == null) {
                    remoteVideoView = findViewById(R.id.remote_gl_surface_view);
                }
                remoteVideoView.init(eglBaseContext, null);
                remoteVideoView.setEnableHardwareScaler(true);
                remoteVideoView.setMirror(true);
                remoteVideoView.setScalingType(RendererCommon.ScalingType.SCALE_ASPECT_FIT);
                remoteVideoView.setZOrderMediaOverlay(true);

                //Apply video track to the Surface View in order to display it
                remoteVideoTrack.addSink(remoteVideoView);

                //now enable local video track
                Handler handler = new Handler();
                handler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        //now enable local video track
                        remoteVideoTrack.setEnabled(true);
                    }
                }, Constants.TIME_THREE_HUNDRED_MILLIS);

                setSpeakerphoneOn(false);
                break;
            }

我正在从 Service 向 Activity 发送订单,“case Constants.START_REMOTE_VIDEO”在收到 Service 的订单后起作用。

我看不出问题出在哪里,为什么我只听到声音但远程视频无法开始显示!

提前感谢您的帮助。

【问题讨论】:

    标签: java android service webrtc webrtc-android


    【解决方案1】:

    经过长时间的测试,我发现我的代码运行良好,只是忘记将视图可见性从"GONE" 更改为"VISIBLE"。 是的,这就是解决方案,我发誓xD

    【讨论】:

    • 坦率地说,我有一个非常相似的问题 ;) 你能详细说明你在说什么观点吗?
    • 您好。我说的是在布局(xml)文件中定义的“remoteVideoView”。我们使用 addSink() 函数与 remoteVideoTrack 链接的那个。
    • 您是否使用 openVidu 服务器进行 gideo 通话?
    • 为了测试,我使用了免费的 google webrtc 服务器。然后我用了安卓的TwilioSDK,它是付费服务,服务器稳定,使用方便。
    • 我的设置 SCALE_ASPECT_FIT 不起作用,它仍然是 FILL,可以。你帮忙?
    猜你喜欢
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 2018-09-28
    • 1970-01-01
    • 2018-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多