使用youtubeplayer视图实现视频播放一毫秒

时间:2014-10-20 10:19:45

标签: android youtube youtube-api

我正在尝试使用youtubeplayer视图在我的应用中播放youtube视频,当用户点击按钮但它只播放一毫秒后,它就停止了.App没有崩溃,但视频也没有播放。 相同的代码是 -

public class PlayVideo extends YouTubeBaseActivity implements YouTubePlayer.OnInitializedListener {

        public static final String API_KEY = "xxxx";
        String videoId;
        String url="http://www.youtube.com/xxx";


        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            /** attaching layout xml **/
            setContentView(R.layout.activity_video_view);

            /** Initializing YouTube player view **/
            YouTubePlayerView youTubePlayerView = (YouTubePlayerView) findViewById(R.id.youtube_player);
            youTubePlayerView.initialize(API_KEY, this);
            videoId=getYoutubeVideoId(url);
            Log.e("id",videoId);
            //videoId=getIntent().getExtras().getString("url");

        }

        @Override
        public void onInitializationFailure(Provider provider, YouTubeInitializationResult result) {
            Toast.makeText(this, "Failured to Initialize!", Toast.LENGTH_LONG).show();
        }

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

            /** add listeners to YouTubePlayer instance **/
            player.setPlayerStateChangeListener(playerStateChangeListener);
            player.setPlaybackEventListener(playbackEventListener);

            /** Start buffering **/
            if (!wasRestored) {
                player.cueVideo(videoId);
            }
        }

        private PlaybackEventListener playbackEventListener = new PlaybackEventListener() {

            @Override
            public void onBuffering(boolean arg0) {
                    Log.e("on","buffer");
            }

            @Override
            public void onPaused() {
                Log.e("on","pause");
            }

            @Override
            public void onPlaying() {
                Log.e("on","play");
            }

            @Override
            public void onSeekTo(int arg0) {
                Log.e("on","seekto");
            }

            @Override
            public void onStopped() {
                Log.e("on","stop");
            }

        };

        private PlayerStateChangeListener playerStateChangeListener = new PlayerStateChangeListener() {

            @Override
            public void onAdStarted() {
                Log.e("on","ad");
            }


            @Override
            public void onLoaded(String arg0) {
                Log.e("on","loaded");
            }

            @Override
            public void onLoading() {
                Log.e("on","loading");
            }

            @Override
            public void onVideoEnded() {
                Log.e("on","vidEnd");
            }

            @Override
            public void onVideoStarted() {
                Log.e("on","vidStart");
            }

            @Override
            public void onError(ErrorReason arg0) {
                // TODO Auto-generated method stub

            }
        };

        public static String getYoutubeVideoId(String youtubeUrl)
         {
         String video_id="";
          if (youtubeUrl != null && youtubeUrl.trim().length() > 0 && youtubeUrl.startsWith("http"))
         {

        String expression = "^.*((youtu.be"+ "\\/)" + "|(v\\/)|(\\/u\\/w\\/)|(embed\\/)|(watch\\?))\\??v?=?([^#\\&\\?]*).*"; // var regExp = /^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#\&\?]*).*/;
         CharSequence input = youtubeUrl;
         Pattern pattern = Pattern.compile(expression,Pattern.CASE_INSENSITIVE);
         Matcher matcher = pattern.matcher(input);
         if (matcher.matches())
         {
        String groupIndex1 = matcher.group(7);
         if(groupIndex1!=null && groupIndex1.length()==11)
         video_id = groupIndex1;
         }
         }
         return video_id;
         }
    }

xml文件 -

<?xml version="1.0" encoding="utf-8"?>
<com.google.android.youtube.player.YouTubePlayerView xmlns:android="http://schemas.android.com/apk/res/android"
            android:id="@+id/youtube_player"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="#fff"
            android:padding="5dp" />
logcat中的

警告 -

W/YouTubeAndroidPlayerAPI(8722): YouTube video playback stopped due to unauthorized overlay on top of player. The YouTubePlayerView is not contained inside its ancestor com.google.android.youtube.player.YouTubePlayerView{41c88550 V.E..... ........ 0,0-480,270 #7f05003d app:id/youtube_player}. The distances between the ancestor's edges and that of the YouTubePlayerView is: left: -8, top: -8, right: -8, bottom: -8 (these should all be positive).

1 个答案:

答案 0 :(得分:1)

使用youtubeplayer片段而不是youtubeplayer view解决了这个问题。同样的代码是 -

XML -

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:orientation="vertical"
    tools:context=".MainActivity" >


    <fragment
      android:name="com.google.android.youtube.player.YouTubePlayerFragment"
      android:id="@+id/youtubeplayerfragment"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"/>

</LinearLayout>

java文件 -

public class PlayVideo extends YouTubeBaseActivity implements YouTubePlayer.OnInitializedListener{

public static final String DEVELOPER_KEY = "your api key";
private static final int RECOVERY_DIALOG_REQUEST = 1;
String url="your video url";
 String VIDEO_ID;

YouTubePlayerFragment myYouTubePlayerFragment;

@Override
protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_video_view);
 myYouTubePlayerFragment = (YouTubePlayerFragment)getFragmentManager()
   .findFragmentById(R.id.youtubeplayerfragment);
 myYouTubePlayerFragment.initialize(DEVELOPER_KEY, this);
 VIDEO_ID=getYoutubeVideoId(url);
}

@Override
public void onInitializationFailure(YouTubePlayer.Provider provider,
  YouTubeInitializationResult errorReason) {
 if (errorReason.isUserRecoverableError()) {
  errorReason.getErrorDialog(this, RECOVERY_DIALOG_REQUEST).show();
 } else {
  String errorMessage = String.format(
    "There was an error initializing the YouTubePlayer (%1$s)",
    errorReason.toString());
  Toast.makeText(this, errorMessage, Toast.LENGTH_LONG).show();
 }
}

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

@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(DEVELOPER_KEY, this);
 }
}

protected YouTubePlayer.Provider getYouTubePlayerProvider() {
 return (YouTubePlayerView)findViewById(R.id.youtubeplayerfragment);
}
public static String getYoutubeVideoId(String youtubeUrl)
     {
     String video_id="";
      if (youtubeUrl != null && youtubeUrl.trim().length() > 0 && youtubeUrl.startsWith("http"))
     {

    String expression = "^.*((youtu.be"+ "\\/)" + "|(v\\/)|(\\/u\\/w\\/)|(embed\\/)|(watch\\?))\\??v?=?([^#\\&\\?]*).*"; // var regExp = /^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#\&\?]*).*/;
     CharSequence input = youtubeUrl;
     Pattern pattern = Pattern.compile(expression,Pattern.CASE_INSENSITIVE);
     Matcher matcher = pattern.matcher(input);
     if (matcher.matches())
     {
    String groupIndex1 = matcher.group(7);
     if(groupIndex1!=null && groupIndex1.length()==11)
     video_id = groupIndex1;
     }
     }
     return video_id;
     }
}

在清单文件中添加互联网权限。