带有 Cast 配套库的 RemoteMediaPlayer 媒体状态为空

Posted

技术标签:

【中文标题】带有 Cast 配套库的 RemoteMediaPlayer 媒体状态为空【英文标题】:RemoteMediaPlayer media status is null with Cast companion library 【发布时间】:2014-03-26 18:28:49 【问题描述】:

我正在尝试使用 Cast 配套库创建一个简单的应用,该应用在 Chromecast 上流式传输视频。

我正在做的事情非常简单。 我有以下代码的活动:

    private VideoCastManager mVideoCastManager;


    @Override
    protected void onCreate(Bundle savedInstanceState)
     
        mVideoCastManager = CastHelper.getVideoCastManager(this);
    

还有一个名为 CastHelper 的类,只有一个方法:

    private static final String APPLICATION_ID = CastMediaControlIntent.DEFAULT_MEDIA_RECEIVER_APPLICATION_ID;
    private static VideoCastManager mCastMgr;

    public static VideoCastManager getVideoCastManager(Context ctx)
    
        if (mCastMgr == null)
        
            mCastMgr = VideoCastManager.initialize(ctx, APPLICATION_ID, null, null);
            mCastMgr.enableFeatures(VideoCastManager.FEATURE_NOTIFICATION
                    | VideoCastManager.FEATURE_DEBUGGING);
        
        mCastMgr.setContext(ctx);
        return mCastMgr;
    

当我启动应用程序时,我的操作栏中有媒体按钮,我可以选择一个设备。但是,我有一个错误:

03-26 19:18:47.890: D/ccl_VideoCastManager(9874): Registering MediaChannel namespace
03-26 19:18:47.900: D/ccl_VideoCastManager(9874): onApplicationStatusChanged() reached: Ready To Cast
03-26 19:18:50.203: D/ccl_VideoCastManager(9874): RemoteMediaPlayer::onStatusUpdated() is reached
03-26 19:18:50.203: D/ccl_VideoCastManager(9874): onRemoteMediaPlayerStatusUpdated() reached
03-26 19:18:50.203: D/ccl_VideoCastManager(9874): mApiClient or mRemoteMediaPlayer is null, so will not proceed

其实问题出在那个区块上:

 if (null == mApiClient || null == mRemoteMediaPlayer ||
                null == mRemoteMediaPlayer.getMediaStatus()) 
            LOGD(TAG, "mApiClient or mRemoteMediaPlayer is null, so will not proceed");
            return;
 

RemoteMediaPlayer 实例很好,但getMediaStatus 方法返回null。请注意,我什至还没有加载媒体。

我做错了什么?

编辑 正如 Ali Naddaf 所指出的,也许这段代码没有错,但是当我添加 VideoCastConsumerImpl 时,从未调用过 onApplicationConnected,所以我认为这可能是原因。

IVideoCastConsumer mCastConsumer = new VideoCastConsumerImpl()
        


            @Override
            public void onConnected()
            
                super.onConnected();


            

            @Override
            public void onApplicationConnected(ApplicationMetadata appMetadata, String sessionId, boolean wasLaunched)
            
                super.onApplicationConnected(appMetadata, sessionId, wasLaunched);
                //Trying to load a media here, but never called

            

        ;
mVideoCastManager.addBaseCastConsumer(mCastConsumer);

【问题讨论】:

【参考方案1】:

mVideoCastManager.addBaseCastConsumer(mCastConsumer); 更改为mVideoCastManager.addVideoCastConsumer(mCastConsumer); 看看是否有帮助。

【讨论】:

【参考方案2】:

是什么让你觉得有些不对劲?如果您还没有加载任何媒体,那么媒体状态为空是合理的,并且使用上述转义路线的方法都是关于为各种事物更新媒体的状态,此时,它退出该方法,因为那里几乎无事可做。那么您是否认为这有问题,或者我误解了这个问题?

【讨论】:

你是对的,也许这里没有错,但是,当我添加一个 VideoCastConsumerImpl 回调时,永远不会调用 onApplicationConnected 方法。我会更新我的问题以更准确地解释。

以上是关于带有 Cast 配套库的 RemoteMediaPlayer 媒体状态为空的主要内容,如果未能解决你的问题,请参考以下文章

NoClassDefFoundError java.lang.NoClassDefFoundError com.google.sample.castcompanionlibrary.cast.Vide

带有多个参数的 static_cast 是怎么回事?

带有 std::any 和 std::optional 的 any_cast

EntityFramework 4.1 DbContext 选择添加带有附加字符的 CAST 列

使用带有decltype的std :: any_cast…为什么这段代码会抛出错误的any_cast?

带有 std::any 值的 unordered_map 不能使用 any_cast 字符串