如何在我的Android应用程序中播放YouTube视频?


84

如何YouTube在应用程序中播放视频?我想play video直接从YouTube流式传输而不下载。另外,在播放视频时,我想提供菜单选项。我不想使用默认意图播放视频。我怎样才能做到这一点?



1
它仅需2分钟的工作,即可从开发者控制台启用Youtube选项,下载youtube播放器jar文件,开始使用它,其简单操作可参考以下这篇文章feelzdroid.com/2017/01/…–
火影忍者

Answers:


59

这是btn点击事件

btnvideo.setOnClickListener(new OnClickListener() {

public void onClick(View v) {

    startActivity(new Intent(Intent.ACTION_VIEW,Uri.parse("http://www.youtube.com/watch?v=Hxy8BZGQ5Jo")));
    Log.i("Video", "Video Playing....");

    }
}); 

此类型会在youtube的另一个页面中打开,您可以在其中显示您的视频


1
这取决于YouTube aap,否则它将在新的webView中打开视频,我想在VideoView中而不是在webview中播放视频。
Abid A. Chaudhary 2012年

3
VideoView需要视频的绝对URL,在YouTube的情况下可能无法使用。
阿曼阿拉姆2012年

3
对于任何复制和粘贴程序,如果您对为什么它可能不起作用感到困惑,则newIntent中应该有一个空格。新的意图
OrhanC1 2013年

10
问题像这样:“我不想使用默认意图播放视频。”
Naresh

18

脚步

  1. 使用菜单选项为播放器(全屏)屏幕创建一个新的活动。在不同的线程中运行mediaplayer和UI。

  2. 对于播放媒体-通常要播放音频/视频,Android中有Mediaplayer API。FILE_PATH是文件的路径-可以是url(youtube)流或本地文件路径

     MediaPlayer mp = new MediaPlayer();
        mp.setDataSource(FILE_PATH);
        mp.prepare();
        mp.start();
    

另请查看:Android YouTube应用“播放视频意图” 已经对此进行了详细讨论。


8
FILE_PATH如何指向YouTube视频?youtube链接是播放视频的网页,而不是文件本身的链接。
马蒂·米勒

3
Youtube没有任何绝对网址。这是OP最初关心的问题。
2013年

1
@MartyMiller从youtube获取流网址是另一个问题。它与youtube api有关。
Naresh

11

使用YouTube Android Player API。

activity_main.xml:

 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"

tools:context="com.example.andreaskonstantakos.vfy.MainActivity">

<com.google.android.youtube.player.YouTubePlayerView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:visibility="visible"
    android:layout_centerHorizontal="true"
    android:id="@+id/youtube_player"
    android:layout_alignParentTop="true" />

<Button
android:text="Button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="195dp"
android:visibility="visible"
android:id="@+id/button" />


</RelativeLayout>

MainActivity.java:

package com.example.andreaskonstantakos.vfy;


import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import com.google.android.youtube.player.YouTubeBaseActivity;
import com.google.android.youtube.player.YouTubeInitializationResult;
import com.google.android.youtube.player.YouTubePlayer;
import com.google.android.youtube.player.YouTubePlayerView;



public class MainActivity extends YouTubeBaseActivity {

YouTubePlayerView youTubePlayerView;
Button button;
YouTubePlayer.OnInitializedListener onInitializedListener;

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

     youTubePlayerView = (YouTubePlayerView) findViewById(R.id.youtube_player);
     button = (Button) findViewById(R.id.button);


     onInitializedListener = new YouTubePlayer.OnInitializedListener(){

         @Override
         public void onInitializationSuccess(YouTubePlayer.Provider provider, YouTubePlayer youTubePlayer, boolean b) {

            youTubePlayer.loadVideo("Hce74cEAAaE");

             youTubePlayer.play();
     }

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

         }
     };

    button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

youTubePlayerView.initialize(PlayerConfig.API_KEY,onInitializedListener);
        }
    });
}
}

和PlayerConfig.java类:

    package com.example.andreaskonstantakos.vfy;

/**
 * Created by Andreas Konstantakos on 13/4/2017.
 */

public class PlayerConfig {

PlayerConfig(){}

public static final String API_KEY = 
"xxxxx";
}

https://www.youtube.com/watch?v=Hce74cEAAaE中的视频ID替换为“ Hce74cEAAaE” 。从Console.developers.google.com获取您的API_KEY,并将其替换为PlayerConfig.API_KEY。有关更多信息,您可以按照以下教程逐步进行:https : //www.youtube.com/watch?v=3LiubyYpEUk


如果我要使用动态视频ID,则会收到“ YouTubeAndroidPlayerAPI:RemoteEmbeddedPlayer不支持嵌入配置”。错误,并且无法播放我的视频。您能帮我吗...预先感谢。
阿米·潘迪(Amit Pandya)

youTubePlayerView.initialize不存在,可能已删除?
Alberto M

5

我不想在设备上安装YouTube应用,所以我使用了本教程:

http://www.viralandroid.com/2015/09/how-to-embed-youtube-video-in-android-webview.html

...以便在我的应用中生成此代码:

WebView mWebView; 

@Override
public void onCreate(Bundle savedInstanceState) {
    setContentView(R.layout.video_webview);
    mWebView=(WebView)findViewById(R.id.videoview);

    //build your own src link with your video ID
    String videoStr = "<html><body>Promo video<br><iframe width=\"420\" height=\"315\" src=\"https://www.youtube.com/embed/47yJ2XCRLZs\" frameborder=\"0\" allowfullscreen></iframe></body></html>";

    mWebView.setWebViewClient(new WebViewClient() {
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
                return false;
        }
    });
    WebSettings ws = mWebView.getSettings();
    ws.setJavaScriptEnabled(true);
    mWebView.loadData(videoStr, "text/html", "utf-8");

}

//video_webview
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginLeft="0dp"
    android:layout_marginRight="0dp"
    android:background="#000000"
    android:id="@+id/bmp_programme_ll"
    android:orientation="vertical" >

   <WebView
    android:id="@+id/videoview" 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    />  
</LinearLayout>     

这正是我想要的。它不会自动播放,但视频会在我的应用程序中传输。值得注意的是,某些受限制的视频在嵌入后将无法播放。


1
是的,您无需使用youtube api就可以正确嵌入带有webview的应用程序中,这是在应用程序中加载视频的好方法谢谢JanB
Ajay Pandya

非常简单的解决方案,不需要注册API密钥(例如YouTube Android Player API)。为我工作!
Michael Osofsky

3

您可以按照https://developers.google.com/youtube/iframe_api_reference所述使用iframe

我没有完全按照Google的建议进行操作,但这是我正在使用的代码,并且工作正常

public class CWebVideoView {

    private String url;
    private Context context;
    private WebView webview;
    private static final String HTML_TEMPLATE = "webvideo.html";

    public CWebVideoView(Context context, WebView webview) {
        this.webview = webview;
        this.context = context;
        webview.setBackgroundColor(0);
        webview.getSettings().setJavaScriptEnabled(true);
    }

    public void load(String url){
        this.url = url;
        String data = readFromfile(HTML_TEMPLATE, context);
        data = data.replace("%1", url);
        webview.loadData(data, "text/html", "UTF-8");
    }

    public String readFromfile(String fileName, Context context) {
        StringBuilder returnString = new StringBuilder();
        InputStream fIn = null;
        InputStreamReader isr = null;
        BufferedReader input = null;
        try {
            fIn = context.getResources().getAssets().open(fileName, Context.MODE_WORLD_READABLE);
            isr = new InputStreamReader(fIn);
            input = new BufferedReader(isr);
            String line = "";
            while ((line = input.readLine()) != null) {
                returnString.append(line);
            }
        } catch (Exception e) {
            e.getMessage();
        } finally {
            try {
                if (isr != null)
                    isr.close();
                if (fIn != null)
                    fIn.close();
                if (input != null)
                    input.close();
            } catch (Exception e2) {
                e2.getMessage();
            }
        }
        return returnString.toString();
    }

    public void reload() {
        if (url!=null){
            load(url);
        }
    }
}

在/ assets中,我有一个名为webvideo.html的文件

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <style>
            iframe   { border: 0; position:fixed; width:100%; height:100%; bgcolor="#000000"; }
            body     { margin: 0; bgcolor="#000000"; }
        </style>        
    </head>
    <body>
        <iframe src="%1" frameborder="0" allowfullscreen></iframe>
    </body>
</html>

现在我在主布局中定义了一个webview

<WebView
    android:id="@+id/video"
    android:visibility="gone"
    android:background="#000000"
    android:layout_centerInParent="true"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

我在活动中使用CWebVideoView

videoView = (WebView) view.findViewById(R.id.video);
videoView.setVisibility(View.VISIBLE);
cWebVideoView = new CWebVideoView(context, videoView);
cWebVideoView.load(url);

感谢您的回答。您可以放置​​屏幕截图,以便我们也可以看到代码的结果吗?
Saeed Jassani '17

2

这个答案可能真的很晚,但是很有用。

您可以使用android-youtube-player在应用本身中播放youtube视频

一些代码片段:

要播放网址中包含视频ID的youtube视频,您只需调用OpenYouTubePlayerActivity意图

Intent intent = new Intent(null, Uri.parse("ytv://"+v), this, 
            OpenYouTubePlayerActivity.class);
startActivity(intent);

其中v是视频ID。

在清单文件中添加以下权限:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>

并在清单文件中声明此活动:

<activity 
        android:name="com.keyes.youtube.OpenYouTubePlayerActivity"></activity>

可以从所述第一部分来获得进一步的信息代码文件。

希望对任何人有帮助!


2

Google具有YouTube Android Player API,可让您将视频播放功能整合到Android应用程序中。该API本身非常易于使用并且运行良好。例如,以下是创建新活动以使用API​​播放视频的方法。

Intent intent = YouTubeStandalonePlayer.createVideoIntent(this, "<<YOUTUBE_API_KEY>>", "<<Youtube Video ID>>", 0, true, false);   
startActivity(intent);

请参阅了解更多详情。


1

您可以在Android应用中使用项目播放任何管视频。现在,对于其他视频或视频ID,您可以执行以下操作 https://gdata.youtube.com/feeds/api/users/eminemvevo/uploads/ 其中eminemvevo =频道

找到视频ID后,您可以将其放入 cueVideo("video_id")

src -> com -> examples -> youtubeapidemo -> PlayerViewDemoActivity

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

而专门用于读取VIDEO_ID以更好的方式打开这个,它作为一个XML [1st_file在桌面]文件后,它创建一个新的xml文件在您project或上传[1st_file在您的项目]保存的文件,并在它right_click,和使用xml_editor文件打开它,在这里您将找到特定视频的视频ID。

在此处输入图片说明


1
MediaPlayer mp=new MediaPlayer(); 
mp.setDataSource(path);
mp.setScreenOnWhilePlaying(true);
mp.setDisplay(holder);
mp.prepare();
mp.start();

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.