From e42795a36ab744b0b939a4f5d173a923072789a9 Mon Sep 17 00:00:00 2001 From: swi-oberhauser Date: Mon, 3 Feb 2025 17:08:10 +0100 Subject: [PATCH 1/5] fix(video_player): Correct mechanism to detect identifier / header in WebVTT captions --- .../video_player/lib/src/web_vtt.dart | 5 ++-- .../video_player/test/web_vtt_test.dart | 23 +++++++++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/packages/video_player/video_player/lib/src/web_vtt.dart b/packages/video_player/video_player/lib/src/web_vtt.dart index 5527e62b69f..9f6a7452721 100644 --- a/packages/video_player/video_player/lib/src/web_vtt.dart +++ b/packages/video_player/video_player/lib/src/web_vtt.dart @@ -49,8 +49,9 @@ List _parseCaptionsFromWebVTTString(String file) { continue; } - // Caption has header - final bool hasHeader = captionLines.length > 2; + // Caption has header / identifier + // See: https://www.w3.org/TR/webvtt1/#webvtt-cue-identifier for valid cue identifier + final bool hasHeader = !captionLines[0].contains(_webVTTArrow); if (hasHeader) { final int? tryParseCaptionNumber = int.tryParse(captionLines[0]); if (tryParseCaptionNumber != null) { diff --git a/packages/video_player/video_player/test/web_vtt_test.dart b/packages/video_player/video_player/test/web_vtt_test.dart index dac6f49e319..d09dd5fe3c0 100644 --- a/packages/video_player/video_player/test/web_vtt_test.dart +++ b/packages/video_player/video_player/test/web_vtt_test.dart @@ -24,6 +24,20 @@ void main() { parsedFile = WebVTTCaptionFile(_valid_vtt_with_multiline); expect(parsedFile.captions.length, 1); + expect(parsedFile.captions[0].number, 2); + expect(parsedFile.captions[0].start, + const Duration(seconds: 2, milliseconds: 800)); + expect(parsedFile.captions[0].end, + const Duration(seconds: 3, milliseconds: 283)); + expect(parsedFile.captions[0].text, + '— It will perforate your stomach.\n— You could die.'); + }); + + test('with Multiline without identifier', () { + parsedFile = WebVTTCaptionFile(_valid_vtt_with_multiline_without_identifier); + expect(parsedFile.captions.length, 1); + + expect(parsedFile.captions[0].number, 1); expect(parsedFile.captions[0].start, const Duration(seconds: 2, milliseconds: 800)); expect(parsedFile.captions[0].end, @@ -147,6 +161,15 @@ WEBVTT '''; +const String _valid_vtt_with_multiline_without_identifier = ''' +WEBVTT + +00:02.800 --> 00:03.283 +— It will perforate your stomach. +— You could die. + +'''; + /// See https://www.w3.org/TR/webvtt1/#styling const String _valid_vtt_with_styles = ''' WEBVTT From 5b708f97131d9c2a8e4581132ed7343c4faac78b Mon Sep 17 00:00:00 2001 From: swi-oberhauser Date: Mon, 3 Feb 2025 17:16:25 +0100 Subject: [PATCH 2/5] update changelog --- packages/video_player/video_player/CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/video_player/video_player/CHANGELOG.md b/packages/video_player/video_player/CHANGELOG.md index 22a4bc0ed80..f25686c5622 100644 --- a/packages/video_player/video_player/CHANGELOG.md +++ b/packages/video_player/video_player/CHANGELOG.md @@ -1,6 +1,7 @@ ## NEXT * Updates minimum supported SDK version to Flutter 3.22/Dart 3.4. +* Fix mechanism to detect identifier in multiline WebVTT captions. ## 2.9.2 From 535dc3b6ab467392ce8b21362988a3fdc0f4f08f Mon Sep 17 00:00:00 2001 From: swi-oberhauser Date: Wed, 5 Feb 2025 17:07:13 +0100 Subject: [PATCH 3/5] update version --- packages/video_player/video_player/CHANGELOG.md | 4 ++-- packages/video_player/video_player/pubspec.yaml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/video_player/video_player/CHANGELOG.md b/packages/video_player/video_player/CHANGELOG.md index f25686c5622..292fd7328e8 100644 --- a/packages/video_player/video_player/CHANGELOG.md +++ b/packages/video_player/video_player/CHANGELOG.md @@ -1,7 +1,7 @@ -## NEXT +## 2.9.3 * Updates minimum supported SDK version to Flutter 3.22/Dart 3.4. -* Fix mechanism to detect identifier in multiline WebVTT captions. +* Fixes mechanism to detect identifier in multiline WebVTT captions. ## 2.9.2 diff --git a/packages/video_player/video_player/pubspec.yaml b/packages/video_player/video_player/pubspec.yaml index 525d8c27497..7c5e7980db4 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/packages/tree/main/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.9.2 +version: 2.9.3 environment: sdk: ^3.4.0 From 7737fdb6b3d636cba81a771862b47968fb7bb6a2 Mon Sep 17 00:00:00 2001 From: swi-oberhauser Date: Thu, 6 Feb 2025 13:29:35 +0100 Subject: [PATCH 4/5] format --- packages/video_player/video_player/test/web_vtt_test.dart | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/video_player/video_player/test/web_vtt_test.dart b/packages/video_player/video_player/test/web_vtt_test.dart index d09dd5fe3c0..8a356387942 100644 --- a/packages/video_player/video_player/test/web_vtt_test.dart +++ b/packages/video_player/video_player/test/web_vtt_test.dart @@ -34,7 +34,8 @@ void main() { }); test('with Multiline without identifier', () { - parsedFile = WebVTTCaptionFile(_valid_vtt_with_multiline_without_identifier); + parsedFile = + WebVTTCaptionFile(_valid_vtt_with_multiline_without_identifier); expect(parsedFile.captions.length, 1); expect(parsedFile.captions[0].number, 1); From 4cb084e178089484dc55bba15e099f3f8a57d2bc Mon Sep 17 00:00:00 2001 From: swi-oberhauser Date: Thu, 6 Feb 2025 20:26:57 +0100 Subject: [PATCH 5/5] typo --- packages/video_player/video_player/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/video_player/video_player/CHANGELOG.md b/packages/video_player/video_player/CHANGELOG.md index 292fd7328e8..9892265b485 100644 --- a/packages/video_player/video_player/CHANGELOG.md +++ b/packages/video_player/video_player/CHANGELOG.md @@ -1,7 +1,7 @@ ## 2.9.3 * Updates minimum supported SDK version to Flutter 3.22/Dart 3.4. -* Fixes mechanism to detect identifier in multiline WebVTT captions. +* Fixes mechanism to detect identifier in multi-line WebVTT captions. ## 2.9.2