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

Feature 1 Feature 2 Landscape

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 (Future
  • abrEnabled (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.dart contains 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_overflow_menu_item
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