0

当我通过 ChromeCast 设备将视频从我的 Android 应用程序共享到电视时。我有一个线程每秒获取当前流位置,以更新我的应用程序上视频的当前时间。
double position = messageStream.getStreamPosition();
但有时这个函数会在几秒钟内返回相同的值。所以我的应用程序无法连续显示。

这是我记录的:

11-07 14:41:36.567: E/CastPlayerActivity(27190): position 587.3914184570313
11-07 14:41:36.637: E/CastPlayerActivity(27190): position 587.3914184570313
11-07 14:41:37.638: E/CastPlayerActivity(27190): position 587.3914184570313
11-07 14:41:38.639: E/CastPlayerActivity(27190): position 587.3914184570313
11-07 14:41:39.640: E/CastPlayerActivity(27190): position 587.3914184570313
11-07 14:41:40.641: E/CastPlayerActivity(27190): position 587.3914184570313
11-07 14:41:41.652: E/CastPlayerActivity(27190): position 588.5733334960937
11-07 14:41:42.663: E/CastPlayerActivity(27190): position 589.5793334960938
11-07 14:41:43.664: E/CastPlayerActivity(27190): position 590.5843334960938
11-07 14:41:44.665: E/CastPlayerActivity(27190): position 591.5893334960938

有谁知道为什么它有时会返回相同的值。
谢谢

4

2 回答 2

0

只需使用

messageStream.getcurrentposition();

于 2013-11-07T08:02:03.267 回答
0

MediaProtocolMessageStream 将当前位置存储在局部变量中。当 Chromecast 接收器向发送器发送 RAMP 更新命令时,此变量会更新。您的接收器可能没有像您轮询它那样频繁地发送更新。您可以通过扩展 MediaProtocolMessageStream 并覆盖 onStatusUpdated() 来查看接收更新的频率。

public class CustomMediaProtocolMessageStream extends MediaProtocolMessageStream {

    protected void onStatusUpdated() {
        Log.d(TAG, "I was updated!");
    }
}

如果是这种情况,请修改接收器以更频繁地发送状态更新。您还可以通过调用 MediaProtocolMessageStream.requestStatus() 并等待命令完成来请求接收器更新其状态。

MediaProtocolCommand cmd = mMessageStream.requestStatus();
cmd.setListener(new MediaProtocolCommand.Listener() {
    @Override
    public void onCompleted(MediaProtocolCommand mPCommand) {
        Log.d(TAG, "My status should be updated.");
    }
    @Override
    public void onCancelled(MediaProtocolCommand mPCommand) {
    }
});
于 2013-11-08T17:43:47.850 回答