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

如何在我的Android应用程序中播放YouTube视频?,android,video,youtube,playback,Android,Video,Youtube,Playback,如何在我的应用程序中播放YouTube视频?我想通过直接从YouTube流式播放视频,而不需要下载。此外,在播放视频时,我希望提供菜单选项。我不想使用默认意图播放视频。我如何才能做到这一点?这是btn点击事件 btnvideo.setOnClickListener(new OnClickListener() { public void onClick(View v) { startActivity(new Intent(Intent.ACTION_VIEW,Uri.parse("ht

如何在我的应用程序中播放
YouTube
视频?我想通过直接从YouTube流式播放视频,而不需要下载。此外,在播放视频时,我希望提供菜单选项。我不想使用默认意图播放视频。我如何才能做到这一点?

这是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的另一个页面上打开,在那里你可以显示你的视频步骤

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

  • 对于播放媒体-一般来说,android中有mediaplayer api来播放音频/视频。 文件路径是文件的路径-可以是url(youtube)流或本地文件路径

  • 同时检查: 您已经详细讨论过了。

    您可以使用project在android应用程序中播放任何YouTube视频。
    MediaPlayer mp=new MediaPlayer(); 
    mp.setDataSource(path);
    mp.setScreenOnWhilePlaying(true);
    mp.setDisplay(holder);
    mp.prepare();
    mp.start();
    
    现在查看其他视频或视频id。。。你可以这样做 其中Eminemvo=频道

    找到视频id后,您可以将该id放入
    cueVideo(“视频id”)

    专门用于以更好的方式读取该视频id,并在您的
    项目中创建一个新的xml文件后将其作为xml[
    1st\u文件
    ]文件保存在您的桌面上,或者将该[
    1st\u文件
    ]上传到您的项目中,然后右键单击它,并使用xml\u编辑器文件打开它,在这里,您可以找到特定视频的视频id


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

    您可以使用在应用程序中播放youtube视频

    一些代码片段:

    要播放url中有视频id的youtube视频,只需调用
    openyoutubeplayepractivity
    intent

    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>
    
    
    
    并在清单文件中声明此活动:

    <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>
    
    代码文件

    希望这对任何人都有帮助

    谷歌有一个支持将视频播放功能整合到Android应用程序中的应用程序。API本身非常易于使用,并且运行良好。例如,下面是如何创建一个新的活动来使用API播放视频

    Intent intent = YouTubeStandalonePlayer.createVideoIntent(this, "<<YOUTUBE_API_KEY>>", "<<Youtube Video ID>>", 0, true, false);   
    startActivity(intent);
    
    Intent-Intent=YouTubeStandalonePlayer.createVideoIntent(这个,“,”,0,true,false);   
    星触觉(意向);
    

    有关更多详细信息,请参阅。

    您可以按照中的说明使用iframe

    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.youtube.com/watchv=cxLG2wtE7TM"));
    startActivity(intent);
    
    我并没有完全按照谷歌的建议去做,但这就是我正在使用的代码,它工作得很好

    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>
    

    我不想让YouTube应用程序出现在设备上,所以我使用了本教程:

    …要在我的应用程序中生成此代码:

    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>     
    
    WebView-mWebView;
    @凌驾
    创建时的公共void(Bundle savedInstanceState){
    setContentView(R.layout.video_webview);
    mWebView=(WebView)findViewById(R.id.videoview);
    //用你的视频ID建立你自己的src链接
    String videoStr=“促销视频
    ”; setWebViewClient(新的WebViewClient()){ @凌驾 公共布尔值shouldOverrideUrlLoading(WebView视图,字符串url){ 返回false; } }); WebSettings ws=mWebView.getSettings(); ws.setJavaScriptEnabled(true); loadData(videoStr,“text/html”,“utf-8”); } //视频网络视图

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

    使用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>
    
    和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";
    }
    
    将“HCE74CEAAE”替换为来自的视频ID。 从Console.developers.google.com获取API_密钥,并将其替换到PlayerConfig.API_密钥上。 有关更多信息,请按照以下教程逐步进行操作:

    文件路径如何指向youtube视频?youtube链接播放视频的网页,而不是文件本身的链接。youtube没有任何绝对url。这是OP@MartyMiller最初关注的问题。从youtube获取流Url是另一个问题。它与youtube api有关。这取决于youtube aap,否则它会在新的webView中打开视频,我想在VideoView中播放视频,而不是在webView中。。而不是建议一些方法。plz。
    VideoView
    需要视频的绝对URL,在YouTube的情况下,这可能是不可用的。对于任何复制和粘贴者,如果你不明白为什么这可能不起作用,newIntent中应该有一个空格。新的意图问题是这样的:“我不想用默认意图播放视频。”可能重复它2分钟的工作,从开发者控制台启用Youtube选项,下载Youtube播放器jar文件,开始使用它,它很简单。真的吗?“我不想使用默认意图播放视频。”,第二行,倒数第二行。这只是重复。是的,你正确嵌入了你的应用程序,带有webview,没有youtube api。在应用程序中加载视频的好方法感谢你JanBGreat easy solution,它不需要注册api密钥,如。为我工作!谢谢你的回答。你能放一个屏幕截图让我们也能看到代码的结果吗?如果我想使用动态视频id,那么我会得到“YouTubeAndroidPlayerAPI:Embed config在RemoteEmbeddedPlayer中不受支持。”错误,并且它不会播放我的视频。你能帮我吗。。。提前感谢。youTubePlayerView.initialize不存在,可能已删除?
     <?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>
    
    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);
            }
        });
    }
    }
    
        package com.example.andreaskonstantakos.vfy;
    
    /**
     * Created by Andreas Konstantakos on 13/4/2017.
     */
    
    public class PlayerConfig {
    
    PlayerConfig(){}
    
    public static final String API_KEY = 
    "xxxxx";
    }