使用 Presentation 将屏幕流式传输到 chromecast

Posted

技术标签:

【中文标题】使用 Presentation 将屏幕流式传输到 chromecast【英文标题】:stream screen to chromecast using Presentation 【发布时间】:2015-04-27 12:03:08 【问题描述】:

我正在使用 com.android.support:appcompat-v7:21.0.3 开发一个使用 chromecast 将屏幕流式传输到电视的应用。

问题是当我检索到 PresentationDisplay 时它是空的! 我正在使用默认接收器应用程序,似乎 chromecast 不支持

MediaControlIntent.CATEGORY_LIVE_VIDEO

这是代码:

private void updatePresentation() 

        Log.d(TAG, "updatePresentation()");

        MediaRouter.RouteInfo route = mMediaRouter.getSelectedRoute();
        Display presentationDisplay = route != null ? route.getPresentationDisplay() : null;

        Log.d(TAG, "MediaRouter.RouteIngo: " + route.getName());

        if (presentationDisplay != null)
            Log.d(TAG, "presentationDisplay " + presentationDisplay.getName());
        else if (presentationDisplay == null)
            Log.d(TAG, "presentationDisplay is null");

        // Dismiss the current presentation if the display has changed.
        if (mPresentation != null && mPresentation.getDisplay() != presentationDisplay) 
            Log.i(TAG, "Dismissing presentation because the current route no longer "
                    + "has a presentation display.");
            mPresentation.dismiss();
            mPresentation = null;
        

        // Show a new presentation if needed.
        if (mPresentation == null && presentationDisplay != null) 
            Log.i(TAG, "Showing presentation on display: " + presentationDisplay);
            mPresentation = new DemoPresentation(this, presentationDisplay);
            mPresentation.setOnDismissListener(new DialogInterface.OnDismissListener() 
                @Override
                public void onDismiss(DialogInterface dialog)
                
                    if (mPresentation != null) mPresentation.dismiss();
                
            );
            try 
                Log.d("mPresentation", "showing");
                mPresentation.show();
             catch (WindowManager.InvalidDisplayException ex) 
                Log.w(TAG, "Couldn't show presentation!  Display was removed in "
                        + "the meantime.", ex);
                mPresentation = null;
            
        
    

【问题讨论】:

您是否通过 Chromecast 的 Miracast 样式支持手动将设备连接到 Chromecast?这不会自动发生,也不会因为使用 MediaRouter 而发生。 如果我正确理解了您的意思:在我自己的 nexus 10 上,我使用 Chromecast 应用程序来设置 chromecast 设备,而在我的 nexsus 4 上,这一切都是自动发生的。 【参考方案1】:

在我自己的 nexus 10 上,我使用 Chromecast 应用程序来设置 chromecast 设备,而在我的 nexus 4 上,这一切都是自动发生的。

不,我指的不仅仅是 Chromecast 应用。

Chromecast 原生支持 Cast SDK 和 RemotePlaybackClient。它还支持作为外接显示器,可用于Presentation。但是,用户必须手动进入设置>显示>投射屏幕并选择Chromecast。然后,您将获得屏幕镜像,Presentation 将起作用。

【讨论】:

好的,但这不是我需要的。我的应用程序中需要一个按钮,当用户单击该按钮时,屏幕镜像必须启动。就像 Chromecast 应用程序中的“屏幕镜像”部分一样。或者以另一种方式,启动 Intent 以开始屏幕镜像。 @Matt:“我的应用程序中需要一个按钮,当用户单击该按钮时,屏幕镜像必须启动”——AFAIK,这是不可能的。 “启动 Intent 以开始屏幕镜像”——您可以 try ACTION_CAST_SETTINGS 将用户带到设置 > 显示 > 投射屏幕。 实际上我需要的东西没有任何文档记录,但为什么谷歌可以在其应用程序 Chromecast 应用程序(“屏幕镜像”部分)中做到这一点?使用布局中间的自定义蓝色按钮,Chromecast 应用可以启动/停止屏幕镜像。 @Matt:谷歌的应用程序通常可以做普通应用程序不能做的事情。

以上是关于使用 Presentation 将屏幕流式传输到 chromecast的主要内容,如果未能解决你的问题,请参考以下文章

NodeJS如何以最小的毫秒延迟流式传输屏幕截图?

如何将屏幕内容流式传输到 Chromecast

我可以将 iOS 应用程序视图流式传输到 Chromecast

使用 LFLiveKit 捕获屏幕并流式传输到 rtmp 服务器

如何将 Android 手机屏幕流式传输到 PC [关闭]

如何使用 WebRTC 将视频流式传输到 RTMP?