From 15a82734dffb6406e1335d60ef4515f3686cb714 Mon Sep 17 00:00:00 2001 From: Iurii Mozharovskyi Date: Thu, 13 Jan 2022 19:27:03 +0200 Subject: [PATCH] [video_player] Duration fix --- packages/video_player/video_player/CHANGELOG.md | 4 ++++ .../video_player/ios/Classes/FLTVideoPlayerPlugin.m | 9 ++++++++- packages/video_player/video_player/pubspec.yaml | 2 +- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/packages/video_player/video_player/CHANGELOG.md b/packages/video_player/video_player/CHANGELOG.md index 9f23fd099c03..c7d681cc7c02 100644 --- a/packages/video_player/video_player/CHANGELOG.md +++ b/packages/video_player/video_player/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.2.12 + +* Fixes incorrect video duration for iOS + ## 2.2.11 * Removes dependency on `meta`. diff --git a/packages/video_player/video_player/ios/Classes/FLTVideoPlayerPlugin.m b/packages/video_player/video_player/ios/Classes/FLTVideoPlayerPlugin.m index b581cd8b7b5e..4165f66d3f52 100644 --- a/packages/video_player/video_player/ios/Classes/FLTVideoPlayerPlugin.m +++ b/packages/video_player/video_player/ios/Classes/FLTVideoPlayerPlugin.m @@ -375,7 +375,14 @@ - (int64_t)position { } - (int64_t)duration { - return FLTCMTimeToMillis([[_player currentItem] duration]); + // [[_player currentItem] duration] initially can return incorrect value kCMTimeIndefinite. + // In this case [self duration] returns TIME_UNSET, which breaks existing [self setupEventSinkIfReadyToPlay] logic. + // Bug is highly reproducible with iOS 12. + // + // [[[_player currentItem] asset] duration] fixes this issue. + // Also works correctly with live streams, which have kCMTimeIndefinite duration. + // Related issue https://openradar.appspot.com/radar?id=4968600712511488 + return FLTCMTimeToMillis([[[_player currentItem] asset] duration]); } - (void)seekTo:(int)location { diff --git a/packages/video_player/video_player/pubspec.yaml b/packages/video_player/video_player/pubspec.yaml index 0eb7a4ed41df..e725db74509c 100644 --- a/packages/video_player/video_player/pubspec.yaml +++ b/packages/video_player/video_player/pubspec.yaml @@ -3,7 +3,7 @@ description: Flutter plugin for displaying inline video with other Flutter widgets on Android, iOS, and web. repository: https://github.com/flutter/plugins/tree/master/packages/video_player/video_player issue_tracker: https://github.com/flutter/flutter/issues?q=is%3Aissue+is%3Aopen+label%3A%22p%3A+video_player%22 -version: 2.2.11 +version: 2.2.12 environment: sdk: ">=2.14.0 <3.0.0"