Streaming in VideoView abspielen, URL in RTSP konvertieren

Ich muss YouTube-Videos abspielen und Videos im selben Layout aufnehmen.

Um dies durchzuführen, suche ich nach youtube api und stelle fest, dass die Android-Version höher als 2.2 sein muss. Das ist in Ordnung, aber ich möchte VideoView verwenden.

Ich habe hier einen Beitrag zu diesem Problem gesehen und mich irgendwann dazu entschlossen, diesen Code zum Ansehen von Videos in VideoView zu verwenden.

videoView = (VideoView) findViewById(R.id.your_video_view);

Log.d(TAG,getUrlVideoRTSP(current_url) + "  id yotube1  " );


//here type the url...
videoView.setVideoURI(Uri.parse(getUrlVideoRTSP(current_url)));



videoView.setMediaController(new MediaController(this)); //sets MediaController in the video view

videoView.requestFocus();//give focus to a specific view 
videoView.start();//starts the video

Dieser Code funktioniert, aber nur mitrtsp Link wie folgt:

String exemple = "rtsp://v4.cache3.c.youtube.com/CjYLENy73wIaLQlW_ji2apr6AxMYDSANFEIJbXYtZ29vZ2xlSARSBXdhdGNoYOr_86Xm06e5UAw=/0/0/0/video.3gp";

Ich habe mehrere Links in der URL, daher brauche ich Code, um die URL in RTSP zu konvertieren. Ich kann das nicht manuell tun. Ich überprüfe einen Code und alle funktionieren nicht.

Ich versuche das: von hierWie erhalte ich eine RTSP-URL?

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

Ich benutze die obige Methode wie folgt:

getUrlVideoRTSP(current_url)

wenn currnt_url zu testen ist:

current_url = "http://m.youtube.com/#/watch?v=FlsBObg-1BQ"

Ich versuche diesen Code und es funktioniert nicht

private  class Syncyoutube extends AsyncTask <Void , Void , Void>{

@Override
    protected void onPostExecute(Void result) {
        // TODO Auto-generated method stub
        super.onPostExecute(result);
        /**
        videoView.setMediaController(new MediaController(this)); //sets MediaController in the video view
        //   MediaController containing controls for a MediaPlayer                                  
        videoView.requestFocus();//give focus to a specific view 
        videoView.start();//starts the video
        */
    }


public String getRstpLinks(String code){
    String[] urls = new String[3];
    String link = "http://gdata.youtube.com/feeds/api/videos/" + code + "?alt=json";
    String json = getJsonString(link); // here you request from the server
    try {
        JSONObject obj = new JSONObject(json);
        String entry = obj.getString("entry");
        JSONObject enObj = new JSONObject(entry);
        String group = enObj.getString("media$group");
        JSONObject grObj = new JSONObject(group);
        String content = grObj.getString("media$content");
        JSONObject cntObj = new JSONObject(group);
        JSONArray array = grObj.getJSONArray("media$content");
        for(int j=0; j<array.length(); j++){
            JSONObject thumbs = array.getJSONObject(j);
            String url = thumbs.getString("url");
            urls[j] = url;
            Log.d(TAG, url);
            //data.setThumbUrl(thumbUrl);
        }


        Log.v(TAG, content);
    } catch (Exception e) {
        Log.e(TAG, e.toString());
        urls[0] = urls[1] = urls[2] = null;
    }
    return urls[2];

}


public String getJsonString(String url){
    Log.e("Request URL", url);
    StringBuilder buffer = new StringBuilder();
    HttpClient client = new DefaultHttpClient();
    HttpGet     request = new HttpGet( url );
    HttpEntity entity = null;
    try {
        HttpResponse response = client.execute(request);

        if( response.getStatusLine().getStatusCode() == 200 ){
            entity = response.getEntity();
            InputStream is = entity.getContent();
            BufferedReader br = new BufferedReader(new InputStreamReader(is));
            String line = null;
            while( (line = br.readLine() )!= null ){
                buffer.append(line);
            }
            br.close();

        }
    } catch (ClientProtocolException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }finally{
        try {
            entity.consumeContent();
        } catch (Exception e) {
            Log.e(TAG, "Exception = " + e.toString() );
        }
    }

    return buffer.toString();
}





@Override
protected Void doInBackground(Void... params) {
    // TODO Auto-generated method stub


    code = id_current_url(current_url);
    //here type the url...
    String rstp_url = getRstpLinks(code);


    videoView.setVideoURI(Uri.parse(rstp_url));

     // the code crech in this line because null exeption
     // i chack this and discover that code variable is =tFXS9krT2VY , ok..
     // but rstp_url variable in null 

    Log.d(TAG,getRstpLinks(code) + "   idan id yotube1  " );
    return null;
}


}





public String id_current_url (String url) {

    String c_id = null ;

     c_id = url.substring((url.lastIndexOf("=")), url.length());

    return c_id ;
}   













}

Der Code stürzt in der Zeile "videoView.setVideoURI (Uri.parse (rstp_url));" ab, da ich ausnahmsweise diese chacke und feststelle, dass die Codevariable = tFXS9krT2VY ist, ok .. aber die Variable rstp_url in null

UdayKiran schrieb diese Antwort zu ähnlichem Q, könnte jemand erklären, was er meint?Ich verstehe seine Antwort nicht

seine antwort:

Element rsp = (Element)entry.getElementsByTagName("media:content").item(1);

                              String anotherurl=rsp.getAttribute("url");

Nur in gdata api erhalten wir diese Art von Links: rtsp: //v3.cache7.c.youtube.com/CiILENy73wIaGQlOCTh0GvUeYRMYDSANFEgGUgZ2aWRlb3MM/0/0/0/video.3gp

Diese werden in VideoView abgespielt.

Schließlich verwende ich diesen Code und das Video nicht zum Dämpfen

ich benutze youtube android api, es ist arbeit von android 2.2 nicht von 4.2 wie ich in meinem Q schrieb, es war mastake.

Das Ergebnis der Verwendung von RTSP ist eine schlechte Videoqualität, die mit dem Seitenverhältnis fertig werden muss.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage