簡體   English   中英

Quickblox一對一視頻通話

[英]Quickblox One-to-one Video Call

我正在嘗試在中進行一對一的視頻通話,但未顯示我嘗試過quickblox給出的示例的本地或遠程視頻,但是如果您遇到有人提供一對一視頻的示例,請與我分享幫助,它會給您帶來很多困惑對我來說,這將對我有很大幫助。我知道我的代碼有很多錯誤,也無法進行視頻通話,但在此之前,我盡力了,請幫助我

非常感謝,請幫幫我

VideoCall.class

public class VideoCall extends Activity implements QBRTCClientSessionCallbacks, QBRTCSessionConnectionCallbacks, QBRTCSignalingCallback,
        OnCallEventsController, NetworkConnectionChecker.OnConnectivityChangedListener, QBRTCClientVideoTracksCallbacks {
    private QBRTCClient rtcClient;
    private AppRTCAudioManager audioManager;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.videocall);
        initQBRTCClient();
        QBRTCClient.getInstance(this).addSessionCallbacksListener(this);
        int oppint = Integer.parseInt(getIntent().getStringExtra("Opposite"));
        List<Integer> videouser = new ArrayList<>();
        videouser.add(oppint);
        QBRTCTypes.QBConferenceType qbConferenceType = QBRTCTypes.QBConferenceType.QB_CONFERENCE_TYPE_VIDEO;
        Map<String, String> userInfo = new HashMap<>();
        userInfo.put("name", "name");
        QBRTCSession session = QBRTCClient.getInstance(this).createNewSessionWithOpponents(videouser, qbConferenceType);
        session.startCall(userInfo);
    }

    public void addSessionCallbacksListener(QBRTCSessionConnectionCallbacks callback) {

    }


    private void initQBRTCClient() {
        rtcClient = QBRTCClient.getInstance(this);
        QBChatService.getInstance().getVideoChatWebRTCSignalingManager().addSignalingManagerListener(new QBVideoChatSignalingManagerListener() {
            @Override
            public void signalingCreated(QBSignaling qbSignaling, boolean createdLocally) {
                if (!createdLocally) {
                    rtcClient.addSignaling((QBWebRTCSignaling) qbSignaling);
                }
            }
        });

        rtcClient.setCameraErrorHendler(new VideoCapturerAndroid.CameraErrorHandler() {
            @Override
            public void onCameraError(final String s) {
                VideoCall.this.runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        Display.log(s);
                    }
                });
            }
        });
        QBRTCConfig.setMaxOpponentsCount(6);
        QBRTCConfig.setDisconnectTime(30);
        QBRTCConfig.setAnswerTimeInterval(30l);
        QBRTCConfig.setDebugEnabled(true);
        rtcClient.addSessionCallbacksListener(this);
        rtcClient.prepareToProcessCalls();
        QBChatService.getInstance().addConnectionListener(new AbstractConnectionListener() {
            @Override
            public void connectionClosedOnError(Exception e) {
                Display.log("connectionClosedOnError");
            }

            @Override
            public void reconnectionSuccessful() {
                Display.log("reconnectionSuccessful");
            }

            @Override
            public void reconnectingIn(int seconds) {
                Display.log("reconnectingIn");
            }
        });
    }


    @Override
    public void onSwitchAudio() {
        Display.log("onSwitchAudio");
    }

    @Override
    public void onUseHeadSet(boolean use) {
        Display.log("onUseHeadSet");
    }

    @Override
    public void connectivityChanged(boolean availableNow) {
        Display.log("connectivityChanged");
    }

    @Override
    public void onReceiveNewSession(QBRTCSession qbrtcSession) {
        Display.log("onReceiveNewSession");

    }

    @Override
    public void onUserNotAnswer(QBRTCSession qbrtcSession, Integer integer) {
        Display.log("onUserNotAnswer");
    }

    @Override
    public void onCallRejectByUser(QBRTCSession qbrtcSession, Integer integer, Map<String, String> map) {
        Display.log("onCallRejectByUser");
    }

    @Override
    public void onCallAcceptByUser(QBRTCSession qbrtcSession, Integer integer, Map<String, String> map) {
        Display.log("onCallAcceptByUser");
    }

    @Override
    public void onReceiveHangUpFromUser(QBRTCSession qbrtcSession, Integer integer, Map<String, String> map) {
        Display.log("onReceiveHangUpFromUser");
    }

    @Override
    public void onUserNoActions(QBRTCSession qbrtcSession, Integer integer) {
        Display.log("onUserNoActions");
    }

    @Override
    public void onSessionClosed(QBRTCSession qbrtcSession) {
        Display.log("onSessionClosed");
    }

    @Override
    public void onSessionStartClose(QBRTCSession qbrtcSession) {
        Display.log("onSessionStartClose");
    }

    @Override
    public void onStartConnectToUser(QBRTCSession qbrtcSession, Integer integer) {
        Display.log("onStartConnectToUser");
    }

    @Override
    public void onConnectedToUser(QBRTCSession qbrtcSession, Integer integer) {
        Display.log("onConnectedToUser");
    }

    @Override
    public void onConnectionClosedForUser(QBRTCSession qbrtcSession, Integer integer) {
        Display.log("onConnectionClosedForUser");
    }

    @Override
    public void onDisconnectedFromUser(QBRTCSession qbrtcSession, Integer integer) {
        Display.log("onDisconnectedFromUser");
    }

    @Override
    public void onDisconnectedTimeoutFromUser(QBRTCSession qbrtcSession, Integer integer) {
        Display.log("onDisconnectedTimeoutFromUser");
    }

    @Override
    public void onConnectionFailedWithUser(QBRTCSession qbrtcSession, Integer integer) {
        Display.log("onConnectionFailedWithUser");
    }

    @Override
    public void onError(QBRTCSession qbrtcSession, QBRTCException e) {
        Display.log("onError");
    }

    @Override
    public void onSuccessSendingPacket(QBSignalingSpec.QBSignalCMD qbSignalCMD, Integer integer) {
        Display.log("onSuccessSendingPacket");
    }

    @Override
    public void onErrorSendingPacket(QBSignalingSpec.QBSignalCMD qbSignalCMD, Integer integer, QBRTCSignalException e) {
        Display.log("onErrorSendingPacket");
    }

    @Override
    public void onLocalVideoTrackReceive(QBRTCSession qbrtcSession, QBRTCVideoTrack qbrtcVideoTrack) {

    }

    @Override
    public void onRemoteVideoTrackReceive(QBRTCSession qbrtcSession, QBRTCVideoTrack qbrtcVideoTrack, Integer integer) {

    }
}

我使用快速框在應用中實現了視頻通話

讓我指導您使用快速框實現視頻通話。

第1步:-

使用最新版本的quickblox

compile 'com.quickblox:quickblox-android-sdk-core:3.3.0@aar'
compile 'com.quickblox:quickblox-android-sdk-videochat-webrtc:3.3.0'

第2步:-

登錄 quickblox中指定的聊天服務以使用視頻通話功能創建一個活動來處理去電

我使用了兩個意圖附加功能:傳出服務,以了解傳出或傳入的連接,並針對這種情況采取行動,您還需要要呼叫的用戶quickblox ID

    package com.dev.trueme;


import android.media.MediaPlayer;
import android.media.RingtoneManager;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.inputmethod.InputMethod;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.quickblox.auth.session.QBSession;
import com.quickblox.auth.session.QBSessionManager;
import com.quickblox.chat.QBChatService;
import com.quickblox.chat.QBSignaling;
import com.quickblox.chat.QBWebRTCSignaling;
import com.quickblox.chat.listeners.QBVideoChatSignalingManagerListener;
import com.quickblox.videochat.webrtc.QBMediaStreamManager;
import com.quickblox.videochat.webrtc.QBRTCCameraVideoCapturer;
import com.quickblox.videochat.webrtc.QBRTCClient;
import com.quickblox.videochat.webrtc.QBRTCSession;
import com.quickblox.videochat.webrtc.QBRTCTypes;
import com.quickblox.videochat.webrtc.callbacks.QBRTCClientSessionCallbacks;
import com.quickblox.videochat.webrtc.callbacks.QBRTCClientVideoTracksCallbacks;
import com.quickblox.videochat.webrtc.view.QBRTCSurfaceView;
import com.quickblox.videochat.webrtc.view.QBRTCVideoTrack;

import org.webrtc.VideoRenderer;

import java.io.IOException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import static android.R.attr.action;
import static com.quickblox.videochat.webrtc.QBRTCTypes.QBConferenceType.QB_CONFERENCE_TYPE_VIDEO;

public class VideoCallActivity extends AppCompatActivity implements QBRTCClientSessionCallbacks,QBRTCClientVideoTracksCallbacks {

    private int userid;
    private Boolean isOutgoing,micE=true,vidE=true;
    private QBRTCSurfaceView surfaceView,remoteview;
    private   MediaPlayer mp;
    private  QBRTCSession currentsession;
    private QBMediaStreamManager mediaStreamManager;
    private ImageView mic,video;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_video_call);
        userid=getIntent().getIntExtra("user",1);
        isOutgoing=getIntent().getBooleanExtra("isoutgoing",false);
        ProcessCalls();
        InitSignalling();
        if (isOutgoing) {
            CallUser();
            SetCallerName(userid);
        }
        if(getIntent().getBooleanExtra("service",false)){
            SetLayoutForReceiveCall(DataHolder.getInstance().getSession(),DataHolder.getInstance().getUserInfo());
            SetCallerName(DataHolder.getInstance().getSession().getCallerID());
            Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);
            mp = MediaPlayer.create(getApplicationContext(), notification);
            mp.start();
        }


        mic=(ImageView)findViewById(R.id.mic);
        mic.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(micE){
                    micE=false;
                    AudioManage();
                }else {
                    micE=true;
                    AudioManage();
                }
            }
        });
        video=(ImageView)findViewById(R.id.video);
        video.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(vidE){
                    vidE=false;
                    VideoManage();
                }else {
                    vidE=true;
                    VideoManage();
                }
            }
        });

        surfaceView =(QBRTCSurfaceView)findViewById(R.id.localView);
        surfaceView.setMirror(true);
        surfaceView.requestLayout();

        remoteview=(QBRTCSurfaceView)findViewById(R.id.opponentView);
        remoteview.requestLayout();

        QBRTCClient.getInstance(this).addSessionCallbacksListener(this);
    }

    private void SetCallerName(Integer callerID) {
        TextView callerName=(TextView)findViewById(R.id.callername);
        TextView callertime=(TextView)findViewById(R.id.callTime);
        callerName.setText(callerID+"");
        if(isOutgoing){
            callertime.setText("Calling...");
        }

    }

    private void InitSignalling() {

        QBChatService.getInstance().getVideoChatWebRTCSignalingManager()
                .addSignalingManagerListener(new QBVideoChatSignalingManagerListener() {
                    @Override
                    public void signalingCreated(QBSignaling qbSignaling, boolean createdLocally) {
                        if (!createdLocally) {
                            QBRTCClient.getInstance(VideoCallActivity.this).addSignaling((QBWebRTCSignaling) qbSignaling);
                        }
                    }
                });

    }

    private void ProcessCalls() {
        QBRTCClient.getInstance(this).prepareToProcessCalls();
    }

    private void CallUser() {

           //Set conference type
          // There are two types of calls:
         // - QB_CONFERENCE_TYPE_VIDEO - for video call;
        // - QB_CONFERENCE_TYPE_AUDIO - for audio call;

        QBRTCTypes.QBConferenceType qbConferenceType = QB_CONFERENCE_TYPE_VIDEO;


      //Initiate opponents list
        List<Integer> opponents = new ArrayList<Integer>();
        opponents.add(userid); //12345 - QBUser ID

     //Set user information
    // User can set any string key and value in user info
   // Then retrieve this data from sessions which is returned in callbacks
  // and parse them as he wish
        Map<String, String> userInfo = new HashMap<>();
        userInfo.put("key", "value");

//Init session
        QBRTCSession session =
                QBRTCClient.getInstance(this).createNewSessionWithOpponents(opponents, qbConferenceType);

//Start call
        session.startCall(userInfo);

        SetCallButtonsDialing(session,userInfo);
        StartDialRinging();
    }

    private void SetCallButtonsDialing(final QBRTCSession session, final Map<String, String> userInfo) {
        FrameLayout call=(FrameLayout)findViewById(R.id.CallerLayout);
        call.setVisibility(View.VISIBLE);
        findViewById(R.id.Endcall).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                session.hangUp(userInfo);
                VideoCallActivity.this.finish();
            }
        });
    }

    public void AudioManage(){
        if(mediaStreamManager!=null) {
            if (mediaStreamManager.isAudioEnabled()) {
                mediaStreamManager.setAudioEnabled(false);
                mic.setImageResource(R.drawable.ic_mic_off_black_24dp);
            } else {
                mediaStreamManager.setAudioEnabled(true);
                mic.setImageResource(R.drawable.ic_mic_black_24dp);
            }
        }
    }

    public void VideoManage(){
        if(mediaStreamManager!=null) {
            if (mediaStreamManager.isVideoEnabled()) {
                mediaStreamManager.setVideoEnabled(false);
                video.setImageResource(R.drawable.ic_videocam_off_black_24dp);
            } else {
                mediaStreamManager.setVideoEnabled(true);
                video.setImageResource(R.drawable.ic_videocam_black_24dp);
            }
        }
    }


    @Override
    public void onReceiveNewSession(QBRTCSession qbrtcSession) {
        qbrtcSession.addVideoTrackCallbacksListener(this);
        Map<String,String> userInfo = qbrtcSession.getUserInfo();
        SetLayoutForReceiveCall(qbrtcSession,userInfo);
    }

    private void SetLayoutForReceiveCall(final QBRTCSession qbrtcSession,final Map<String, String> userInfo) {
        final FrameLayout receive=(FrameLayout)findViewById(R.id.answerlayout);
        receive.setVisibility(View.VISIBLE);
        qbrtcSession.addVideoTrackCallbacksListener(this);
        final ImageView calll=(ImageView)findViewById(R.id.answerCall);
        calll.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // Accept incoming call
                qbrtcSession.acceptCall(userInfo);
                receive.setVisibility(View.GONE);
                SetCallButtonsDialing(qbrtcSession,userInfo);
                StartTimer();
                if(mp!=null&&mp.isPlaying())
                {
                    mp.stop();
                }
            }
        });

        findViewById(R.id.rejectcall).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                qbrtcSession.rejectCall(userInfo);
                VideoCallActivity.this.finish();
                if(mp!=null&&mp.isPlaying())
                {
                    mp.stop();
                }
            }
        });
    }

    private void StartTimer() {
        final TextView timer=(TextView)findViewById(R.id.callTime);
        timer.setText("00:00");
        final Handler handler = new Handler();
        Runnable runnable = new Runnable() {
            private long startTime = System.currentTimeMillis();
            public void run() {
                while (true) {
                    try {
                        Thread.sleep(1000);
                    }
                    catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    handler.post(new Runnable(){
                        public void run() {

                            int millis=(int)(System.currentTimeMillis() - startTime)/1000;
                            int min=millis/60;
                            int sec=millis%60;
                            timer.setText((min<10?"0"+min:min)+":"+(sec<10?"0"+sec:sec));
                        }
                    });
                }
            }
        };
        new Thread(runnable).start();
    }

    @Override
    public void onUserNoActions(QBRTCSession qbrtcSession, Integer integer) {

        Toast.makeText(this, "no action by user", Toast.LENGTH_SHORT).show();
        if(mp!=null&&mp.isPlaying())
        {
            mp.stop();
        }
    }

    @Override
    public void onSessionStartClose(QBRTCSession qbrtcSession) {
        qbrtcSession.addVideoTrackCallbacksListener(this);
        try {
            qbrtcSession.getMediaStreamManager().setVideoCapturer(new QBRTCCameraVideoCapturer(this, null));
            mediaStreamManager = qbrtcSession.getMediaStreamManager();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onUserNotAnswer(QBRTCSession qbrtcSession, Integer integer) {

        Toast.makeText(this, "No answer", Toast.LENGTH_SHORT).show();
        if(mp!=null&&mp.isPlaying())
        {
            mp.stop();
        }
        finish();
    }

    @Override
    public void onCallRejectByUser(QBRTCSession qbrtcSession, Integer integer, Map<String, String> map) {
        Toast.makeText(this, "Call rejected", Toast.LENGTH_SHORT).show();
        if(mp!=null&&mp.isPlaying())
        {
            mp.stop();
        }
        finish();
    }

    @Override
    public void onCallAcceptByUser(QBRTCSession qbrtcSession, Integer integer, Map<String, String> map) {
        qbrtcSession.addVideoTrackCallbacksListener(this);
        if(mp!=null&&mp.isPlaying())
        {
            mp.stop();
        }
        StartTimer();
    }

    @Override
    public void onReceiveHangUpFromUser(QBRTCSession qbrtcSession, Integer integer, Map<String, String> map) {
        if(mp!=null&&mp.isPlaying())
        {
            mp.stop();
        }
        Toast.makeText(this, "Call ended by user", Toast.LENGTH_SHORT).show();
        finish();
    }

    @Override
    public void onSessionClosed(QBRTCSession qbrtcSession) {
        if(mp!=null&&mp.isPlaying())
        {
            mp.stop();
        }
    }

    @Override
    public void onLocalVideoTrackReceive(QBRTCSession qbrtcSession, QBRTCVideoTrack qbrtcVideoTrack) {

        qbrtcVideoTrack.addRenderer(new VideoRenderer(surfaceView));
        surfaceView.setMirror(true);
        surfaceView.requestLayout();
    }

    @Override
    public void onRemoteVideoTrackReceive(QBRTCSession qbrtcSession, QBRTCVideoTrack qbrtcVideoTrack, Integer integer) {
        qbrtcVideoTrack.addRenderer(new VideoRenderer(remoteview));
        mediaStreamManager = qbrtcSession.getMediaStreamManager();
        remoteview.requestLayout();

    }

    public void StartDialRinging(){
        try {
            mp = MediaPlayer.create(getApplicationContext(), R.raw.beep);
            mp.setLooping(true);
            mp.start();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

步驟3:

上述活動的XML代碼

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.dev.trueme.VideoCallActivity">

    <com.quickblox.videochat.webrtc.view.QBRTCSurfaceView
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:custom="http://schemas.android.com/apk/res-auto"
        android:id="@+id/localView"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:layout_width="100dp"
        android:layout_height="100dp" />
    <com.quickblox.videochat.webrtc.view.QBRTCSurfaceView
        android:id="@+id/opponentView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
    <FrameLayout
        android:layout_width="match_parent"
        android:layout_alignParentTop="true"
        android:background="#59777777"
        android:layout_height="100dp">
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
            <TextView
                android:layout_width="wrap_content"
                android:id="@+id/callername"
                android:layout_margin="20dp"
                android:text="msdkbjdshbs"
                android:textColor="@color/white"
                android:layout_height="wrap_content" />
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="20dp"
                android:layout_marginStart="20dp"
                android:id="@+id/callTime"
                android:textColor="@color/white"
                android:layout_below="@+id/callername"/>
        </RelativeLayout>
    </FrameLayout>
    <FrameLayout
        android:layout_width="match_parent"
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="20dp"
        android:visibility="gone"
        android:id="@+id/answerlayout"
        android:layout_height="wrap_content">
        <LinearLayout
            android:layout_width="match_parent"
            android:weightSum="2"
            android:orientation="horizontal"
            android:layout_height="wrap_content">
            <RelativeLayout
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_height="wrap_content">
                <ImageView
                    android:layout_width="60dp"
                    android:layout_height="60dp"
                    android:layout_centerInParent="true"
                    android:id="@+id/answerCall"
                    android:background="@drawable/shape_oval_white_green"
                    android:src="@drawable/ic_phone_black_24dp"/>
            </RelativeLayout>
            <RelativeLayout
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_height="wrap_content">
                <ImageView
                    android:layout_width="60dp"
                    android:layout_height="60dp"
                    android:id="@+id/rejectcall"
                    android:tint="@color/white"
                    android:layout_centerInParent="true"
                    android:background="@drawable/shape_oval_white_red"
                    android:src="@drawable/ic_call_end_black_24dp"/>
            </RelativeLayout>

        </LinearLayout>
    </FrameLayout>

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_alignParentBottom="true"
        android:visibility="visible"
        android:background="#33000000"
        android:id="@+id/CallerLayout"
        android:layout_height="wrap_content">
            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_marginBottom="20dp"
                android:layout_height="wrap_content">
                <ImageView
                    android:layout_width="60dp"
                    android:layout_height="60dp"
                    android:id="@+id/mic"
                    android:layout_toLeftOf="@+id/Endcall"
                    android:layout_toStartOf="@+id/Endcall"
                    android:layout_marginRight="20dp"
                    android:layout_marginEnd="20dp"
                    android:src="@drawable/ic_mic_black_24dp"/>
                <ImageView
                    android:layout_width="60dp"
                    android:layout_height="60dp"
                    android:layout_centerInParent="true"
                    android:id="@+id/Endcall"
                    android:tint="@color/white"
                    android:background="@drawable/shape_oval_white_red"
                    android:src="@drawable/ic_call_end_black_24dp"/>
                <ImageView
                    android:layout_width="60dp"
                    android:layout_height="60dp"
                    android:id="@+id/video"
                    android:layout_toRightOf="@+id/Endcall"
                    android:layout_toEndOf="@+id/Endcall"
                    android:layout_marginLeft="20dp"
                    android:layout_marginStart="20dp"
                    android:src="@drawable/ic_videocam_black_24dp"/>
            </RelativeLayout>
    </FrameLayout>

</RelativeLayout>

第四步:-

您需要創建一個監聽來電的服務。

    package com.dev.trueme;

import android.app.Service;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Handler;
import android.os.IBinder;
import android.util.Log;
import android.widget.Toast;

import com.quickblox.chat.QBChatService;
import com.quickblox.chat.QBSignaling;
import com.quickblox.chat.QBWebRTCSignaling;
import com.quickblox.chat.listeners.QBVideoChatSignalingManagerListener;
import com.quickblox.users.model.QBUser;
import com.quickblox.videochat.webrtc.QBRTCClient;
import com.quickblox.videochat.webrtc.QBRTCSession;
import com.quickblox.videochat.webrtc.callbacks.QBRTCClientSessionCallbacks;

import java.util.Map;
import java.util.Timer;
import java.util.TimerTask;

import static com.dev.trueme.TrueMeConstants.TRUE_ME_USERNEME;

public class VideoCallService extends Service implements QBRTCClientSessionCallbacks {
    private Timer mTimer = null;
    private Handler mHandler = new Handler();
    public static final int notify = 300000;

    public VideoCallService() {
    }

    @Override
    public IBinder onBind(Intent intent) {

        return null;
    }



    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        try {
            Log.wtf("service", "start");

            if (mTimer != null) {
                //  mTimer.cancel();
                Log.wtf("service", "All ready started");
            } else {
                mTimer = new Timer();   //recreate new
                mTimer.scheduleAtFixedRate(new TimeDisplay(), 0, notify);
                LoginChatService();
                ProcessCalls();
                InitSignalling();
                QBRTCClient.getInstance(this).addSessionCallbacksListener(this);
            }
        }catch (Exception e){
            Log.wtf("ex",""+e);
        }
        return START_NOT_STICKY;
    }
    private class TimeDisplay extends TimerTask {
        @Override
        public void run() {
            // run on another thread
            mHandler.post(new Runnable() {
                @Override
                public void run() {
                    // display toast
                       Toast.makeText(VideoCallService.this, "Service is running", Toast.LENGTH_SHORT).show();
                }
            });
        }
    }

    private void InitSignalling() {

        QBChatService.getInstance().getVideoChatWebRTCSignalingManager()
                .addSignalingManagerListener(new QBVideoChatSignalingManagerListener() {
                    @Override
                    public void signalingCreated(QBSignaling qbSignaling, boolean createdLocally) {
                        if (!createdLocally) {
                            QBRTCClient.getInstance(VideoCallService.this).addSignaling((QBWebRTCSignaling) qbSignaling);
                        }
                    }
                });

    }
    public  void LoginChatService()
    {
        Thread thread = new Thread() {
            @Override
            public void run() {

                try {
                    SharedPreferences logins = getSharedPreferences("LoginPref", 0);
                    QBUser user = new QBUser(logins.getString(TRUE_ME_USERNEME, ""), logins.getString("password", ""));
                    SharedPreferences s=getSharedPreferences("QBid",0);
                    user.setId(Integer.valueOf(s.getString("id","")));
                    if(!QBChatService.getInstance().isLoggedIn()) {
                        QBChatService.getInstance().login(user);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }

            }
        };

        thread.start();
    }

    private void ProcessCalls() {
        QBRTCClient.getInstance(this).prepareToProcessCalls();
    }


    @Override
    public void onReceiveNewSession(QBRTCSession qbrtcSession) {
        DataHolder.getInstance().setServiceData(qbrtcSession,qbrtcSession.getUserInfo());
        startActivity(new Intent(this,VideoCallActivity.class).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK).putExtra("service",true));
    }

    @Override
    public void onUserNoActions(QBRTCSession qbrtcSession, Integer integer) {

    }

    @Override
    public void onSessionStartClose(QBRTCSession qbrtcSession) {

    }

    @Override
    public void onUserNotAnswer(QBRTCSession qbrtcSession, Integer integer) {

    }

    @Override
    public void onCallRejectByUser(QBRTCSession qbrtcSession, Integer integer, Map<String, String> map) {

    }

    @Override
    public void onCallAcceptByUser(QBRTCSession qbrtcSession, Integer integer, Map<String, String> map) {

    }

    @Override
    public void onReceiveHangUpFromUser(QBRTCSession qbrtcSession, Integer integer, Map<String, String> map) {

    }

    @Override
    public void onSessionClosed(QBRTCSession qbrtcSession) {

    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM