Convay Hls Player
Convay Hls Player is a Flutter plugin for playing HLS (HTTP Live Streaming) on Android and iOS using platform-native players. It offers a simple API with smooth, adaptive, and reliable playback across different network conditions, along with token refresh support for seamless live and on-demand streaming.
Features
- HLS Streaming: Plays HLS (m3u8) video streams.
- Token Authentication: Automatic token refresh for secure playlist access.
- Quality Selection: Manual quality/bitrate selection with adaptive bitrate support.
- Low Latency: Configured for low-latency streaming.
- Error Recovery: Automatic error handling and recovery for network and media errors.
- Customizable controls: Play, pause, fullscreen, mute, quality selection.
- Supports landscape and portrait mode.
- Works on iOS and Android.
Installation
Add the dependency in your pubspec.yaml:
dependencies:
convay_hls_player: latest_version
Run:
flutter pub get
Import the package:
import 'package:convay_hls_player/convay_hls_player.dart';
Example
Run the example app:
cd example
flutter run
Screenshots
Usage
Use the ConvayHlsPlayer widget:
import 'package:http/http.dart' as http;
import 'dart:convert';
ConvayHlsPlayer(
streamUrl: 'https://example.com/stream.m3u8',
tokenRefreshMethod: () async {
final response = await http.post(
Uri.parse(playlistAccessUrl),
headers: const {'Content-Type': 'application/json'},
body: jsonEncode({'stream_id': _streamId}),
);
// Parse response to extract token + expiration.
return const ConvayHlsToken(
playlistToken: 'your-token',
playlistExpiry: 1700000000,
);
},
abrEnabled: true,
isLive: true,
autoPlay: true,
)
Props
ConvayHlsPlayer supports the following properties:
streamUrl(String, required): HLS master playlist URL (m3u8).tokenRefreshMethod(FutureabrEnabled(bool, default: true): Enables adaptive bitrate and quality selection.playlistRefreshThreshold(int, default: 15): Seconds before expiry to refresh tokens.autoPlay(bool, default: true): Starts playback automatically.muted(bool, default: false): Starts the player muted.isLive(bool, default: false): Enables live-stream behavior (live edge handling).
Notes
lib/convay_hls_player.dartcontains the widget and refresh logic.- The Android and iOS player updates HLS tokens without interrupting playback.
Important Note
- Supports only m3u8 URLs for HLS streaming. Other formats are not supported.
- On iOS Simulators and Android Emulators, the player may not function correctly. Please use a physical device for accurate testing.
License
MIT License. See LICENSE for details.
Libraries
- better_player_plus/asms/better_player_asms_audio_track
- better_player_plus/asms/better_player_asms_data_holder
- better_player_plus/asms/better_player_asms_subtitle
- better_player_plus/asms/better_player_asms_subtitle_segment
- better_player_plus/asms/better_player_asms_track
- better_player_plus/asms/better_player_asms_utils
- better_player_plus/better_player_plus
- better_player_plus/clearkey/better_player_clearkey_utils
- better_player_plus/configuration/better_player_buffering_configuration
- better_player_plus/configuration/better_player_cache_configuration
- better_player_plus/configuration/better_player_configuration
- better_player_plus/configuration/better_player_controller_event
- better_player_plus/configuration/better_player_controls_configuration
- better_player_plus/configuration/better_player_data_source
- better_player_plus/configuration/better_player_data_source_type
- better_player_plus/configuration/better_player_drm_configuration
- better_player_plus/configuration/better_player_drm_type
- better_player_plus/configuration/better_player_event
- better_player_plus/configuration/better_player_event_type
- better_player_plus/configuration/better_player_notification_configuration
- better_player_plus/configuration/better_player_theme
- better_player_plus/configuration/better_player_translations
- better_player_plus/configuration/better_player_video_format
- better_player_plus/controls/better_player_clickable_widget
- better_player_plus/controls/better_player_controls_state
- better_player_plus/controls/better_player_cupertino_controls
- better_player_plus/controls/better_player_cupertino_progress_bar
- better_player_plus/controls/better_player_material_controls
- better_player_plus/controls/better_player_material_progress_bar
- better_player_plus/controls/better_player_multiple_gesture_detector
- better_player_plus/controls/better_player_progress_colors
- better_player_plus/core/better_player
- better_player_plus/core/better_player_controller
- better_player_plus/core/better_player_controller_provider
- better_player_plus/core/better_player_utils
- better_player_plus/core/better_player_with_controls
- better_player_plus/hls/better_player_hls_utils
- better_player_plus/hls/hls_parser/drm_init_data
- better_player_plus/hls/hls_parser/exception
- better_player_plus/hls/hls_parser/format
- better_player_plus/hls/hls_parser/hls_master_playlist
- better_player_plus/hls/hls_parser/hls_media_playlist
- better_player_plus/hls/hls_parser/hls_playlist_parser
- better_player_plus/hls/hls_parser/hls_track_metadata_entry
- better_player_plus/hls/hls_parser/metadata
- better_player_plus/hls/hls_parser/mime_types
- better_player_plus/hls/hls_parser/playlist
- better_player_plus/hls/hls_parser/rendition
- better_player_plus/hls/hls_parser/scheme_data
- better_player_plus/hls/hls_parser/segment
- better_player_plus/hls/hls_parser/util
- better_player_plus/hls/hls_parser/variant
- better_player_plus/hls/hls_parser/variant_info
- better_player_plus/list/better_player_list_video_player
- better_player_plus/list/better_player_list_video_player_controller
- better_player_plus/playlist/better_player_playlist
- better_player_plus/playlist/better_player_playlist_configuration
- better_player_plus/playlist/better_player_playlist_controller
- better_player_plus/subtitles/better_player_subtitle
- better_player_plus/subtitles/better_player_subtitles_configuration
- better_player_plus/subtitles/better_player_subtitles_drawer
- better_player_plus/subtitles/better_player_subtitles_factory
- better_player_plus/subtitles/better_player_subtitles_source
- better_player_plus/subtitles/better_player_subtitles_source_type
- better_player_plus/video_player/method_channel_video_player
- better_player_plus/video_player/video_player
- better_player_plus/video_player/video_player_platform_interface
- convay_hls_player
- proxy/local_hls_proxy
- proxy/local_hls_proxy_io
- proxy/local_hls_proxy_stub