1
votes

I am using youtube api in my project and it is a simple app with some youtube videos to play in it. But every video is giving this error "This video is unavailable". I tried to change api key but still the same error. Don't know what is going wrong. It consist of only two activities, main activity with a recyclerview where video thumbnails are showing and when user tap on any thumbnail, player activity open and play that video. I am using intent to send link to player activity. Here is my code.

MainActivity.java

public class MainActivity extends AppCompatActivity {

ArrayList<String> myvideos;
ArrayList<String> mythumbnails;
RecyclerView recyclerView;
MyRecyclerViewAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    recyclerView = findViewById(R.id.recyclerview);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
    myvideos = new ArrayList<>();
    mythumbnails = new ArrayList<>();
    populateLinkList();
    populateThumnailList();
    adapter = new MyRecyclerViewAdapter(MainActivity.this, myvideos, mythumbnails);
    recyclerView.setAdapter(adapter);
    adapter.setOnItemClickListener(new MyRecyclerViewAdapter.MyClickListener() {
        @Override
        public void onItemClick(int position, View v, ArrayList<String> data) {
            Intent it = new Intent(MainActivity.this, PlayerActivity.class);
            Log.e("Link", myvideos.get(position));
            it.putExtra("link", myvideos.get(position));
            startActivity(it);
        }
    });

}
public void populateLinkList(){
    myvideos.add("https://www.youtube.com/watch?v=BjV-cCEFAdw");
    myvideos.add("https://www.youtube.com/watch?v=gpjv--hxUQM");
    myvideos.add("https://www.youtube.com/watch?v=MCJLW8O5-dg");
}
public void populateThumnailList(){
    for (int i=0;i<myvideos.size();i++){
        String videoid = myvideos.get(i).split("v=")[1];
        mythumbnails.add("http://img.youtube.com/vi/"+videoid+"/mqdefault.jpg");
    }
}
}

Playeractivity.Java

public class PlayerActivity extends YouTubeBaseActivity  implements YouTubePlayer.OnInitializedListener{

private static final String API_KEY = "APIKEYHERE";
private static String VIDEO_ID ;
private YouTubePlayer youTubePlayer;
private YouTubePlayer.PlayerStateChangeListener playerStateChangeListener;
private YouTubePlayer.PlaybackEventListener playbackEventListener;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
    setContentView(R.layout.activity_player);

    Intent it = getIntent();
    if (it!=null){
        VIDEO_ID = it.getStringExtra("link");
        Log.e("Video Link", VIDEO_ID);
    }

    YouTubePlayerView youTubeView = findViewById(R.id.youtube_view);
    youTubeView.initialize(API_KEY, this);

}

@Override
public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer player, boolean b) {
        player.cueVideo(VIDEO_ID);
}

@Override
public void onInitializationFailure(YouTubePlayer.Provider provider, YouTubeInitializationResult result) {
    if (result.isUserRecoverableError()){
        result.getErrorDialog(this, 1).show();
    }

}

}

Update: Gradle config is here.

Build.gradle (Project)

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {

repositories {
    google()
    jcenter()
    
}
dependencies {
    classpath 'com.android.tools.build:gradle:3.6.2'
    

    // NOTE: Do not place your application dependencies here; they belong
    // in the individual module build.gradle files
}
}

allprojects {
repositories {
    google()
    jcenter()
    
}


}

task clean(type: Delete) {
delete rootProject.buildDir

}

Build.gradle (Module)

apply plugin: 'com.android.application'

android {
compileSdkVersion 30
buildToolsVersion "30.0.3"

defaultConfig {
    applicationId "com.amazinglab.faheem.rashid.cartoonwatch"
    minSdkVersion 16
    targetSdkVersion 30
    versionCode 1
    versionName "1.0"

    testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
    }
}

}

dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
implementation 'com.github.bumptech.glide:glide:4.11.0'
implementation 'androidx.recyclerview:recyclerview:1.1.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'

}

Error Log: Instead of playing video, this error msg show on player. "This video is unavailable". Using PlayerstatechangeListener, on Error method called and it log just one word "Unavailable". Another log which show up is, "YouTubeAndroidPlayerAPI: Embed config is not supported in RemoteEmbeddedPlayer."

1
Can you edit your question and include the gradle configure and errors log?Sovandara LENG
Updated the question. Plz take a look.Rashid Faheem
based on your error message, you can fine similiar question to your problem here stackoverflow.com/questions/53087442/…Sovandara LENG

1 Answers

1
votes

Instead of pass the whole link. You can pass only the video key. For example: BjV-cCEFAdw