登山则情满于山,观海则意溢于海。这篇文章主要讲述Android:quickblox传入的视频通话未收到相关的知识,希望能为你提供帮助。
我使用quickblox
创建视频通话
开始呼叫工作,但传入服务不适用于对手用户
视频活动
public class VideoActivity extends E 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.video);
userid=getIntent().getIntExtra("user", 1);
userid = 39753771;
isOutgoing=getIntent().getBooleanExtra("isoutgoing",false);
isOutgoing = true;
ProcessCalls();
InitSignalling();
if (isOutgoing) {
//CallUser();
SetCallerName(userid);
}
Log.i("errorCheck", "Nz: " + userid);
Log.i("errorCheck", "Na: " + isOutgoing);
if(getIntent().getBooleanExtra("service",false)){
Log.i("errorCheck", "x");
}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();
}private void SetCallerName(Integer callerID) {
TextView callerName=(TextView)findViewById(R.id.callername);
TextView callertime=(TextView)findViewById(R.id.callTime);
callerName.setText(callerID + " , You:");
if(isOutgoing){
callertime.setText("Calling...");
}}private void InitSignalling() {
final QBChatService chatService = QBChatService.getInstance();
Log.i("errorCheck", "ERR1: " + G.userQB);
chatService.login(G.userQB, new QBEntityCallback() {
@Override
public void onSuccess(Object result, Bundle params) {
Log.i("errorCheck", "R0: " + result);
Log.i("errorCheck", "R1: " + params);
chatService.getVideoChatWebRTCSignalingManager().addSignalingManagerListener(new QBVideoChatSignalingManagerListener() {
@Override
public void signalingCreated(QBSignaling qbSignaling, boolean createdLocally) {
Log.i("errorCheck", "Q1: " + qbSignaling);
Log.i("errorCheck", "Q2: " + createdLocally);
if (!createdLocally) {
QBRTCClient.getInstance(VideoActivity.this).addSignaling((QBWebRTCSignaling) qbSignaling);
}
}
});
QBRTCClient.getInstance(G.currentActivity).addSessionCallbacksListener((QBRTCSessionEventsCallback) G.currentActivity);
QBRTCConfig.setDebugEnabled(true);
QBRTCClient.getInstance(getApplicationContext()).prepareToProcessCalls();
Log.i("errorCheck", "chatService1: " + chatService);
if(G.userMobile.equals("09139479548")) {
CallUser();
}
}@Override
public void onError(QBResponseException errors) {
Log.i("errorCheck", "E1: " + errors);
}
});
}private void ProcessCalls() {
QBRTCClient.getInstance(this).prepareToProcessCalls();
}private void CallUser() {
List<
Integer>
opponents = new ArrayList<
Integer>
();
opponents.add(userid);
Map<
String, String>
userInfo = new HashMap<
>
();
userInfo.put("key", "value");
QBRTCTypes.QBConferenceType qbConferenceType = QBRTCTypes.QBConferenceType.QB_CONFERENCE_TYPE_VIDEO;
QBRTCSession session = QBRTCClient.getInstance(G.currentActivity).createNewSessionWithOpponents(opponents, qbConferenceType);
session.addVideoTrackCallbacksListener(this);
session.startCall(userInfo);
Log.i("errorCheck", "QR1: " + session);
SetCallButtonsDialing(session,userInfo);
StartDialRinging();
}@Override
public void onReceiveNewSession(QBRTCSession qbrtcSession) {
Log.i("errorCheck","x");
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);
VideoActivity.this.finish();
if(mp!=null&
&
mp.isPlaying())
{
mp.stop();
}
}
});
}@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) {
Log.i("errorCheck", "WW1: " + qbrtcSession);
qbrtcVideoTrack.addRenderer(new VideoRenderer(surfaceView));
surfaceView.setMirror(true);
surfaceView.requestLayout();
}@Override
public void onRemoteVideoTrackReceive(QBRTCSession qbrtcSession, QBRTCVideoTrack qbrtcVideoTrack, Integer integer) {
Log.i("errorCheck", "WW2: " + qbrtcSession);
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();
}
}
}
VideoCallService
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) {
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 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);
}
}
});
}private void ProcessCalls() {
QBRTCClient.getInstance(this).prepareToProcessCalls();
}@Override
public void onReceiveNewSession(QBRTCSession qbrtcSession) {
//DataHolder.getInstance().setServiceData(qbrtcSession,qbrtcSession.getUserInfo());
startActivity(new Intent(this,VideoActivity.class).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK).putExtra("service",true));
}
}
表现
<
service
android:name=".MyFirebaseMessagingService">
<
intent-filter>
<
action android:name="com.google.firebase.MESSAGING_EVENT"/>
<
/intent-filter>
<
/service>
<
service
android:name=".MyFirebaseInstanceIDService">
<
intent-filter>
<
action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
<
/intent-filter>
<
/service>
<
service android:name=".VideoCallService" />
<
receiver
android:name="com.google.android.gms.gcm.GcmReceiver"
android:exported="true"
android:permission="com.google.android.c2dm.permission.SEND">
<
intent-filter>
<
action android:name="com.google.android.c2dm.intent.RECEIVE" />
<
action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<
category android:name="com.quickblox.sample.groupchatwebrtc" />
<
/intent-filter>
<
/receiver>
<
service
android:name=".GcmPushListenerService"
android:exported="false">
<
intent-filter>
<
action android:name="com.google.android.c2dm.intent.RECEIVE" />
<
/intent-filter>
<
/service>
<
service
android:name="com.quickblox.messages.services.gcm.QBGcmPushInstanceIDService"
android:exported="false">
<
intent-filter>
<
action android:name="com.google.android.gms.iid.InstanceID" />
<
/intent-filter>
<
/service>
<
meta-data android:name="com.quickblox.messages.TYPE" android:value="https://www.songbingjia.com/android/GCM" />
<
meta-data android:name="com.quickblox.messages.SENDER_ID" android:value="https://www.songbingjia.com/android/1" />
<
meta-data android:name="com.quickblox.messages.QB_ENVIRONMENT" android:value="https://www.songbingjia.com/android/DEVELOPMENT" />
在开始呼叫之后,为对手创建会话
这是我的用户来电日志
I/org.webrtc.Logging: SurfaceViewRenderer: localView: onMeasure(). New size: 200x200
I/org.webrtc.Logging: EglRenderer: localView: setLayoutAspectRatio: 1.0
I/org.webrtc.Logging: EglRenderer: opponentView: setLayoutAspectRatio: 0.58536583
D/QBASDK: register network listener
D/QBASDK: Connected. Login to chat, currentUser JID: 39753009-65649, resource: android_ffffffff-ac04-0c2d-ffff-ffffd173e4c0
I/errorCheck: R0: null
I/errorCheck: R1: Bundle[{}]
D/RTCClient.:Added session CALLBACK listenerapp.x.y.VideoActivity@4288e7f8
I/errorCheck: chatService1: com.quickblox.chat.QBChatService@42f6b478
D/RTCClient.: Call createNewSessionWithOpponents[39753771]conference type=QBConferenceType{value='https://www.songbingjia.com/android/1'}
D/RTCClient.QBRTCSession: Create new session
I/errorCheck: Q1: com.quickblox.chat.QBWebRTCSignaling@43156ce0
I/errorCheck: Q2: true
D/RTCClient.: New signalling was added for participant39753771
D/RTCClient.QBRTCSession: Make new channel for oppoennt:39753771com.quickblox.videochat.webrtc.QBPeerChannel@42f23c00
D/RTCClient.QBRTCSession: isInitiator=true
D/RTCClient.QBRTCSession:ADD VideoTrackCallbacksListener app.x.y.VideoActivity@4288e7f8
D/RTCClient.QBRTCSession: startCall
D/RTCClient.PeerFactoryManager: Creating Peer connection factory
D/RTCClient.QBRTCSession.SessionWaitingTimers: Stop WaitTimer
但对于没有设置日志的对手(不是来电通知或...)
我怎么解决这个问题?
答案你可以参考这个thread。检查video-sample。通过接收此样本中的推送,实现了打开
IncomingCallFragment
。此外,如果您订阅成功,但没有收到推送,您始终可以检查以下内容:【Android(quickblox传入的视频通话未收到)】希望这可以帮助!
- 检查推送证书:管理面板 - > 推送通知 - > 设置 - > APNS,GCM等。
- 从管理面板发送推送 - > 推送通知 - > 发送(link)
- 您还可以在“管理员”面板中查看“推送通知队列”选项卡,其中应该有您的推送日志。它将帮助您了解设备的运行情况。
推荐阅读
- Android GCM Intent Service类名
- 在点击android push-plugin通知后,Nativescript会调用某些操作
- 如何将数据从服务器发送到Android()
- 为什么我不能注册我的Android设备( xam.pushnotification)
- Android(无法获取Android设备4.1.1的注册ID返回“java.io.IOException:SERVICE_NOT_AVAILABLE”)
- 如何在Chrome,Safari和Firefox中启用TLS 1.3()
- 如何在Apache,Nginx和Cloudflare中启用TLS 1.3()
- 如何在Apache和Nginx中启用CORS()
- 如何像黑客一样分析你的网站以查找漏洞()