HLSのm3u8ファイルをパースするdart pluginを作成しました

flutterでHLSのm3u8ファイルを扱うとき、現状では手ごろなパーサが見つからなかったのでpluginとして作成しました。

ストリーミングを再生せずメタデータだけ取得したい(解像度・ビットレート・tsファイルのurl...)場合に有用かと思います。

マニフェストファイル・プレイリストファイルともにパース可能です。

 

github.com

 

使い方

Uri playlistUri;
List<String> lines;
try {
  playList = await HlsPlaylistParser.create().parse(playlistUri, lines);
} on ParserException catch (e) {
  print(e);
}

if (playlist is HlsMasterPlaylist) {
  // master m3u8 file
} else if (playlist is HlsMediaPlaylist) {
  // media m3u8 file
}

 

マスターファイルのデータ例

HlsMasterPlaylist playlist;

playlist.variants[0].format.bitrate;// => 1280000
Util.splitCodec(playlist.variants[0].format.codecs);// => ['mp4a.40.2']['avc1.66.30']
playlist.variants[0].format.width;// => 304(px)
playlist.subtitles[0].format.id;// => sub1:Eng
playlist.audios[0].format.sampleMimeType// => MimeTypes.AUDIO_AC3

 

メディアファイルのデータ例

HlsMediaPlaylist playlist;

playlist.version;// => 3
playlist.hasEndTag;// => true
playlist.segments[0].durationUs;// => 7975000(microsec)
playlist.segments[0].encryptionIV;// => '0x1566B'
playlist.segments[0].drmInitData.schemeData[0].uuid;// => uuid string