Youtube 播放器视频未加载

Posted

技术标签:

【中文标题】Youtube 播放器视频未加载【英文标题】:Youtube Player video not loading 【发布时间】:2017-03-30 15:31:44 【问题描述】:

我有一个名为 VideoActivity 的活动。在 youtubeplayerview 下方有一个视频列表。在第一次加载视频时。当我点击一个项目时去另一个活动,然后回到那个活动,它不玩。我可以知道原因吗?

这里是代码

public class VideoActivity extends YouTubeBaseActivity implements YouTubePlayer.OnInitializedListener 

public Video video;
private RecyclerView recyclerVideos;
private static final int RECOVERY_DIALOG_REQUEST = 1;
private YouTubePlayerView youTubeView;


@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_video);

    recyclerVideos = (RecyclerView) findViewById(R.id.recyclerVideos);

    Intent i = getIntent();
    video = (Video) i.getSerializableExtra("video");

    LinearLayoutManager layoutManager = new LinearLayoutManager(this);
    layoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);
    recyclerVideos.setLayoutManager(layoutManager);

    new VideoAsyncTask().execute();

 

@Override
public void onInitializationFailure(YouTubePlayer.Provider provider,
                                    YouTubeInitializationResult errorReason) 

    if (errorReason.isUserRecoverableError()) 
        errorReason.getErrorDialog(this, RECOVERY_DIALOG_REQUEST).show();
     else 
        String errorMessage = String.format(
                getString(R.string.error_player), errorReason.toString());
        Toast.makeText(this, errorMessage, Toast.LENGTH_LONG).show();
    


@Override
public void onInitializationSuccess(YouTubePlayer.Provider provider,
                                    YouTubePlayer player, boolean wasRestored) 

    if (!wasRestored) 
        player.cueVideo(video.Videoid);
        player.setPlayerStyle(YouTubePlayer.PlayerStyle.DEFAULT);
    



@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) 
    if (requestCode == RECOVERY_DIALOG_REQUEST) 
        // Retry initialization if user performed a recovery action
        getYouTubePlayerProvider().initialize(Constants.DEVELOPER_KEY, this);
    


private YouTubePlayer.Provider getYouTubePlayerProvider() 
    return (YouTubePlayerView) findViewById(R.id.youtube_view);


private class VideoAsyncTask extends AsyncTask<Void, Void, Video> 

    @Override
    protected void onPreExecute() 

    

    @Override
    protected Video doInBackground(Void... params) 

        try 
         return   webservice();

         catch (Exception e1) 
            e1.printStackTrace();
            return null;
        
    

    protected void onPostExecute(final Video video) 
        try 
            if (video == null) 
                return;
            

            VideosAdapter videoAdapter = new VideosAdapter(video.videos,VideoActivity.this);
            recyclerVideos.setAdapter(videoAdapter);
    youTubeView.initialize(Constants.DEVELOPER_KEY, VideoActivity.this);

         catch (Throwable ignored) 
    


【问题讨论】:

【参考方案1】:

我的清单示例

<application
    android:name=".UGNEWS24"
    android:allowBackup="true"
    android:debuggable="true"
    android:hardwareAccelerated="true"
    android:icon="@drawable/ugnews24_rounded_logo"
    android:label="@string/app_name"
    android:largeHeap="true"
    android:roundIcon="@drawable/ugnews24_rounded_logo"
    android:supportsRtl="true"
    android:theme="@style/AppTheme"
    tools:ignore="HardcodedDebugMode">
    <activity android:name=".activity.WebViewActivity"></activity>
    <activity android:name=".SearchResultsActivity" />

【讨论】:

【参考方案2】:

在离开 YouTubePlayerView 所在的活动/片段之前,请执行以下操作:

youtubePlayer.pause();
youtubePlayer.release();

【讨论】:

【参考方案3】:

是的。我解决了这个问题。

第 1 步:将 youtubeview 添加到线性布局

第 2 步:在 onResume 上删除视图并在返回活动时再次将 youtubeview 添加到线性布局

第 3 步:在后按中停止 youtube 视频

【讨论】:

能否请您添加有关如何实现此功能的更多详细信息。我尝试了您的步骤,但仍然无法正常工作。谢谢。 @DucLe :嘿,我在 xml 中创建了一个 LinearLayout,并将 youtubeview 添加到 LinearLayout,然后对其进行了初始化。如果我再次从另一个活动中来到这个活动,那么在 onResume 中我删除了视图并再次添加它. 我无法让它工作。你能显示一些代码吗?我尝试以编程方式以及从 xml 添加 YouTubePlayerView。视频仍然无法加载。【参考方案4】:
@Override
public void onResume()
super.onResume();
try 
        if (video == null) 
            return;
        

       YouTubePlayer.loadVideo(String videoId, int timeMillis);

     catch (Throwable ignored) 

【讨论】:

它来了Resume??视频 == null?? 是的。它来了。但没有加载视频 尝试一次,而不是 player.cuevideo(videoid) 在 onInitializationSuccess 中使用 player.loadVideo(videoId)。 让我们continue this discussion in chat。【参考方案5】:

离开时尝试完成活动, 或在 resume 而不是 oncreate 上初始化 youtubeplay

@Override
public void onResume()
    super.onResume();
    new VideoAsyncTask().execute();

【讨论】:

以上是关于Youtube 播放器视频未加载的主要内容,如果未能解决你的问题,请参考以下文章

Youtube API 未构建 iFrame

YouTube 视频未在 WebView 中播放 - Android

如何统一加载 YouTube 直播视频流? [关闭]

jQuery 在页面加载时播放 iframe 嵌入的 YouTube 视频

自动全屏播放 youtube 视频

在嵌入式 YouTube 播放器中自动播放下一个视频