在断开投射之前获取媒体当前位置

Posted

技术标签:

【中文标题】在断开投射之前获取媒体当前位置【英文标题】:Get media current position before disconnecting from cast 【发布时间】:2016-08-11 12:36:46 【问题描述】:

在与演员断开连接之前,是否可以从VideoCastManager 获取当前正在播放的媒体?

当用户手动断开投射时,我想保存当前媒体的最后进度。我使用了VideoCastCosumer 方法onDisconnected(),但它引发了异常。不知道是什么样的异常,因为我的日志只显示这个:

System.err: at com.economist.newton.mobile.ui.activity.BaseCastActivity$1.onDisconnected (MyCastActivity.java:81)

此行在onDisconnected() 方法中包含以下行:

try 
      if(castManager.getCurrentMediaPosition() > 30000) //  <-here error occurs
              ...
      
 catch (TransientNetworkDisconnectionException | NoConnectionException e) 
      e.printStackTrace();

如果有帮助,castManager 变量在onCreate() 中声明:

castManager = VideoCastManager.getInstance();

演员配套库:com.google.android.libraries.cast.companionlibrary:ccl:2.8.4

【问题讨论】:

【参考方案1】:

有几种方法可以做到这一点。我认为最简单的方法是拥有一个实现ProgressWatcher(来自CCL)的组件。在该侦听器中,setProgress(int currentPosition, int duration) 将每秒调用一次,并将流的 currentPosition 作为其第一个参数。您可以缓存此值(如果您的设备断开连接,它将不会更新),以便为您提供有关当前位置的实时信息。例如,如果你的活动实现了这个接口:

public MyActivity extends AppCompatActivity implements ProgressWatcher 
   private int mCurrentStreamPosition;

   public onStart() 
       ....
       mCastManager.addProgressWatcher(this);
       ....
   

   public onStop() 
       ....
       mCastManager.removeProgressWatcher(this);
       ....
   

   public setProgress(int currentTime, int duration) 
       mCurrentStreamPosition = currentTime;
   

   public int getCurrentStreamPosition() 
       return mCurrentStreamPosition;
   
   ....

因此,您可以随时调用 getCurrentStreamPosition()(例如,您可以在 onDisconnected() 中调用它)来获取最后/当前流位置。请注意,根据您的应用程序的结构,您可能决定在onResume()/onPause()onCreate()/onDestroy() 中注册/注销您的ProgressWatcher。重要的是确保您取消注册它以避免内存泄漏。

【讨论】:

使用 google cast v3(没有 CCL 库?)实现相同目标的最简单方法是什么?【参考方案2】:

对于 Castv3,您可以从 SessionManagerListener 覆盖 onSessionEnding 并获取 mRemoteMediaClient.getMediaStatus().getStreamPosition()

【讨论】:

【参考方案3】:

调用mRemoteMediaClient.getMediaStatus().getStreamPosition() 对我不起作用,但mRemoteMediaClient.getApproximateStreamPosition() 工作正常。

【讨论】:

以上是关于在断开投射之前获取媒体当前位置的主要内容,如果未能解决你的问题,请参考以下文章

停止在接收器上投射

使用 Chromecast 投射时如何将媒体内容的元数据发送到通知?

光线投射中的方向向量

如何在 React Native 中获取 API 之前保存当前位置的经纬度坐标?

在断开连接事件中获取客户端当前所在的房间列表

Flutter iOS - 在加载 Google Maps 小部件之前无法获取 initialCameraPosition 的当前位置