diff --git a/android/src/main/java/com/brentvatne/common/api/VideoTrack.kt b/android/src/main/java/com/brentvatne/common/api/VideoTrack.kt index 6556414b..46dd2e54 100644 --- a/android/src/main/java/com/brentvatne/common/api/VideoTrack.kt +++ b/android/src/main/java/com/brentvatne/common/api/VideoTrack.kt @@ -12,4 +12,5 @@ class VideoTrack { var index = -1 var trackId = "" var isSelected = false + var rotation = 0 } diff --git a/android/src/main/java/com/brentvatne/common/react/VideoEventEmitter.java b/android/src/main/java/com/brentvatne/common/react/VideoEventEmitter.java index f923cf9f..0f163b25 100644 --- a/android/src/main/java/com/brentvatne/common/react/VideoEventEmitter.java +++ b/android/src/main/java/com/brentvatne/common/react/VideoEventEmitter.java @@ -223,6 +223,7 @@ public class VideoEventEmitter { videoTrack.putString("trackId", vTrack.getTrackId()); videoTrack.putInt("index", vTrack.getIndex()); videoTrack.putBoolean("selected", vTrack.isSelected()); + videoTrack.putInt("rotation", vTrack.getRotation()); waVideoTracks.pushMap(videoTrack); } } diff --git a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java index 069cc1bc..7e5dc6bf 100644 --- a/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java +++ b/android/src/main/java/com/brentvatne/exoplayer/ReactExoplayerView.java @@ -1375,8 +1375,9 @@ public class ReactExoplayerView extends FrameLayout implements setSelectedTextTrack(textTrackType, textTrackValue); } Format videoFormat = player.getVideoFormat(); - int width = videoFormat != null ? videoFormat.width : 0; - int height = videoFormat != null ? videoFormat.height : 0; + boolean isRotatedContent = videoFormat != null && (videoFormat.rotationDegrees == 90 || videoFormat.rotationDegrees == 270); + int width = videoFormat != null ? (isRotatedContent ? videoFormat.height : videoFormat.width) : 0; + int height = videoFormat != null ? (isRotatedContent ? videoFormat.width : videoFormat.height) : 0; String trackId = videoFormat != null ? videoFormat.id : "-1"; // Properties that must be accessed on the main thread @@ -1444,6 +1445,7 @@ public class ReactExoplayerView extends FrameLayout implements videoTrack.setWidth(format.width == Format.NO_VALUE ? 0 : format.width); videoTrack.setHeight(format.height == Format.NO_VALUE ? 0 : format.height); videoTrack.setBitrate(format.bitrate == Format.NO_VALUE ? 0 : format.bitrate); + videoTrack.setRotation(format.rotationDegrees); if (format.codecs != null) videoTrack.setCodecs(format.codecs); videoTrack.setTrackId(format.id == null ? String.valueOf(trackIndex) : format.id); videoTrack.setIndex(trackIndex); diff --git a/docs/pages/component/events.mdx b/docs/pages/component/events.mdx index 4307ee41..71354757 100644 --- a/docs/pages/component/events.mdx +++ b/docs/pages/component/events.mdx @@ -548,15 +548,16 @@ Callback function that is called when video tracks change Payload: -| Property | Type | Description | -| -------- | ------- | ------------------------------------- | -| index | number | index of the track | -| trackId | string | Internal track ID | -| codecs | string | MimeType of codec used for this track | -| width | number | Track width | -| height | number | Track height | -| bitrate | number | Bitrate in bps | -| selected | boolean | true if track is selected for playing | +| Property | Type | Description | +| -------- | ------- | --------------------------------------------------------------- | +| index | number | index of the track | +| trackId | string | Internal track ID | +| codecs | string | MimeType of codec used for this track | +| width | number | Track width | +| height | number | Track height | +| bitrate | number | Bitrate in bps | +| selected | boolean | true if track is selected for playing | +| rotation | number | 0, 90, 180 or 270 rotation to apply to the track (android only) | Example: @@ -571,6 +572,7 @@ Example: height: 1080, bitrate: 10000, selected: true, + rotation: 0, }, ]; }