简体   繁体   中英

Can't get video working for new android SDK of quickBlox

I've been trying to get videochat to work for the android 2.0 SDK of quickblox for the past two days. I can accept, make, reject videocalls but the video will not send or receive on the surfaceview.

I can see my own camera video and switch the camera fine.

I've gone over the demo multiple times and I pretty much copied it line by line.

Can anyone give me some tips on how to get it working? I would be super thankful.

Here is my QBChatListener declaration

 OnQBVideoChatListener qbVideoChatListener = new OnQBVideoChatListener() {
    @Override
    public void onCameraDataReceive(byte[] videoData) {

        QBVideoChatController.getInstance().sendVideo(videoData);
        Log.d("send", "video");

    }

    @Override
    public void onMicrophoneDataReceive(byte[] audioData) {
        if (!muteOn) {
            QBVideoChatController.getInstance().sendAudio(audioData);
            Log.d("send", "audio");

        }
    }

    @Override
    public void onOpponentVideoDataReceive(byte[] videoData) {
        toUserSurfaceView.render(videoData);
        Log.d("receive", "video");
    }

    @Override
    public void onOpponentAudioDataReceive(byte[] audioData) {
        QBVideoChatController.getInstance().playAudio(audioData);
        Log.d("receive", "audio");

    }



    @Override
    public void onProgress(boolean progress) {
//            progressBar.setVisibility(progress ? View.VISIBLE : View.GONE);
    }

    @Override
    public void onVideoChatStateChange(CallState callState, VideoChatConfig receivedVideoChatConfig) {
        videoChatConfig = receivedVideoChatConfig;

        switch (callState) {

            case ON_CALL_START:
                Log.d("ON_CALL_START", "ON_CALL_START");

                break;
            case ON_CANCELED_CALL:

                videoChatConfig = null;
                Log.d("on_cancel", "on_cancel");


                //play sound
                goBack();


                break;
            case ON_CALL_END:
                Log.d("oncallend", "oncallend");

                // clear opponent view
                toUserSurfaceView.clear();
                goBack();

                break;
            case ACCEPT:

                callingTitle.setText("Attempting to connect with \n" + callTitle);
                mySurfaceView.setVisibility(View.VISIBLE);
                toUserSurfaceView.setVisibility(View.VISIBLE);
                QBVideoChatController.getInstance().acceptCallByFriend(videoChatConfig, null);
                Log.d("accept", "accept");


                break;
            case ON_ACCEPT_BY_USER:
                callingTitle.setText(callTitle + "\n accepted. Attempting to connect");
                mySurfaceView.setVisibility(View.VISIBLE);
                toUserSurfaceView.setVisibility(View.VISIBLE);

                QBVideoChatController.getInstance().onAcceptFriendCall(videoChatConfig, null);
                Log.d("ON_ACCEPT_BY_USER", "ON_ACCEPT_BY_USER");

                break;
            case ON_REJECTED_BY_USER:


                                    break;
            case ON_DID_NOT_ANSWERED:


                break;


            case ON_CONNECTED:
                hideTitleAndIndicator();
                Log.d("onConnected", "onConnected");

                switchCameraButton.setEnabled(true);

                break;
            case ON_START_CONNECTING:
                Log.d("onstartconnection", "onstartconnection");


                break;

        }

    }

Here are the errors I'm getting in my log:

10-03 21:08:36.910    D/QBDataSenders﹕ true false false
10-03 21:08:36.910    D/QBDataSenders﹕ videoData didn`t send
10-03 21:08:36.918    D/CameraView﹕ time=368 9600 1000
10-03 21:08:36.918    D/CameraView﹕ processed my audio frame, time=368, size=0.9765625 kb false
10-03 21:08:36.918    D/QBDataSenders﹕ audiData didn`t send
10-03 21:08:36.918    D/send﹕ audio
10-03 21:08:36.957    D/skia﹕ onFlyCompress
10-03 21:08:37.012    GC_FOR_ALLOC freed 1218K, 13% free 13441K/15392K, paused 32ms, total 32ms
10-03 21:08:37.051    D/QBDataSenders﹕ true false false
10-03 21:08:37.051    D/QBDataSenders﹕ videoData didn`t send

also

10-03 21:23:09.528    W/System.err﹕ java.lang.InterruptedException
10-03 21:23:09.528     W/System.err﹕ at java.lang.VMThread.sleep(Native Method)
10-03 21:23:09.528     W/System.err﹕ at java.lang.Thread.sleep(Thread.java:1031)
10-03 21:23:09.535     W/System.err﹕ at java.lang.Thread.sleep(Thread.java:1013)
10-03 21:23:09.535    W/System.err﹕ at com.quickblox.module.videochat.core.objects.AudioRecorder$AudioPlayingRunnable.run(AudioRecorder.java:126)
10-03 21:23:09.535    W/System.err﹕ at java.lang.Thread.run(Thread.java:856)
10-03 21:23:09.535    W/System.err﹕ java.lang.InterruptedException
10-03 21:23:09.535    W/System.err﹕ java.lang.InterruptedException
10-03 21:23:09.535    W/System.err﹕ at java.lang.VMThread.sleep(Native Method)
10-03 21:23:09.535   W/System.err﹕ at java.lang.Thread.sleep(Thread.java:1031)
10-03 21:23:09.535    W/System.err﹕ at java.lang.Thread.sleep(Thread.java:1013)
10-03 21:23:09.535   W/System.err﹕ at com.quickblox.module.videochat.core.objects.AudioRecorder$AudioPlayingRunnable.run(AudioRecorder.java:126)
10-03 21:23:09.535   W/System.err﹕ at java.lang.Thread.run(Thread.java:856)

and

10-03 22:27:49.824   W/System.err﹕ java.lang.InterruptedException
10-03 22:27:49.831   W/System.err﹕ at java.lang.VMThread.sleep(Native Method)
10-03 22:27:49.831   W/System.err﹕ at java.lang.Thread.sleep(Thread.java:1031)
10-03 22:27:49.831   W/System.err﹕ at java.lang.Thread.sleep(Thread.java:1013)
10-03 22:27:49.831  W/System.err﹕ at com.quickblox.module.videochat.core.objects.XMPPConnectionClient$CallingRunnable.run(XMPPConnectionClient.java:150)

After much hair pulling and some help from styler1972- here's what worked for me.

I don't which exact one fixed my issue, but this is what is working for me, so I'll include all of it.

  1. Make sure you have the armeabi codec in your libs folder just like the demo project.

  2. In gradle make sure you have

    buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.12.2' } }

    then

    android {

    compileSdkVersion 19 buildToolsVersion '20.0.0'

     sourceSets { main { manifest.srcFile 'src/main/AndroidManifest.xml' //location of your manifest java.srcDirs = ['src'] res.srcDirs = ['src/main/res'] } } defaultConfig { applicationId "your bundle id" minSdkVersion 16 targetSdkVersion 19 versionCode 1 versionName "1.0" } // don't use proguard // buildTypes { // release { // runProguard true // proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' // } // } // lintOptions { // abortOnError true // } task nativeLibsToJar(type: Zip, description: 'create a jar archive of the native libs') { destinationDir file("$buildDir/native-libs") baseName 'native-libs' extension 'jar' from fileTree(dir: 'libs', include: '**/*.so') into 'lib/' } tasks.withType(JavaCompile) { compileTask -> compileTask.dependsOn(nativeLibsToJar) } dependencies { compile fileTree(dir: 'libs', include: '*.jar') compile fileTree(dir: '../jar', include: '*.jar') compile fileTree(dir: "$buildDir/native-libs", include: 'native-libs.jar') } 

After that, I was able to make it finally work!

This solution is for eclipse Android project structure:-

In SDK sample you will find a .SO file for codec which should be in the project.Copy this file into your libs/armeabi folder.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM