从Android应用程序打开Chromecast YouTube视频

阿努拉格

我创建了一个应用,其中有一个带有YouTube链接的列表视图。现在,我想使用Chrome Cast播放这些视频。我遵循了官方文档,并且能够播放具有直接mp4链接的其他视频,但不适用于youtube链接。

当然,其他链接直接连接到视频(以* .mp4结尾),但是如何添加带有YouTube链接的媒体?我需要以某种方式创建带有youtube链接的MediaInfo对象,但是我不知道该怎么做,甚至可能。

我已找到此信息

MimeData数据=新的MimeData(“ v = g1LsT1PVjUA”,MimeData.TYPE_TEXT); mSession.startSession(“ YouTube”,data);

通过我的Android应用打开Chromecast YouTube视频

但是我不确定如何获取会话并将其加载到youtube会话中。如果有人可以帮助我,我将不胜感激。

谢谢你的帮助

DanhKE6D

去年,我写了一个Android应用,可以在大屏幕电视上的VLC上播放YouTube /本地媒体。它的表现非常好,但是我一直想用更优雅的东西代替VLC笔记本电脑。当Chromecast最终与官方SDK一起发布时,我感到非常兴奋。在尝试启动YouTube接收器应用播放YouTube视频时,我也遇到了同样的问题,因此我决定深入研究VLC是如何做到这一点的(开源很棒:))我发现YouTube视频ID只是一个JavaScript页面中嵌入了很多东西。诀窍是从中提取正确的信息。不幸的是,VLC脚本是用Lua编写的,所以我花了几周的时间学习足够的Lua来浏览Lua脚本。您可以在youtube.lua上搜索该脚本的源代码。

我用Java重写了脚本,并且能够修改CastVideos Android以轻松播放YouTube视频。请注意,由于Chromecast只能播放mp4视频容器格式,因此其他格式的视频可能无法播放。

如果有人感兴趣,这是我的测试代码。您可以使用CastHelloVideo-chrome加载自定义媒体来测试URL。

享受,

姓名

    package com.dql.urlexplorer;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

public class UrlExplore {

    private static final String URL_ENCODED_STREAM_MAP     = "\"url_encoded_fmt_stream_map\":";
    private static final String VIDEO_TITLE_KEYWORD               = "<meta name=\"title\"";
    private static final String VIDEO_DESCRIPTION_KEYWORD  = "<meta name=\"description\"";
    private static final String VIDEO_THUMBNAIL_KEYWORD    = "<meta property=\"og:image\"" ;
    private static final String CONTENT_VALUE_KEYWORD        = "content=\"";

    //private static final String TEST_URL = "http://www.youtube.com/watch?v=JtyCM4BTbYo";
    private static final String YT_UTRL_PREFIX = "http://www.youtube.com/watch?v=";

    public static void main(String[] args) throws IOException {

        while (true) {
               String videoId = getVideoIdFromUser();

                String urlSite = YT_UTRL_PREFIX + videoId;
                System.out.println("URL =  " + urlSite);
                System.out.println("===============================================================");
                System.out.println("Getting video site content");
                System.out.println("===============================================================");

                CloseableHttpClient httpclient = HttpClients.createDefault();
                try {
                    HttpGet httpget = new HttpGet(urlSite);

                    System.out.println("Executing request " + httpget.getRequestLine());


                    // Create a custom response handler
                    ResponseHandler<String> responseHandler = new ResponseHandler<String>() {

                        public String handleResponse(
                                final HttpResponse response) throws ClientProtocolException, IOException {
                            int status = response.getStatusLine().getStatusCode();
                            if (status >= 200 && status < 300) {
                                HttpEntity entity = response.getEntity();
                                return entity != null ? EntityUtils.toString(entity) : null;
                            } else {
                                throw new ClientProtocolException("Unexpected response status: " + status);
                            }
                        }

                    };
                    String responseBody = httpclient.execute(httpget, responseHandler);

                    if (responseBody.contains(VIDEO_TITLE_KEYWORD)) {
                        // video title
                        int titleStart = responseBody.indexOf(VIDEO_TITLE_KEYWORD);
                        StringBuilder title = new StringBuilder();
                        char ch;
                        do {
                            ch = responseBody.charAt(titleStart++);
                            title.append(ch);
                        }
                        while (ch != '>');
                        String videoTitle = getKeyContentValue(title.toString());
                         System.out.println("Video Title =  " + videoTitle);
                    }
                    if (responseBody.contains(VIDEO_DESCRIPTION_KEYWORD)) {
                        // video description
                        int descStart = responseBody.indexOf(VIDEO_DESCRIPTION_KEYWORD);
                        StringBuilder desc = new StringBuilder();
                        char ch;
                        do {
                            ch = responseBody.charAt(descStart++);
                            desc.append(ch);
                        }
                        while (ch != '>');
                        String videoDesc = getKeyContentValue(desc.toString());
                         System.out.println("Video Description =  " + videoDesc);                       
                    }
                    if (responseBody.contains(VIDEO_THUMBNAIL_KEYWORD)) {
                        // video thumbnail
                        int thumbnailStart = responseBody.indexOf(VIDEO_THUMBNAIL_KEYWORD);
                        StringBuilder thumbnailURL = new StringBuilder();
                        char ch;
                        do {
                            ch = responseBody.charAt(thumbnailStart++);
                            thumbnailURL.append(ch);
                        }
                        while (ch != '>');
                        String videoThumbnail= getKeyContentValue(thumbnailURL.toString());
                         System.out.println("Video Thumbnail =  " + videoThumbnail);                        
                    }
                    if (responseBody.contains(URL_ENCODED_STREAM_MAP)) {
                        // find the string we are looking for
                        int start = responseBody.indexOf(URL_ENCODED_STREAM_MAP) + URL_ENCODED_STREAM_MAP.length() + 1;  // is the opening "
                        String urlMap = responseBody.substring(start);
                        int end = urlMap.indexOf("\"");
                        if (end > 0) {
                            urlMap = urlMap.substring(0, end);
                        }
                        String path = getURLEncodedStream(urlMap);
                        System.out.println("Video URL = " + path);
                    }

                }
                finally {
                    httpclient.close();
                }
                System.out.println( "===============================================================");
                System.out.println("Done: ");
                System.out.println("===============================================================");      
        }

    }

    static String getURLEncodedStream(String stream) throws UnsupportedEncodingException {
        // replace all the \u0026 with &
         String str = stream.replace("\\u0026", "&");
        //str = java.net.URLDecoder.decode(stream, "UTF-8");
        //System.out.println("Raw URL map = " + str);
        String urlMap = str.substring(str.indexOf("url=http") + 4);
        // search urlMap until we see either a & or ,
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < urlMap.length(); i++) {
            if ((urlMap.charAt(i) == '&') || (urlMap.charAt(i) == ','))
                break;
            else
                sb.append(urlMap.charAt(i));
        }
        //System.out.println(java.net.URLDecoder.decode(sb.toString(),"UTF-8"));
        return java.net.URLDecoder.decode(sb.toString(),"UTF-8");

    }

    static String getKeyContentValue(String str) {
        StringBuilder contentStr = new StringBuilder();
        int contentStart = str.indexOf(CONTENT_VALUE_KEYWORD) + CONTENT_VALUE_KEYWORD.length();
        if (contentStart > 0) {
            char ch;
            while (true) {
                ch = str.charAt(contentStart++);
                if (ch == '\"')
                    break;
                contentStr.append(ch);
            }
        }
        try {
            return java.net.URLDecoder.decode(contentStr.toString(),"UTF-8");
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }

    /*
     * Prompt the user to enter a video ID.
     */
    private static String getVideoIdFromUser() throws IOException {

        String videoId = "";

        System.out.print("Please enter a YouTube video Id: ");
        BufferedReader bReader = new BufferedReader(new InputStreamReader(System.in));
        videoId = bReader.readLine();

        if (videoId.length() < 1) {
            // Exit if the user doesn't provide a value.
            System.out.print("Video Id can't be empty! Exiting program");
            System.exit(1);
        }

        return videoId;
    }

}`enter code here`

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

通过我的Android应用打开Chromecast YouTube视频

来自分类Dev

从Android应用程序在YouTube上上传视频

来自分类Dev

如何从Android应用程序投射YouTube视频网址

来自分类Dev

从Android应用程序在YouTube上上传视频

来自分类Dev

在Android的“视频视图”中播放YouTube视频

来自分类Dev

如何在余烬应用程序中播放YouTube视频

来自分类Dev

youtube视频无法在我的webview应用程序中播放?

来自分类Dev

youtube视频无法在我的webview应用程序中播放?

来自分类Dev

在Rails应用程序中嵌入Youtube视频

来自分类Dev

Youtube 视频在 swift 应用程序底部被切断

来自分类Dev

Android:从我的应用中搜索YouTube视频

来自分类Dev

通过YouTube应用将视频投射到ChromeCast

来自分类Dev

在没有Youtube API的情况下在Android应用程序中播放视频

来自分类Dev

YouTube视频未在webView中打开

来自分类Dev

C#单击图像打开YouTube视频

来自分类Dev

以全屏模式在Youtube上打开视频页面

来自分类Dev

在引导模式框中打开 YouTube 视频

来自分类Dev

如何使用youtube-dl打开youtube视频

来自分类Dev

使用Youtube Data API创建类似youtube的应用程序来聚合来自任何频道的youtube视频是否合法?

来自分类Dev

将youtube视频嵌入iOS应用

来自分类Dev

chrome扩展程序,用于播放YouTube视频

来自分类Dev

Flutter:在iOS版本的YouTube应用中打开视频

来自分类Dev

如何在Android中显示YouTube视频?

来自分类Dev

Android-在SurfaceTexture上绘制YouTube视频

来自分类Dev

检测youtube视频何时在Android中完成

来自分类Dev

在Android的YouTube视频中屏蔽广告

来自分类Dev

使用YouTube Android Api显示视频

来自分类Dev

在Android Studio中获取YouTube视频的长度

来自分类Dev

在 Android 上使用 YouTube API 搜索视频

Related 相关文章

  1. 1

    通过我的Android应用打开Chromecast YouTube视频

  2. 2

    从Android应用程序在YouTube上上传视频

  3. 3

    如何从Android应用程序投射YouTube视频网址

  4. 4

    从Android应用程序在YouTube上上传视频

  5. 5

    在Android的“视频视图”中播放YouTube视频

  6. 6

    如何在余烬应用程序中播放YouTube视频

  7. 7

    youtube视频无法在我的webview应用程序中播放?

  8. 8

    youtube视频无法在我的webview应用程序中播放?

  9. 9

    在Rails应用程序中嵌入Youtube视频

  10. 10

    Youtube 视频在 swift 应用程序底部被切断

  11. 11

    Android:从我的应用中搜索YouTube视频

  12. 12

    通过YouTube应用将视频投射到ChromeCast

  13. 13

    在没有Youtube API的情况下在Android应用程序中播放视频

  14. 14

    YouTube视频未在webView中打开

  15. 15

    C#单击图像打开YouTube视频

  16. 16

    以全屏模式在Youtube上打开视频页面

  17. 17

    在引导模式框中打开 YouTube 视频

  18. 18

    如何使用youtube-dl打开youtube视频

  19. 19

    使用Youtube Data API创建类似youtube的应用程序来聚合来自任何频道的youtube视频是否合法?

  20. 20

    将youtube视频嵌入iOS应用

  21. 21

    chrome扩展程序,用于播放YouTube视频

  22. 22

    Flutter:在iOS版本的YouTube应用中打开视频

  23. 23

    如何在Android中显示YouTube视频?

  24. 24

    Android-在SurfaceTexture上绘制YouTube视频

  25. 25

    检测youtube视频何时在Android中完成

  26. 26

    在Android的YouTube视频中屏蔽广告

  27. 27

    使用YouTube Android Api显示视频

  28. 28

    在Android Studio中获取YouTube视频的长度

  29. 29

    在 Android 上使用 YouTube API 搜索视频

热门标签

归档