【问题标题】:This video is unavailable. Youtube Api Error. Android Studio该视频不可用。 Youtube API 错误。安卓工作室
【发布时间】:2021-04-27 13:57:24
【问题描述】:

我在我的项目中使用 youtube api,它是一个简单的应用程序,可以在其中播放一些 youtube 视频。但是每个视频都给出此错误“此视频不可用”。我试图更改 api 密钥但仍然是同样的错误。不知道出了什么问题。它仅包含两个活动,主要活动带有一个 recyclerview,其中显示视频缩略图,当用户点击任何缩略图时,播放器活动打开并播放该视频。我正在使用意图发送指向玩家活动的链接。这是我的代码。

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();
    }

}

}

更新:Gradle 配置在这里。

Build.gradle(项目)

// 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(模块)

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'

}

错误日志: 此错误消息显示在播放器上,而不是播放视频。 “此视频不可用”。 使用 PlayerstatechangeListener,调用 Error 方法,它只记录一个单词“Unavailable”。 另一个显示的日志是, “YouTubeAndroidPlayerAPI:RemoteEmbeddedPlayer 不支持嵌入配置。”

【问题讨论】:

  • 您可以编辑您的问题并包含 gradle 配置和错误日志吗?
  • 更新了问题。请看一下。
  • 根据你的错误信息,你可以在这里stackoverflow.com/questions/53087442/…提出与你的问题类似的问题

标签: android api youtube


【解决方案1】:

而不是传递整个链接。您只能传递视频密钥。例如:BjV-cCEFAdw

【讨论】:

  • Sovandara LENG,那是我的错误。感谢您指出。
猜你喜欢
  • 1970-01-01
  • 2016-03-11
  • 2013-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-08
相关资源
最近更新 更多