วิธีเล่นวิดีโอ YouTube ในแอปพลิเคชัน Android ของฉัน


84

ฉันจะเล่นYouTubeวิดีโอในแอปพลิเคชันของฉันได้อย่างไร? ฉันต้องการplay videoโดยการสตรีมโดยตรงจาก YouTube โดยไม่ต้องดาวน์โหลด นอกจากนี้ในขณะที่เล่นวิดีโอฉันต้องการให้มีตัวเลือกเมนู ฉันไม่ต้องการเล่นวิดีโอโดยใช้ความตั้งใจเริ่มต้น ฉันจะทำเช่นนี้ได้อย่างไร?


อาจซ้ำกันของแอป Android YouTube Play Video Intent
DroidDev

1
ใช้งานได้เพียง 2 นาทีเปิดใช้งานตัวเลือก Youtube จากคอนโซลนักพัฒนาดาวน์โหลดไฟล์ jar ของเครื่องเล่น youtube เริ่มใช้งานได้ง่ายๆอ้างอิงโพสต์นี้feelzdroid.com/2017/01/…
Naruto

คำตอบ:


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
อันนี้ขึ้นอยู่กับ aap ของ YouTube มิฉะนั้นจะเปิดวิดีโอใน webView ใหม่ฉันต้องการเล่นวิดีโอใน VideoView ไม่ใช่ใน webview .. แนะนำวิธีการบางอย่างกรุณา
Abid A. Chaudhary

3
VideoViewต้องใช้ URL ที่สมบูรณ์ของวิดีโอซึ่งในกรณีของ YouTube อาจไม่สามารถใช้ได้
Aman Alam

3
สำหรับ copy & pasters ใด ๆ หากคุณสับสนว่าเหตุใดจึงใช้ไม่ได้ผลควรมีช่องว่างใน newIntent New Intent
OrhanC1

10
คำถามมีลักษณะเช่นนี้ "ฉันไม่ต้องการเล่นวิดีโอโดยใช้ความตั้งใจเริ่มต้น"
Naresh

18

ขั้นตอน

  1. สร้างกิจกรรมใหม่สำหรับหน้าจอเครื่องเล่นของคุณ (เต็มหน้าจอ) พร้อมตัวเลือกเมนู เรียกใช้ mediaplayer และ UI ในเธรดที่แตกต่างกัน

  2. สำหรับการเล่นสื่อ - โดยทั่วไปในการเล่นเสียง / วิดีโอจะมี api mediaplayer ใน Android FILE_PATH เป็นเส้นทางของไฟล์ - อาจเป็นสตรีม url (youtube) หรือเส้นทางของไฟล์ในเครื่อง

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

ตรวจสอบด้วย: เจตนาเล่นวิดีโอของแอป Android YouTube ได้กล่าวถึงรายละเอียดแล้ว


8
FILE_PATH ชี้ไปที่วิดีโอ youtube ได้อย่างไร ลิงก์ youtube หน้าเว็บที่เล่นวิดีโอไม่ใช่ลิงก์ไปยังไฟล์
Marty Miller

3
Youtube ไม่มี url ที่แน่นอน นั่นคือความกังวลเดิมของ OP
noob

1
@MartyMiller การรับ URL สตรีมจาก youtube เป็นคำถามที่แตกต่างกัน มันเกี่ยวข้องกับ api ของ youtube
Naresh

12

ใช้ 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";
}

แทนที่ "Hce74cEAAaE" กับรหัสวิดีโอของคุณจากhttps://www.youtube.com/watch?v=Hce74cEAAaE รับ API_KEY ของคุณจาก Console.developers.google.com และแทนที่บน PlayerConfig.API_KEY สำหรับข้อมูลเพิ่มเติมคุณสามารถทำตามขั้นตอนการสอนต่อไปนี้: https://www.youtube.com/watch?v=3LiubyYpEUk


หากฉันต้องการใช้รหัสวิดีโอแบบไดนามิกฉันจะได้รับ "YouTubeAndroidPlayerAPI: Embed config ไม่รองรับใน RemoteEmbeddedPlayer" เกิดข้อผิดพลาดและไม่เล่นวิดีโอของฉัน คุณช่วยฉันได้ไหม ... ขอบคุณล่วงหน้า
amit pandya

youTubePlayerView.initialize ไม่มีอยู่อาจถูกลบออก?
Alberto M

6

ฉันไม่ต้องการให้มีแอป 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
ใช่คุณฝังตัวกับแอปของคุณด้วย webview โดยไม่ต้องใช้ youtube api วิธีที่ดีในการโหลดวิดีโอภายในแอปขอบคุณ JanB
Ajay Pandya

วิธีที่ง่ายที่ดีที่ไม่จำเป็นต้องมีการลงทะเบียนสำหรับคีย์ API เช่นYouTube บน Android API ทำงานให้ฉัน!
Michael Osofsky

3

คุณสามารถใช้ iframe ตามที่อธิบายไว้ในhttps://developers.google.com/youtube/iframe_api_reference

ฉันไม่ได้ทำตามคำแนะนำของ 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
    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

2

คำตอบนี้อาจจะสายไปบ้าง แต่ก็มีประโยชน์

คุณสามารถเล่นวิดีโอ youtube ในแอปได้โดยใช้android-youtube-playerหุ่นยนต์

ข้อมูลโค้ดบางส่วน:

หากต้องการเล่นวิดีโอ youtube ที่มีรหัสวิดีโอใน URL คุณเพียงแค่เรียกOpenYouTubePlayerActivityเจตนา

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

โดยที่ v คือรหัสวิดีโอ

เพิ่มสิทธิ์ต่อไปนี้ในไฟล์รายการ:

<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 ของคุณ ตอนนี้สำหรับวิดีโออื่น ๆ หรือรหัสวิดีโอ ... คุณสามารถทำได้ https://gdata.youtube.com/feeds/api/users/eminemvevo/uploads/ โดยที่eminemvevo = channelช่อง

หลังจากค้นหารหัสวิดีโอคุณสามารถใส่รหัสนั้นได้ 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 นั้นในวิธีที่ดีกว่าให้เปิดสิ่งนี้และเป็น1st_fileไฟล์xml [ ] ในเดสก์ท็อปของคุณหลังจากที่สร้างไฟล์ Xmlใหม่ในprojectหรืออัปโหลดไฟล์ที่1st_fileบันทึก[ ] ในโปรเจ็กต์ของคุณและคลิกขวาในไฟล์และ เปิดด้วยไฟล์ xml_editor ที่นี่คุณจะพบรหัสวิดีโอของวิดีโอนั้น ๆ

ใส่คำอธิบายภาพที่นี่



-6
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.youtube.com/watchv=cxLG2wtE7TM"));
startActivity(intent);

จริงๆ? "ฉันไม่ต้องการเล่นวิดีโอโดยใช้ความตั้งใจเริ่มต้น" อันดับสองถึงบรรทัดสุดท้าย
Squirrelkiller

นี่เป็นเพียงคำตอบซ้ำ ๆที่มีอยู่นี้
ปาง
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.