【问题标题】:How to create a youtube app in my android Tab?如何在我的 android 标签中创建一个 youtube 应用程序?
【发布时间】:2011-01-31 05:51:59
【问题描述】:

由于我没有 Flash 播放器来播放来自 Youtube 本身的视频,我需要在我的默认 MediaPlayer 中播放它。我使用的代码如下:

MediaController mc = new MediaController(ctx);
        setContentView(R.layout.main);
        vv = (VideoView) findViewById(R.id.VideoView01);
        try {

            ur = Uri.parse(Url /*+ "&fmt=18"*/); // "&fmt=18"to convert to mp4
            System.out.println("Host = " + ur.getHost());
            System.out.println("Encoded Path = " + ur.getEncodedPath());

            vv.setVideoURI(ur);
            // vv.setVideoPath("http://www.daily3gp.com/vids/747.3gp");
            vv.setMediaController(mc);
            vv.requestFocus();
            vv.start();
            mc.show();

        } catch (Exception ex) {
            System.out.println("Exception!!!!!!!!!!!!!!!! "
                    + ex.getMessage());
        }

问题是......它正在获取链接,当我们将链接提供给播放器时,它说“无法播放此视频......

请帮忙!!!!!!!!!!!!

【问题讨论】:

    标签: java android youtube youtube-api mediacontroller


    【解决方案1】:

    正如CommonsWare在这里所说:play-youtube-video-in-webview

    除了可能在具有 Flash 的设备上之外,您不能将它们显示为嵌入的。

    但是,如果您可以解析出 YouTube 视频的详细信息,则可以构建一个 ACTION_VIEW Intent,将它们显示在 YouTube 应用程序上...对于那些具有 YouTube 应用程序的 Android 设备。

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      试试这个可能对你有用

      startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.youtube.com")));

      【讨论】:

        【解决方案3】:
        private static void play(String videoId, int format, String encoding,
                String userAgent, File outputdir, String extension)
                throws Throwable {
            log.fine("Retrieving " + videoId);
            List<NameValuePair> qparams = new ArrayList<NameValuePair>();
            qparams.add(new BasicNameValuePair("video_id", videoId));
            qparams.add(new BasicNameValuePair("fmt", "" + format));
            URI uri = getUri("get_video_info", qparams);
            System.out.println("************JavaYoutubeDownloade.play() Uri = "
                    + uri.toString());
            System.out.println("JavaYoutubeDownloade.play() User Agent = "
                    + userAgent);
            CookieStore cookieStore = new BasicCookieStore();
            HttpContext localContext = new BasicHttpContext();
            localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);
        
            HttpClient httpclient = new DefaultHttpClient();
            HttpGet httpget = new HttpGet(uri);
            if (userAgent != null && userAgent.length() > 0) {
                httpget.setHeader("User-Agent", userAgent);
            }
        
            log.finer("Executing " + uri);
            HttpResponse response = httpclient.execute(httpget, localContext);
            HttpEntity entity = response.getEntity();
            if (entity != null && response.getStatusLine().getStatusCode() == 200) {
                InputStream instream = entity.getContent();
                String videoInfo = getStringFromInputStream(encoding, instream);
                if (videoInfo != null && videoInfo.length() > 0) {
                    List<NameValuePair> infoMap = new ArrayList<NameValuePair>();
                    URLEncodedUtils
                            .parse(infoMap, new Scanner(videoInfo), encoding);
                    String downloadUrl = null;
                    filename = videoId;
        
                    for (NameValuePair pair : infoMap) {
                        String key = pair.getName();
                        String val = pair.getValue();
                        log.finest(key + "=" + val);
                        if (key.equals("title")) {
                            filename = val;
                        } else if (key.equals("fmt_url_map")) {
                            String[] formats = commaPattern.split(val);
                            boolean found = false;
                            for (String fmt : formats) {
                                String[] fmtPieces = pipePattern.split(fmt);
                                if (fmtPieces.length == 2) {
                                    int pieceFormat = Integer
                                            .parseInt(fmtPieces[0]);
                                    log.fine("Available format=" + pieceFormat);
                                    if (pieceFormat == format) {
                                        // found what we want
                                        downloadUrl = fmtPieces[1];
                                        found = true;
                                        break;
                                    }
                                }
                            }
                            if (!found) {
                                log.warning("Could not find video matching specified format, however some formats of the video do exist (use -verbose).");
                            }
                        }
                    }
        
                    filename = cleanFilename(filename);
                    if (filename.length() == 0) {
                        filename = videoId;
                    } else {
                        filename += "_" + videoId;
                    }
                    filename += "." + extension;
        
        
                    File outputfile = new File(outputdir, filename);
                    if (!outputfile.exists()) {
                        outputfile.createNewFile();
        
                    }
                    //downloadedFile = outputdir.getPath() + "/" + filename;
        
                    if (downloadUrl != null) {
                        downloadWithHttpClient(userAgent, downloadUrl, outputfile);
        
                    } else {
                        log.severe("Could not find video");
                    }
                } else {
                    log.severe("Did not receive content from youtube");
                }
            } else {
                log.severe("Could not contact youtube: " + response.getStatusLine());
            }
        }
        
        private static void downloadWithHttpClient(String userAgent,
                String downloadUrl, File outputfile) throws Throwable {
            HttpGet httpget2 = new HttpGet(downloadUrl);
            if (userAgent != null && userAgent.length() > 0) {
                httpget2.setHeader("User-Agent", userAgent);
            }
        
            log.finer("Executing " + httpget2.getURI());
            HttpClient httpclient2 = new DefaultHttpClient();
            HttpResponse response2 = httpclient2.execute(httpget2);
            HttpEntity entity2 = response2.getEntity();
            if (entity2 != null && response2.getStatusLine().getStatusCode() == 200) {
                double length = entity2.getContentLength();
                if (length <= 0) {
                    // Unexpected, but do not divide by zero
                    length = 1;
                }
                InputStream instream2 = entity2.getContent();
        
                System.out.println("Writing "
                        + commaFormatNoPrecision.format(length) + " bytes to "
                        + outputfile);
                if (outputfile.exists()) {
                    outputfile.delete();
                }
        
                FileOutputStream outstream = new FileOutputStream(outputfile);
                try {
                    byte[] buffer = new byte[BUFFER_SIZE];
                    double total = 0;
                    int count = -1;
                    int progress = 10;
                    long start = System.currentTimeMillis();
                    while ((count = instream2.read(buffer)) != -1) {
                        total += count;
                        int p = (int) ((total / length) * ONE_HUNDRED);
                        if (p >= progress) {
                            long now = System.currentTimeMillis();
                            double s = (now - start) / 1000;
                            int kbpers = (int) ((total / KB) / s);
                            System.out.println(progress + "% (" + kbpers + "KB/s)");
                            progress += 10;
                        }
                        outstream.write(buffer, 0, count);
                    }
                    outstream.flush();
                } finally {
                    outstream.close();
                }
                System.out.println("Done");
            }
        }
        

        起初,我提供的下载 URL 不正确。现在,它正在工作......

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-06-02
          • 1970-01-01
          • 1970-01-01
          • 2015-05-16
          • 2015-03-11
          相关资源
          最近更新 更多