2013-07-16 2 views
1

Я хочу воспроизвести видеоролики с каналами частного канала в моем приложении. Я могу получить видео с канала в приложении, но я хочу, чтобы видео воспроизводилось в моем приложении. Есть ли какой-либо способ воспроизведения видеороликов YouTube в моем приложении. Пожалуйста, помогите мне в этом.как играть в видео YouTube с канала в моем приложении

Главная Activity.java

package com.blundell.tut.ui.phone; 

import java.net.MalformedURLException; 
import java.net.URL; 
import android.app.Activity; 
import android.app.ProgressDialog; 
import android.content.ActivityNotFoundException; 
import android.content.Intent; 
import android.net.Uri; 
import android.os.Bundle; 
import android.os.Handler; 
import android.os.Message; 
import android.view.View; 
import android.widget.VideoView; 
import com.blundell.tut.R; 
import com.blundell.tut.domain.Library; 
import com.blundell.tut.domain.Video; 
import com.blundell.tut.service.task.GetYouTubeUserVideosTask; 
import com.blundell.tut.ui.VideoClickListener; 
import com.blundell.tut.ui.widget.VideoGridView; 

/** 
* The Activity can retrieve Videos for a specific username from YouTube</br> 
* It then displays them into a list including the Thumbnail preview and the title</br> 
* There is a reference to each video on YouTube as well but this isn't used in this tutorial</br> 
* </br> 
* <b>Note<b/> orientation change isn't covered in this tutorial, you will want to override 
* onSaveInstanceState() and onRestoreInstanceState() when you come to this 
* </br> 
* @author paul.blundell 
*/ 

    public class MainActivity extends Activity implements VideoClickListener 
    { 
     // A reference to our list that will hold the video details 
     private VideoGridView listView; 
     VideoView videoView; 
     private static ProgressDialog progressDialog; 
     @Override 
     public void onCreate(Bundle savedInstanceState) 
     { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 

      listView = (VideoGridView) findViewById(R.id.videosListView); 
      videoView = (VideoView) findViewById(R.id.video_View); 
      // Here we are adding this activity as a listener for when any row in the List is 'clicked' 
      // The activity will be sent back the video that has been pressed to do whatever it wants with 
      // in this case we will retrieve the URL of the video and fire off an intent to view it 
      listView.setOnVideoClickListener(this); 
     } 

     public void getUserYouTubeFeed(View v) 
     { 
      new Thread(new GetYouTubeUserVideosTask(responseHandler, "erosentertainment")).start(); 
     } 

     Handler responseHandler = new Handler() 
     { 
      public void handleMessage(Message msg) 
      { 
       populateListWithVideos(msg); 
      }; 
     }; 

     private void populateListWithVideos(Message msg) 
     { 
      Library lib = (Library) msg.getData().get(GetYouTubeUserVideosTask.LIBRARY); 
      listView.setVideos(lib.getVideos()); 
     } 

     @Override 
     protected void onStop() 
     { 
      responseHandler = null; 
      super.onStop(); 
     } 

     protected static String extractYoutubeId(String url) throws MalformedURLException 
     { 
      String id = null; 
      try 
      { 
       String query = new URL(url).getQuery(); 
       if (query != null) 
       { 
        String[] param = query.split("&"); 
        for (String row : param) 
        { 
         String[] param1 = row.split("="); 
         if (param1[0].equals("v")) 
         { 
          id = param1[1]; 
         } 
        } 
       } 
       else 
       { 
        if (url.contains("embed")) 
        { 
         id = url.substring(url.lastIndexOf("/") + 1); 
        } 
       } 

       System.out.println("..................videoid......."+id); 
      } 
      catch (Exception ex) 
      { 
       System.out.println("Exception"+ex); 
      } 
      return id; 
     } 

     // This is the interface method that is called when a video in the listview is clicked! 
     // The interface is a contract between this activity and the listview 
     String Videoid; 
     @Override 
     public void onVideoClicked(Video video) 
     { 
      String url=video.getUrl(); 
      System.out.println(".....video url........."+url); 

      try 
      { 
       Videoid = extractYoutubeId(url); 
      } 
      catch (MalformedURLException e1) 
      { 
       // TODO Auto-generated catch block 
       e1.printStackTrace(); 
      } 

      try 
      { 
       Intent intent = new Intent(null, Uri.parse("ytv://"+Videoid), 
          MainActivity.this, OpenYouTubePlayerActivity.class); 

       startActivity(intent); 
      } 
      catch(ActivityNotFoundException e) 
      { 
       e.printStackTrace(); 
       System.out.println("kailash.........."+e); 
      } 
     } 
    } 


---------- 
**GetYouTubeUserVideosTask.java** 

package com.example.youtube; 

import java.io.IOException; 
import java.util.ArrayList; 
import java.util.List; 

import org.apache.http.HttpResponse; 
import org.apache.http.client.ClientProtocolException; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpGet; 
import org.apache.http.client.methods.HttpUriRequest; 
import org.apache.http.impl.client.DefaultHttpClient; 
import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import android.os.Bundle; 
import android.os.Handler; 
import android.os.Message; 

/** 
* This is the task that will ask YouTube for a list of videos for a specified user</br> 
* This class implements Runnable meaning it will be ran on its own Thread</br> 
* Because it runs on it's own thread we need to pass in an object that is notified when it has finished 
* 
* @author paul.blundell 
*/ 
public class GetYouTubeUserVideosTask implements Runnable 
{ 
    // A reference to retrieve the data when this task finishes 
    public static final String LIBRARY = "Library"; 
    // A handler that will be notified when the task is finished 
    private final Handler replyTo; 
    // The user we are querying on YouTube for videos 
    private final String username; 

    /** 
    * Don't forget to call run(); to start this task 
    * @param replyTo - the handler you want to receive the response when this task has finished 
    * @param username - the username of who on YouTube you are browsing 
    */ 
    public GetYouTubeUserVideosTask(Handler replyTo, String username) 
    { 
     this.replyTo = replyTo; 
     this.username = username; 
    } 

    @Override 
    public void run() 
    { 
     try 
     { 
      // Get a httpclient to talk to the internet 
      HttpClient client = new DefaultHttpClient(); 
      // Perform a GET request to YouTube for a JSON list of all the videos by a specific user 
      HttpUriRequest request = new HttpGet("https://gdata.youtube.com/feeds/api/videos?author="+username+"&v=2&alt=jsonc"); 
      // Get the response that YouTube sends back 
      HttpResponse response = client.execute(request); 
      // Convert this response into a readable string 
      String jsonString = StreamUtils.convertToString(response.getEntity().getContent()); 
      // Create a JSON object that we can use from the String 
      JSONObject json = new JSONObject(jsonString); 

      // For further information about the syntax of this request and JSON-C 
      // see the documentation on YouTube http://code.google.com/apis/youtube/2.0/developers_guide_jsonc.html 

      // Get are search result items 
      JSONArray jsonArray = json.getJSONObject("data").getJSONArray("items"); 

      // Create a list to store are videos in 
      List<Video> videos = new ArrayList<Video>(); 
      // Loop round our JSON list of videos creating Video objects to use within our app 
      for (int i = 0; i < jsonArray.length(); i++) 
      { 
       JSONObject jsonObject = jsonArray.getJSONObject(i); 
       // The title of the video 
       String title = jsonObject.getString("title"); 
       // The url link back to YouTube, this checks if it has a mobile url 
       // if it doesnt it gets the standard url 
       String url; 
       try 
       { 
        url = jsonObject.getJSONObject("player").getString("mobile"); 
       } 
       catch (JSONException ignore) 
       { 
        url = jsonObject.getJSONObject("player").getString("default"); 
       } 
       // A url to the thumbnail image of the video 
       // We will use this later to get an image using a Custom ImageView 
       // Found here http://blog.blundell-apps.com/imageview-with-loading-spinner/ 
       String thumbUrl = jsonObject.getJSONObject("thumbnail").getString("sqDefault"); 

       // Create the video object and add it to our list 
       videos.add(new Video(title, url, thumbUrl)); 
      } 
      // Create a library to hold our videos 
      Library lib = new Library(username, videos); 
      // Pack the Library into the bundle to send back to the Activity 
      Bundle data = new Bundle(); 
      data.putSerializable(LIBRARY, lib); 

      // Send the Bundle of data (our Library) back to the handler (our Activity) 
      Message msg = Message.obtain(); 
      msg.setData(data); 
      replyTo.sendMessage(msg); 

     // We don't do any error catching, just nothing will happen if this task falls over 
     // an idea would be to reply to the handler with a different message so your Activity can act accordingly 
     } 
     catch (ClientProtocolException e) 
     { 
      Log.e("Feck", e); 
     } 
     catch (IOException e) 
     { 
      Log.e("Feck", e); 
     } 
     catch (JSONException e) 
     { 
      Log.e("Feck", e); 
     } 
    } 
} 
+0

Попробуйте использовать что-то вроде WebView для загрузки видео с помощью https://developers.google.com/youtube/iframe_api_reference – dead

+0

Вы должны сообщить нам о том, что вы пробовали. См. Http://stackoverflow.com/help/how-to-ask для руководства. –

+0

Я получу список видеороликов из списка, но когда я нажму на любое видео, чем видео не будет играть. Plzzzz help me –

ответ

0

Чтобы играть в YouTube видео в свой Android App следующие инструкции: https://developers.google.com/youtube/android/player/sample-applications

Вы скачиваете API Google YouTube: https://developers.google.com/youtube/android/player/downloads/

Внутри этого В Api есть много примеров о том, как играть на YouTube видео в приложении. Вы можете воспроизводить видео из Activity, Fragment и т. Д.

+0

Я получу список видео из списка, но когда я нажму на любое видео, видео не играет plzzzz help me –

+0

Вы должны быть более конкретным, если хотите получить ответ. Файл журнала сообщений, сбои отчетов, описание поведения. Вы не можете просто написать, что видео не воспроизводится. –

Смежные вопросы