【问题标题】:streaming video in android video view在 android 视频视图中流式传输视频
【发布时间】:2013-04-16 08:13:09
【问题描述】:

我想在视频视图中播放视频,我问如何将 url 转换为 rstp 我收到了将 url 转换为 rstp 的好人代码。 实施此代码时,我收到质量差的视频。

当我搜索如何修复质量时,我喜欢这个链接 Get the download URL for YouTube video (Android/Java)

我的问题是如何让这段代码工作...... 我将此代码复制到我的 Eclipse 并在这些行中收到错误编译器:

ArrayList 视频 = 新的 ArrayList();

progressDialog = ProgressDialog.show(ARViewer.this, "", "正在连接到 YouTube...", true);

任何建议如何解决此错误???? 这对我很有帮助……

谢谢...

【问题讨论】:

  • 请具体说明您遇到的编译器错误?您也可以尝试清理并构建项目。
  • 这是一个编译器错误,我无法运行此代码,在这一行: ArrayList
  • 我有同样的问题,如果有人找到答案,请分享。这个问题应该怎么解决!?

标签: android youtube streaming android-videoview


【解决方案1】:

将 ARViewer.this 替换为 YourActivityName.this,因为 ARViewer 只是代码所在的类名。

【讨论】:

    【解决方案2】:

    RAViewer It Just Activity Name 用您的 Activity 名称替换 Like 这个

    import android.app.ProgressDialog;
    import android.os.AsyncTask;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.util.Log;
    
    import org.apache.http.HttpResponse;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.params.CoreProtocolPNames;
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.net.URLDecoder;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    public class MainLauncher extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main_launcher);
    
            new YouTubePageStreamUriGetter().execute("https://www.youtube.com/watch?v=4GuqB1BQVr4");
        }
    
    
        class Meta {
            public String num;
            public String type;
            public String ext;
    
            Meta(String num, String ext, String type) {
                this.num = num;
                this.ext = ext;
                this.type = type;
            }
        }
    
        class Video {
            public String ext = "";
            public String type = "";
            public String url = "";
    
            Video(String ext, String type, String url) {
                this.ext = ext;
                this.type = type;
                this.url = url;
            }
        }
    
        public ArrayList<Video> getStreamingUrisFromYouTubePage(String ytUrl)
                throws IOException {
            if (ytUrl == null) {
                return null;
            }
    
            // Remove any query params in query string after the watch?v=<vid> in
            // e.g.
            // http://www.youtube.com/watch?v=0RUPACpf8Vs&feature=youtube_gdata_player
            int andIdx = ytUrl.indexOf('&');
            if (andIdx >= 0) {
                ytUrl = ytUrl.substring(0, andIdx);
            }
    
            // Get the HTML response
            String userAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:8.0.1)";
            HttpClient client = new DefaultHttpClient();
            client.getParams().setParameter(CoreProtocolPNames.USER_AGENT,
                    userAgent);
            HttpGet request = new HttpGet(ytUrl);
            HttpResponse response = client.execute(request);
            String html = "";
            InputStream in = response.getEntity().getContent();
            BufferedReader reader = new BufferedReader(new InputStreamReader(in));
            StringBuilder str = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                str.append(line.replace("\\u0026", "&"));
            }
            in.close();
            html = str.toString();
    
            // Parse the HTML response and extract the streaming URIs
            if (html.contains("verify-age-thumb")) {
                Log.e("Downloader","YouTube is asking for age verification. We can't handle that sorry.");
                return null;
            }
    
            if (html.contains("das_captcha")) {
                Log.e("Downloader","Captcha found, please try with different IP address.");
                return null;
            }
    
            Pattern p = Pattern.compile("stream_map\": \"(.*?)?\"");
            // Pattern p = Pattern.compile("/stream_map=(.[^&]*?)\"/");
            Matcher m = p.matcher(html);
            List<String> matches = new ArrayList<String>();
            while (m.find()) {
                matches.add(m.group());
            }
    
            if (matches.size() != 1) {
                Log.e("Downloader","Found zero or too many stream maps.");
                return null;
            }
    
            String urls[] = matches.get(0).split(",");
            HashMap<String, String> foundArray = new HashMap<String, String>();
            for (String ppUrl : urls) {
                String url = URLDecoder.decode(ppUrl, "UTF-8");
    
                Pattern p1 = Pattern.compile("itag=([0-9]+?)[&]");
                Matcher m1 = p1.matcher(url);
                String itag = null;
                if (m1.find()) {
                    itag = m1.group(1);
                }
    
                Pattern p2 = Pattern.compile("sig=(.*?)[&]");
                Matcher m2 = p2.matcher(url);
                String sig = null;
                if (m2.find()) {
                    sig = m2.group(1);
                }
    
                Pattern p3 = Pattern.compile("url=(.*?)[&]");
                Matcher m3 = p3.matcher(ppUrl);
                String um = null;
                if (m3.find()) {
                    um = m3.group(1);
                }
    
                if (itag != null && sig != null && um != null) {
                    foundArray.put(itag, URLDecoder.decode(um, "UTF-8") + "&"
                            + "signature=" + sig);
                }
            }
    
            if (foundArray.size() == 0) {
                Log.e("Downloader","Couldn't find any URLs and corresponding signatures");
                return null;
            }
    
            HashMap<String, Meta> typeMap = new HashMap<String,Meta>();
            typeMap.put("13", new Meta("13", "3GP", "Low Quality - 176x144"));
            typeMap.put("17", new Meta("17", "3GP", "Medium Quality - 176x144"));
            typeMap.put("36", new Meta("36", "3GP", "High Quality - 320x240"));
            typeMap.put("5",  new Meta("5", "FLV", "Low Quality - 400x226"));
            typeMap.put("6",  new Meta("6", "FLV", "Medium Quality - 640x360"));
            typeMap.put("34", new Meta("34", "FLV", "Medium Quality - 640x360"));
            typeMap.put("35", new Meta("35", "FLV", "High Quality - 854x480"));
            typeMap.put("43", new Meta("43", "WEBM", "Low Quality - 640x360"));
            typeMap.put("44", new Meta("44", "WEBM", "Medium Quality - 854x480"));
            typeMap.put("45", new Meta("45", "WEBM", "High Quality - 1280x720"));
            typeMap.put("18", new Meta("18", "MP4", "Medium Quality - 480x360"));
            typeMap.put("22", new Meta("22", "MP4", "High Quality - 1280x720"));
            typeMap.put("37", new Meta("37", "MP4", "High Quality - 1920x1080"));
            typeMap.put("33", new Meta("38", "MP4", "High Quality - 4096x230"));
    
            ArrayList<Video> videos = new ArrayList<Video>();
    
            for (String format : typeMap.keySet()) {
                Meta meta = typeMap.get(format);
    
                if (foundArray.containsKey(format)) {
                    Video newVideo = new Video(meta.ext, meta.type,
                            foundArray.get(format));
                    videos.add(newVideo);
                    Log.d("Downloader","YouTube Video streaming details: ext:" + newVideo.ext
                            + ", type:" + newVideo.type + ", url:" + newVideo.url);
                }
            }
    
            return videos;
        }
    
        private class YouTubePageStreamUriGetter extends AsyncTask<String, String, String> {
            ProgressDialog progressDialog;
    
            @Override
            protected void onPreExecute() {
                super.onPreExecute();
                progressDialog = ProgressDialog.show(MainLauncher.this, "",
                        "Connecting to YouTube...", true);
            }
    
            @Override
            protected String doInBackground(String... params) {
                String url = params[0];
                try {
                    ArrayList<Video> videos = getStreamingUrisFromYouTubePage(url);
                    if (videos != null && !videos.isEmpty()) {
                        String retVidUrl = null;
                        for (Video video : videos) {
                            if (video.ext.toLowerCase().contains("mp4")
                                    && video.type.toLowerCase().contains("medium")) {
                                retVidUrl = video.url;
                                break;
                            }
                        }
                        if (retVidUrl == null) {
                            for (Video video : videos) {
                                if (video.ext.toLowerCase().contains("3gp")
                                        && video.type.toLowerCase().contains(
                                        "medium")) {
                                    retVidUrl = video.url;
                                    break;
    
                                }
                            }
                        }
                        if (retVidUrl == null) {
    
                            for (Video video : videos) {
                                if (video.ext.toLowerCase().contains("mp4")
                                        && video.type.toLowerCase().contains("low")) {
                                    retVidUrl = video.url;
                                    break;
    
                                }
                            }
                        }
                        if (retVidUrl == null) {
                            for (Video video : videos) {
                                if (video.ext.toLowerCase().contains("3gp")
                                        && video.type.toLowerCase().contains("low")) {
                                    retVidUrl = video.url;
                                    break;
                                }
                            }
                        }
    
                        return retVidUrl;
                    }
                } catch (Exception e) {
                    Log.e("Downloader","Couldn't get YouTube streaming URL", e);
                }
                Log.e("Downloader","Couldn't get stream URI for " + url);
                return null;
            }
    
            @Override
            protected void onPostExecute(String streamingUrl) {
                super.onPostExecute(streamingUrl);
                progressDialog.dismiss();
                if (streamingUrl != null) {
                    /* Do what ever you want with streamUrl */
                }
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-15
      • 1970-01-01
      • 2012-11-06
      相关资源
      最近更新 更多