From bd8995799beeba00e1d10f843f7095fc9a1f7f4f Mon Sep 17 00:00:00 2001 From: "yying.jin" Date: Wed, 19 Aug 2026 16:46:21 +0800 Subject: [PATCH 1/2] add setAbr property for HLS --- packages/video_player_avplay/CHANGELOG.md | 5 +++++ packages/video_player_avplay/README.md | 2 +- packages/video_player_avplay/example/lib/main.dart | 13 ++++++++++++- .../lib/src/video_player_tizen.dart | 1 + packages/video_player_avplay/lib/video_player.dart | 9 ++++++++- .../lib/video_player_platform_interface.dart | 10 ++++++++++ packages/video_player_avplay/pubspec.yaml | 2 +- 7 files changed, 38 insertions(+), 4 deletions(-) diff --git a/packages/video_player_avplay/CHANGELOG.md b/packages/video_player_avplay/CHANGELOG.md index c2a649203..74b45c9f1 100644 --- a/packages/video_player_avplay/CHANGELOG.md +++ b/packages/video_player_avplay/CHANGELOG.md @@ -1,3 +1,8 @@ +## 0.8.15 + +* Added `setAbr` property to disable adaptive bitrate switching for HLS streams. +* HLS fixed bitrate now supported via `STARTBITRATE + SET_ABR` combination. + ## 0.8.14 * Update plusplayer diff --git a/packages/video_player_avplay/README.md b/packages/video_player_avplay/README.md index eb6dc74b3..0c18c203b 100644 --- a/packages/video_player_avplay/README.md +++ b/packages/video_player_avplay/README.md @@ -12,7 +12,7 @@ To use this package, add `video_player_avplay` as a dependency in your `pubspec. ```yaml dependencies: - video_player_avplay: ^0.8.14 + video_player_avplay: ^0.8.15 ``` Then you can import `video_player_avplay` in your Dart code: diff --git a/packages/video_player_avplay/example/lib/main.dart b/packages/video_player_avplay/example/lib/main.dart index 68caaea5c..99776e9bf 100644 --- a/packages/video_player_avplay/example/lib/main.dart +++ b/packages/video_player_avplay/example/lib/main.dart @@ -69,12 +69,19 @@ class _HlsRomoteVideo extends StatefulWidget { class _HlsRomoteVideoState extends State<_HlsRomoteVideo> { late VideoPlayerController _controller; + // Optional + final Map _streamingProperties = + { + StreamingPropertyType.adaptiveInfo: 'STARTBITRATE=460560', + StreamingPropertyType.setAbr: '0', + }; @override void initState() { super.initState(); _controller = VideoPlayerController.network( 'https://test-streams.mux.dev/x36xhzz/x36xhzz.m3u8', + streamingProperty: _streamingProperties, ); _controller.addListener(() { @@ -84,7 +91,11 @@ class _HlsRomoteVideoState extends State<_HlsRomoteVideo> { setState(() {}); }); _controller.setLooping(true); - _controller.initialize().then((_) => setState(() {})); + _controller.initialize().then((_) { + setState(() {}); + // Optional + _controller.getActiveTrackInfo(); + }); _controller.play(); } diff --git a/packages/video_player_avplay/lib/src/video_player_tizen.dart b/packages/video_player_avplay/lib/src/video_player_tizen.dart index 9b68a50ff..6114b2a61 100644 --- a/packages/video_player_avplay/lib/src/video_player_tizen.dart +++ b/packages/video_player_avplay/lib/src/video_player_tizen.dart @@ -527,6 +527,7 @@ class VideoPlayerTizen extends VideoPlayerPlatform { StreamingPropertyType.dashToken: 'TOKEN', StreamingPropertyType.openHttpHeader: 'OPEN_HTTP_HEADER', StreamingPropertyType.openManifest: 'OPEN_MANIFEST', + StreamingPropertyType.setAbr: 'SET_ABR', }; static const Map _bufferConfigTypeMap = diff --git a/packages/video_player_avplay/lib/video_player.dart b/packages/video_player_avplay/lib/video_player.dart index 1a9d2e38b..6568b4d19 100644 --- a/packages/video_player_avplay/lib/video_player.dart +++ b/packages/video_player_avplay/lib/video_player.dart @@ -1095,7 +1095,14 @@ class VideoPlayerController extends ValueNotifier { return []; } - return _videoPlayerPlatform.getActiveTrackInfo(playerId); + final Future> activeTracks = + _videoPlayerPlatform.getActiveTrackInfo(playerId); + await activeTracks.then((List result) { + // ignore: avoid_print + print('[getActiveTrackInfo()] result: $result'); + }); + + return activeTracks; } /// Sets the playback speed of [this]. diff --git a/packages/video_player_avplay/lib/video_player_platform_interface.dart b/packages/video_player_avplay/lib/video_player_platform_interface.dart index d6a4594f9..ca76d433a 100644 --- a/packages/video_player_avplay/lib/video_player_platform_interface.dart +++ b/packages/video_player_avplay/lib/video_player_platform_interface.dart @@ -423,6 +423,16 @@ enum StreamingPropertyType { /// /// To control is force enable if can get manifest content callback. 'TRUE' or others. openManifest, + + /// Controls adaptive bitrate switching for HLS stream. + /// * '0': Disables adaptive bitrate switching. Playback stays at the initially + /// selected bitrate regardless of network conditions. + /// * '1': Enables adaptive bitrate switching (default). Player dynamically + /// selects bitrate based on available network bandwidth. + /// + /// Typically used with adaptiveInfo-STARTBITRATE to lock playback at a specific bitrate. + /// Example: {adaptiveInfo: 'STARTBITRATE=460560', setAbr: '0'} locks playback at 460560 bps. + setAbr, } /// The different types of buffer configurations that can be set on the player. diff --git a/packages/video_player_avplay/pubspec.yaml b/packages/video_player_avplay/pubspec.yaml index e26f05c5a..3d3c4bf2f 100644 --- a/packages/video_player_avplay/pubspec.yaml +++ b/packages/video_player_avplay/pubspec.yaml @@ -2,7 +2,7 @@ name: video_player_avplay description: Flutter plugin for displaying inline video on Tizen TV devices. homepage: https://github.com/flutter-tizen/plugins repository: https://github.com/flutter-tizen/plugins/tree/master/packages/video_player_avplay -version: 0.8.14 +version: 0.8.15 environment: sdk: ">=3.1.0 <4.0.0" From e67ce84393a474ea261a081f017c9e5e46ae4657 Mon Sep 17 00:00:00 2001 From: "yying.jin" Date: Thu, 20 Aug 2026 09:13:59 +0800 Subject: [PATCH 2/2] Removed logging from the Dart public API --- packages/video_player_avplay/CHANGELOG.md | 1 + .../video_player_avplay/example/lib/main.dart | 6 ++- .../video_player_avplay/lib/video_player.dart | 38 +++++-------------- 3 files changed, 15 insertions(+), 30 deletions(-) diff --git a/packages/video_player_avplay/CHANGELOG.md b/packages/video_player_avplay/CHANGELOG.md index 74b45c9f1..c23dbe3be 100644 --- a/packages/video_player_avplay/CHANGELOG.md +++ b/packages/video_player_avplay/CHANGELOG.md @@ -2,6 +2,7 @@ * Added `setAbr` property to disable adaptive bitrate switching for HLS streams. * HLS fixed bitrate now supported via `STARTBITRATE + SET_ABR` combination. +* Removed logging from the Dart public API. ## 0.8.14 diff --git a/packages/video_player_avplay/example/lib/main.dart b/packages/video_player_avplay/example/lib/main.dart index 99776e9bf..1fd1c50a6 100644 --- a/packages/video_player_avplay/example/lib/main.dart +++ b/packages/video_player_avplay/example/lib/main.dart @@ -91,10 +91,11 @@ class _HlsRomoteVideoState extends State<_HlsRomoteVideo> { setState(() {}); }); _controller.setLooping(true); - _controller.initialize().then((_) { + _controller.initialize().then((_) async { setState(() {}); // Optional - _controller.getActiveTrackInfo(); + final List activateTracks = await _controller.getActiveTrackInfo(); + print('[getActivateTrackInfo()] result: $activateTracks'); }); _controller.play(); } @@ -184,6 +185,7 @@ class _DashRomoteVideoState extends State<_DashRomoteVideo> { _controller .getStreamingProperty(StreamingPropertyType.subtitleStreamInfo); _controller.getStreamingProperty(StreamingPropertyType.videoStreamInfo); + _controller.getData({DashPlayerProperty.httpHeader}); }); _controller.play(); diff --git a/packages/video_player_avplay/lib/video_player.dart b/packages/video_player_avplay/lib/video_player.dart index 6568b4d19..7dac8901f 100644 --- a/packages/video_player_avplay/lib/video_player.dart +++ b/packages/video_player_avplay/lib/video_player.dart @@ -921,14 +921,7 @@ class VideoPlayerController extends ValueNotifier { return ''; } - final Future streamingProperty = - _videoPlayerPlatform.getStreamingProperty(_playerId, type); - await streamingProperty.then((String result) { - // ignore: avoid_print - print('[getStreamingProperty()] type: $type, result: $result'); - }); - - return streamingProperty; + return _videoPlayerPlatform.getStreamingProperty(_playerId, type); } /// Sets specific feature values for HTTP, MMS, or specific streaming engine (Smooth Streaming, HLS, DASH, DivX Plus Streaming, or Widevine). @@ -1049,14 +1042,7 @@ class VideoPlayerController extends ValueNotifier { return {}; } - final Future> data = - _videoPlayerPlatform.getData(playerId, keys); - await data.then((Object result) { - // ignore: avoid_print - print('[getData()] result: \n$result'); - }); - - return data; + return _videoPlayerPlatform.getData(playerId, keys); } /// Updates the authentication token for the current DASH video stream. @@ -1095,14 +1081,7 @@ class VideoPlayerController extends ValueNotifier { return []; } - final Future> activeTracks = - _videoPlayerPlatform.getActiveTrackInfo(playerId); - await activeTracks.then((List result) { - // ignore: avoid_print - print('[getActiveTrackInfo()] result: $result'); - }); - - return activeTracks; + return _videoPlayerPlatform.getActiveTrackInfo(playerId); } /// Sets the playback speed of [this]. @@ -1634,10 +1613,13 @@ class ClosedCaption extends StatelessWidget { width: pictureCaption.pictureWidth, height: pictureCaption.pictureHeight, errorBuilder: (BuildContext context, Object error, StackTrace? stackTrace) { - // ignore: avoid_print - print('[ClosedCaption] Image.memory error: $error'); - // ignore: avoid_print - print('[ClosedCaption] StackTrace: $stackTrace'); + FlutterError.reportError( + FlutterErrorDetails( + exception: error, + stack: stackTrace, + context: ErrorDescription('while decoding a closed caption image'), + ), + ); return const Text(''); });