Làm cách nào để phát video YouTube trong ứng dụng Android của tôi?


84

Làm cách nào để phát YouTubevideo trong ứng dụng của tôi? Tôi muốn play videophát trực tiếp nó từ YouTube mà không cần tải xuống. Ngoài ra, trong khi phát video, tôi muốn cung cấp các tùy chọn menu. Tôi không muốn phát video bằng mục đích mặc định. Tôi có thể làm cái này như thế nào?



1
Chỉ cần 2 công việc tối thiểu của nó, kích hoạt tùy chọn Youtube từ nhà phát triển giao diện điều khiển, tải về youtube chơi file jar, bắt đầu sử dụng nó, nó đơn giản tham khảo bài này feelzdroid.com/2017/01/...
Naruto

Câu trả lời:


59

Đây là sự kiện nhấp chuột 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....");

    }
}); 

loại này, nó được mở trong một trang khác với youtube nơi bạn có thể hiển thị video của mình


1
cái này phụ thuộc vào aap YouTube, nếu không nó sẽ mở video trong webView mới, tôi muốn phát video trong VideoView không phải trong webview .. hơn là đề xuất một số cách.
Abid A. Chaudhary

3
VideoViewyêu cầu URL tuyệt đối của video, trong trường hợp của YouTube có lẽ không có.
Aman Alam

3
Đối với bất kỳ bản sao & trình dán nào, nếu bạn bối rối tại sao điều này có thể không hoạt động, nên có một khoảng trống trong newIntent. Intent mới
OrhanC1

10
Câu hỏi giống như thế này "Tôi không muốn phát video bằng cách sử dụng ý định mặc định."
Naresh

18

Các bước

  1. Tạo Hoạt động mới cho màn hình trình phát (toàn màn hình) của bạn với các tùy chọn menu. Chạy trình trung gian và giao diện người dùng trong các chuỗi khác nhau.

  2. Để phát phương tiện - Nói chung để phát âm thanh / video có api trung gian trong Android. FILE_PATH là đường dẫn của tệp - có thể là luồng url (youtube) hoặc đường dẫn tệp cục bộ

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

Cũng kiểm tra: Ứng dụng YouTube trên Android Play Video Intent đã thảo luận chi tiết về vấn đề này.


8
làm cách nào để FILE_PATH trỏ đến video trên youtube? Liên kết youtube đến trang web phát video, không phải liên kết đến chính tệp.
Marty Miller

3
Youtube không có bất kỳ url tuyệt đối nào. Đó là mối quan tâm ban đầu của OP.
noob

1
@MartyMiller Lấy Url luồng từ youtube là một câu hỏi khác. Nó liên quan đến api của youtube.
Naresh

11

Sử dụng API trình phát Android của YouTube.

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);
        }
    });
}
}

và lớp 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";
}

Thay thế "Hce74cEAAaE" bằng ID video của bạn từ https://www.youtube.com/watch?v=Hce74cEAAaE . Lấy API_KEY của bạn từ Console.developers.google.com và cũng có thể thay thế nó trên PlayerConfig.API_KEY. Để biết thêm thông tin, bạn có thể làm theo từng bước hướng dẫn sau: https://www.youtube.com/watch?v=3LiubyYpEUk


Nếu tôi muốn sử dụng id video động thì tôi nhận được "YouTubeAndroidPlayerAPI: Embed config không được hỗ trợ trong RemoteEmbeddedPlayer." lỗi và nó không phát video của tôi. Bạn có thể giúp tôi ... Cảm ơn trước.
amit pandya

youTubePlayerView.initialize không tồn tại, có thể bị xóa?
Alberto M

5

Tôi không muốn phải có ứng dụng YouTube trên thiết bị nên tôi đã sử dụng hướng dẫn này:

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

... để tạo mã này trong ứng dụng của tôi:

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>     

Điều này đã hoạt động theo cách tôi muốn. Nó không tự động phát nhưng video phát trực tuyến trong ứng dụng của tôi. Cần lưu ý rằng một số video bị hạn chế sẽ không phát khi được nhúng.


1
Có bạn ngay nhúng với ứng dụng của bạn với webview mà không youtube cách api đẹp đến video tải trong ứng dụng nhờ bạn JanB
Ajay Pandya

Giải pháp dễ dàng tuyệt vời không yêu cầu đăng ký khóa API như API Trình phát Android của YouTube . Đã làm cho tôi!
Michael Osofsky

3

Bạn có thể sử dụng iframe như được mô tả trong https://developers.google.com/youtube/iframe_api_reference

Tôi không làm theo lời khuyên của google chính xác nhưng đây là mã tôi đang sử dụng và nó đang hoạt động tốt

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);
        }
    }
}

trong / tài sản Tôi có một tệp tên là 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>

và bây giờ tôi xác định chế độ xem web bên trong bố cục chính của mình

<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" />

và tôi sử dụng CWebVideoView trong hoạt động của mình

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

Cảm ơn câu trả lời của bạn. Bạn có thể chụp ảnh màn hình để chúng tôi có thể xem kết quả của mã không?
Saeed Jassani

2

Câu trả lời này có thể thực sự muộn, nhưng nó hữu ích.

Bạn có thể phát video youtube trong chính ứng dụng bằng cách sử dụng android-youtube-player .

Một số đoạn mã:

Để phát video trên youtube có id video trong url, bạn chỉ cần gọi OpenYouTubePlayerActivityý định

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

trong đó v là id video.

Thêm các quyền sau vào tệp kê khai:

<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"/>

và cũng khai báo hoạt động này trong tệp kê khai:

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

Thông tin khác có thể được lấy từ các phần đầu tiên của tệp mã này .

Hy vọng rằng sẽ giúp bất cứ ai!


2

Google có API Trình phát Android của YouTube cho phép bạn kết hợp chức năng phát lại video vào các ứng dụng Android của mình. Bản thân API rất dễ sử dụng và hoạt động tốt. Ví dụ: đây là cách tạo hoạt động mới để phát video bằng API.

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

Xem điều này để biết thêm chi tiết.


1

bạn có thể sử dụng dự án này để phát bất kỳ video nào của bạn, trong ứng dụng Android của bạn. Bây giờ đối với video khác hoặc id Video ... bạn có thể thực hiện việc này https://gdata.youtube.com/feeds/api/users/eminemvevo/uploads/ where eminemvevo = channel .

sau khi tìm thấy id video, bạn có thể đặt id đó vào cueVideo("video_id")

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

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

Và đặc biệt để đọc video_id đó theo cách tốt hơn, hãy mở tệp này và nó dưới dạng 1st_filetệp xml [ ] trong màn hình của bạn sau khi tạo tệp Xml mới trong tệp của bạn projecthoặc tải lên tệp 1st_fileđã lưu [ ] đó trong dự án của bạn và nhấp chuột phải vào đó, và mở nó bằng tệp xml_editor, tại đây bạn sẽ tìm thấy id video của video cụ thể.

nhập mô tả hình ảnh ở đây


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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.