【发布时间】: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/…提出与你的问题类似的问题