google / google/ExoPlayer

Play videos with 90 degree rotation

Open
#10,835 24 comments 0 reactions 1 assignee Claimed by @marcbaechinger View on GitHub
bug: device specific
Dominant language
Java
Stars
21.9k
Forks
6k
PR merge metrics
No merged PRs in 30d

Description

### ExoPlayer Version

2.18.2

### Devices that reproduce the issue

I tested on android 8.1

### Devices that do not reproduce the issue

_No response_

### Reproducible in the demo app?

Yes

### Reproduction steps

EDIT copied from title by @marcbachinger:
"I set playerview.setRotation and i recorded video using native camera in portrait mode so its rotation degree is 90.Then I play in exoplayer it plays correctly in portrait mode again I play same video it rotates automatically.I set portrait in manifest for same activity.vide"

Any native camera recorded video
Exoplayer does not rotate but video does when scroll up and down multiple times in viewpager.

```
DefaultRenderersFactory rf = new DefaultRenderersFactory(mContext)
.setExtensionRendererMode(EXTENSION_RENDERER_MODE_PREFER).setMediaCodecSelector(
new MediaCodecSelector() {
@Override
public List getDecoderInfos(String mimeType,
boolean requiresSecureDecoder, boolean requiresTunnelingDecoder)
throws MediaCodecUtil.DecoderQueryException {
List decoderInfos = MediaCodecSelector.DEFAULT
.getDecoderInfos(mimeType, requiresSecureDecoder, requiresTunnelingDecoder);
if (MimeTypes.VIDEO_H264.equals(mimeType)) {
// copy the list because MediaCodecSelector.DEFAULT returns an unmodifiable list
decoderInfos = new ArrayList<>(decoderInfos);
Collections.reverse(decoderInfos);
}
return decoderInfos;
}
});

exoPlayer = new ExoPlayer.Builder(holder.mVideoView.getContext(),rf).setLoadControl(loadControl).build();

holder.mVideoView.setPlayer(exoPlayer);
holder.mVideoView.setResizeMode(AspectRatioFrameLayout.RESIZE_MODE_ZOOM);
holder.mVideoView.setShutterBackgroundColor(Color.TRANSPARENT);
holder.mVideoView.setKeepContentOnPlayerReset(true);
exoPlayer.seekTo(0);
exoPlayer.setRepeatMode(Player.REPEAT_MODE_ONE);

mediaSource = new ProgressiveMediaSource.Factory(
new CacheDataSource.Factory()
.setCache(SimpleMediaPlayer.getInstance(mContext))
.setUpstreamDataSourceFactory(new DefaultHttpDataSource.Factory()
.setUserAgent(mContext.getString(R.string.app_name)))
.setFlags(CacheDataSource.FLAG_IGNORE_CACHE_ON_ERROR)
).createMediaSource(MediaItem.fromUri(videoItem.videoURL));

exoPlayer.addMediaSource(mediaSource);

exoPlayer.prepare();

exoPlayer.setPlayWhenReady(true);
exoPlayer.play();
```

### Expected result

All videos should play in portrait.

### Actual result

video sideways

### Media

Any native camera recorded video

### Bug Report

- [ ] You will email the zip file produced by `adb bugreport` to dev.exoplayer@gmail.com after filing this issue.

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.