google / google/ExoPlayer

Allow playback speed adjustments while tunneling

Open
#4,803 8 comments 0 reactions 1 assignee Assigned to @tonihei View on GitHub
enhancement low priority
Dominant language
Java
Stars
21.9k
Forks
6k
PR merge metrics
No merged PRs in 30d

Description

Hi,
I am working on an Android TV application and I want to enable tunneling for the video playback to improve performance.
But I encountered a problem by using set speed when I set tunnel mode on.
Any way, It works fine, if tunnel mode off in this case.
Please tell me how to avoid the following issue?

### Issue description
Android TV (Adnroid 8.0.0, model:AQUOS_TVJ18, device:tcsu2uj)

Exo ver 2.8.4

test content: YouTube DASH / Google Glass (MP4,H264)

I have changed something on demos app for test below.

```
PlayerActivity (in the 183rd line)
//trackSelectorParameters = new DefaultTrackSelector.ParametersBuilder().build();
final DefaultTrackSelector.ParametersBuilder parametersBuilder = new DefaultTrackSelector.ParametersBuilder();
parametersBuilder.setTunnelingAudioSessionId(C.generateAudioSessionIdV21(this));
trackSelectorParameters = parametersBuilder.build();

//player.setPlayWhenReady(playWhenReady); (in the 28th line)
if(!playWhenReady && player.getPlaybackParameters().speed != 1.5f){
player.setPlaybackParameters(new PlaybackParameters(1.5f, 1));
}
else {
player.setPlaybackParameters(new PlaybackParameters(1.0f, 1));
}
```

When "player.setPlaybackParameters(new PlaybackParameters(1.0f, 1))" called, I get the following error.

```
E/EventLogger: playerFailed [6.99, 4.52, window=0]
com.google.android.exoplayer2.ExoPlaybackException
at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:354)
at android.os.Handler.dispatchMessage(Handler.java:101)
at android.os.Looper.loop(Looper.java:164)
at android.os.HandlerThread.run(HandlerThread.java:65)
Caused by: java.lang.IllegalStateException
at com.google.android.exoplayer2.util.Assertions.checkState(Assertions.java:81)
at com.google.android.exoplayer2.audio.DefaultAudioSink.writeBuffer(DefaultAudioSink.java:781)
at com.google.android.exoplayer2.audio.DefaultAudioSink.processBuffers(DefaultAudioSink.java:724)
at com.google.android.exoplayer2.audio.DefaultAudioSink.drainAudioProcessorsToEndOfStream(DefaultAudioSink.java:831)
at com.google.android.exoplayer2.audio.DefaultAudioSink.handleBuffer(DefaultAudioSink.java:647)
at com.google.android.exoplayer2.audio.MediaCodecAudioRenderer.processOutputBuffer(MediaCodecAudioRenderer.java:529)
at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.drainOutputBuffer(MediaCodecRenderer.java:1097)
at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:582)
at com.google.android.exoplayer2.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:518)
at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:301)
at android.os.Handler.dispatchMessage(Handler.java:101) 
at android.os.Looper.loop(Looper.java:164) 
at android.os.HandlerThread.run(HandlerThread.java:65)
```

Thanks!

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.