在断开投射之前获取媒体当前位置
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 的当前位置