0

由于我没有 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());
        }

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

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

4

3 回答 3

1

试试这可能对你有用

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

于 2011-01-31T06:18:33.667 回答
1

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

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

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

希望这可以帮助。

于 2011-01-31T06:08:01.787 回答
0
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 不正确。现在,它正在工作...

于 2011-02-23T11:07:38.153 回答