#hls #m3u #parse #parser #extm3u

hls-playlist

一个用于序列化和反序列化 HLS 播放列表(即扩展 M3U 播放列表)的库。

2 个不稳定版本

0.2.0 2024年6月26日
0.1.0 2024年5月21日

#705解析器实现

每月27次下载

Apache-2.0

150KB
3K SLoC

HLS 播放列表

一个用于序列化和反序列化 HLS 播放列表(即扩展 M3U 播放列表)的库。

遵循 RFC 8216 的此更新版本

用法

播放列表

use hls_playlist::playlist::{MediaPlaylist, MediaSegment};
use hls_playlist::{FloatOrInteger};

let playlist = MediaPlaylist {
    segments: vec![
        MediaSegment {
            uri: "https://example.com/1.mp4".into(),
            duration_seconds: FloatOrInteger::Float(5.5),
            title: String::new(),
            byte_range_or_bitrate: None,
            is_discontinuity: false,
            encryption: None,
            media_initialization_section: None,
            absolute_time: None,
            is_gap: false,
            parts: vec![]
        }
    ],
    ..MediaPlaylist::default()
};

let mut output = Vec::new();
playlist.serialize(&mut output).unwrap();

assert_eq!(String::from_utf8(output).unwrap(), "#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:0
#EXTINF:5.5
https://example.com/1.mp4
");

标签

use hls_playlist::tags::Tag;

let mut output = vec![];

Tag::M3u.serialize(&mut output).unwrap();
Tag::XStart { offset_seconds: 10.0, is_precise: false }.serialize(&mut output).unwrap();

assert_eq!(String::from_utf8(output).unwrap(), "#EXTM3U
#EXT-X-START:TIME-OFFSET=10
");

特性

  • steering-manifest: 启用序列化和反序列化引导清单的支持。

路线图

就序列化而言,这个库已经100%完成,功能齐全。我打算在将来某个时候实现反序列化。

  • 序列化引导清单
  • 序列化标签
  • 序列化播放列表
  • 反序列化引导清单
  • 反序列化标签
  • 反序列化播放列表

依赖关系

~1–1.5MB
~25K SLoC