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

Posted

技术标签:

【中文标题】如何在我的 Android 应用程序中播放 YouTube 视频?【英文标题】:How to play YouTube video in my Android application? 【发布时间】:2011-06-06 23:51:26 【问题描述】:

如何在我的应用程序中播放 YouTube 视频?我想通过直接从 YouTube 流式传输视频而不下载来播放视频。另外,在播放视频时,我想提供菜单选项。我不想使用默认意图播放视频。我该怎么做?

【问题讨论】:

android YouTube app Play Video Intent 的可能重复项 只需 2 分钟的工作,从开发者控制台启用 Youtube 选项,下载 youtube 播放器 jar 文件,开始使用它,简单参考这篇文章 feelzdroid.com/2017/01/… 【参考方案1】:

使用 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_
android:layout_

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

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

<Button
android:text="Button"
android:layout_
android:layout_
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";

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

【讨论】:

如果我想使用动态视频 ID,那么我会得到“YouTubeAndroidPlayerAPI:RemoteEmbeddedPlayer 不支持嵌入配置。”错误,它没有播放我的视频。你能帮我吗...提前谢谢。 youTubePlayerView.initialize 不存在,可能被移除了?【参考方案2】:
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.youtube.com/watchv=cxLG2wtE7TM"));
startActivity(intent);

【讨论】:

真的吗? “我不想使用默认意图播放视频。”,倒数第二行。 这只是this existing answer的重复。【参考方案3】:

我不想让 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_
    android:layout_
    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_
    android:layout_
    />  
</LinearLayout>     

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

【讨论】:

是的,您在没有 youtube api 的情况下使用 webview 嵌入了您的应用程序,这是在应用程序中加载视频的好方法,谢谢 JanB 非常简单的解决方案,不需要注册像 YouTube Android Player API 这样的 API 密钥。为我工作!【参考方案4】:

您可以按照https://developers.google.com/youtube/iframe_api_reference 中的说明使用 iframe

我没有完全按照谷歌的建议,但这是我正在使用的代码,它工作正常

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_
    android:layout_ />

我在我的活动中使用 CWebVideoView

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

【讨论】:

感谢您的回答。能否放个截图让我们也能看到代码的结果?【参考方案5】:

Google 有一个YouTube Android Player API,可让您将视频播放功能整合到您的 Android 应用程序中。 API 本身非常易于使用并且运行良好。例如,这里是如何创建一个新的活动来使用 API 播放视频。

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

更多详情请见this。

【讨论】:

【参考方案6】:

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

您可以使用 android-youtube-player 在应用程序中播放 youtube 视频。

部分代码sn-ps:

要播放 url 中包含视频 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>

更多信息可以从this代码文件的第一部分获得。

希望对任何人都有帮助!

【讨论】:

【参考方案7】:
MediaPlayer mp=new MediaPlayer(); 
mp.setDataSource(path);
mp.setScreenOnWhilePlaying(true);
mp.setDisplay(holder);
mp.prepare();
mp.start();

【讨论】:

【参考方案8】:

您可以使用this 项目在您的 Android 应用程序中播放任何您的电子管视频。 现在对于其他视频或视频 ID ...您可以这样做 https://gdata.youtube.com/feeds/api/users/eminemvevo/uploads/ eminemvevo = 频道 .

找到视频id后,可以把那个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 open this ,并在您的@987654328 中创建一个新的 Xml 文件 后,将其作为桌面中的 xml[1st_file] 文件@或者上传那个[1st_file]保存的文件到你的项目中,然后右键点击,用xml_editor文件打开,在这里你会找到特定视频的视频ID。

【讨论】:

【参考方案9】:

这是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 的页面中打开,您可以在其中显示您的视频

【讨论】:

这取决于 YouTube aap,否则它会在新的 webView 中打开视频,我想在 VideoView 中播放视频而不是在 webview 中播放视频..而不是建议某种方式。 VideoView 需要视频的绝对 URL,在 YouTube 的情况下可能不可用。 对于任何复制和粘贴,如果您对为什么这可能不起作用感到困惑,newIntent 中应该有一个空格。新意图 问题是这样的“我不想使用默认意图播放视频。”【参考方案10】:

步骤

    为您的播放器(全屏)屏幕创建一个新的 Activity,并带有菜单选项。 在不同的线程中运行媒体播放器和 UI。

    用于播放媒体 - 通常播放音频/视频在 android 中有 mediaplayer api。 FILE_PATH 是文件的路径 - 可能是 url(youtube) 流或本地文件路径

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

同时检查:Android YouTube app Play Video Intent 已经详细讨论过了。

【讨论】:

FILE_PATH 如何指向 youtube 视频? youtube 链接播放视频的网页,而不是文件本身的链接。 Youtube 没有任何绝对网址。这是 OP 最初关心的问题。 @MartyMiller 从 youtube 获取流 URL 是不同的问题。它与 youtube api 相关。

以上是关于如何在我的 Android 应用程序中播放 YouTube 视频?的主要内容,如果未能解决你的问题,请参考以下文章

android - 如何在我的音乐播放器中从文件管理器播放 mp3 文件?

Android - 如何在应用程序内保持音乐播放?

在我的 android 程序中播放 swf 文件(flash)的最佳方式是啥?

如何在android webview中播放视频URL

如何将消息发送到 Android 中的其他应用程序?

为啥我只能在我的 android 通知中按一次播放/暂停按钮?