3 votes

Streaming de vidéos youtube sans l'application Youtube

Il y a beaucoup de questions comme celle-ci, je les ai toutes regardées mais aucune n'avait la bonne réponse, ou alors la bonne réponse est dépassée à cause des changements de l'api de youtube. Avant de se lancer dans le domaine de la documentation pour trouver la meilleure réponse, j'aimerais vous demander quelle est votre méthode pour diffuser des vidéos YouTube ? Je pense qu'utiliser l'api du lecteur youtube et contraindre l'utilisateur à avoir installé l'application Youtube est une approche assez horrible.

En utilisant la méthode suggérée ci-dessous, j'obtiens le message "Sorry this video cannot be played", même si je peux la lire en utilisant l'Api Youtube Player.

07-03 16:58:47.139: D/MediaPlayer(20518): getMetadata
07-03 16:58:47.139: E/MediaPlayerService(82): getMetadata failed -38
07-03 16:58:47.680: E/ARTSPConnection(82): err = 111 (Connection refused)
07-03 16:58:47.680: I/MyHandler(82): connection request completed with result -111 (Connection refused)
07-03 16:58:47.740: E/MediaPlayer(20518): error (1, -2147483648)
07-03 16:58:47.740: E/MediaPlayer(20518): Error (1,-2147483648)
07-03 16:58:47.740: D/VideoView(20518): Error: 1,-2147483648

3voto

Zulfiqar Chandio Points 326

New VideoAsyncTask().execute() ; //appel à la lecture de la vidéo dans la vue vidéo

private class VideoAsyncTask extends AsyncTask<Void, Void, Void> {
    ProgressDialog progressDialog;
    String videoUrl;

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        progressDialog = ProgressDialog.show(GallaryActivity.this, "",
                "Loading Video wait...", true);
    }

    @Override
    protected Void doInBackground(Void... params) {
        try {
            //

            String id = videosBean.getV_youtubelink(); //id of video

            String url = "http://www.youtube.com/watch?v=" + id;
            videoUrl = getUrlVideoRTSP(url);
            Log.e("Video url for playing=========>>>>>", videoUrl);
        } catch (Exception e) {
            Log.e("Login Soap Calling in Exception", e.toString());
        }
        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        super.onPostExecute(result);
        progressDialog.dismiss();
        /*
         * videoView.setVideoURI(Uri.parse(
         * "rtsp://v4.cache1.c.youtube.com/CiILENy73wIaGQk4RDShYkdS1BMYDSANFEgGUgZ2aWRlb3MM/0/0/0/video.3gp"
         * )); videoView.setMediaController(new
         * MediaController(AlertDetail.this)); videoView.requestFocus();
         * videoView.start();
         */

        if (myvideoview.isPlaying())
            myvideoview.stopPlayback();
        myvideoview.setVideoURI(Uri.parse(videoUrl));
        MediaController mc = new MediaController(GallaryActivity.this);
        myvideoview.setMediaController(mc);
        myvideoview.requestFocus();

        myvideoview.start();
        mc.show();
    }

}

public static String getUrlVideoRTSP(String urlYoutube) {
    try {
        String gdy = "http://gdata.youtube.com/feeds/api/videos/";
        DocumentBuilder documentBuilder = DocumentBuilderFactory
                .newInstance().newDocumentBuilder();
        String id = extractYoutubeId(urlYoutube);
        URL url = new URL(gdy + id);
        HttpURLConnection connection = (HttpURLConnection) url
                .openConnection();
        Document doc = documentBuilder.parse(connection.getInputStream());
        Element el = doc.getDocumentElement();
        NodeList list = el.getElementsByTagName("media:content");// /media:content
        String cursor = urlYoutube;
        for (int i = 0; i < list.getLength(); i++) {
            Node node = list.item(i);
            if (node != null) {
                NamedNodeMap nodeMap = node.getAttributes();
                HashMap<String, String> maps = new HashMap<String, String>();
                for (int j = 0; j < nodeMap.getLength(); j++) {
                    Attr att = (Attr) nodeMap.item(j);
                    maps.put(att.getName(), att.getValue());
                }
                if (maps.containsKey("yt:format")) {
                    String f = maps.get("yt:format");
                    if (maps.containsKey("url")) {
                        cursor = maps.get("url");
                    }
                    if (f.equals("1"))
                        return cursor;
                }
            }
        }
        return cursor;
    } catch (Exception ex) {
        Log.e("Get Url Video RTSP Exception======>>", ex.toString());
    }
    return urlYoutube;

}

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);
            }
        }
    } catch (Exception ex) {
        Log.e("Exception", ex.toString());
    }
    return id;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X