https://github.com/xgfone/go-hls
An golang implementation of RFC8216 HLS.
https://github.com/xgfone/go-hls
hls http-live-streaming m3u8 rfc-8216 rfc8216 ts
Last synced: 4 months ago
JSON representation
An golang implementation of RFC8216 HLS.
- Host: GitHub
- URL: https://github.com/xgfone/go-hls
- Owner: xgfone
- License: apache-2.0
- Created: 2025-06-05T16:09:49.000Z (4 months ago)
- Default Branch: main
- Last Pushed: 2025-06-06T05:11:01.000Z (4 months ago)
- Last Synced: 2025-06-06T06:20:17.010Z (4 months ago)
- Topics: hls, http-live-streaming, m3u8, rfc-8216, rfc8216, ts
- Language: Go
- Homepage:
- Size: 25.4 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Golang RFC8216 HLS
[](https://github.com/xgfone/go-hls/actions/workflows/go.yml)
[](https://pkg.go.dev/github.com/xgfone/go-hls)
[](https://raw.githubusercontent.com/xgfone/go-hls/master/LICENSE)

An golang implementation of RFC8216 HLS.
## Install
```shell
$ go get -u github.com/xgfone/go-hls
```## PlayList Tags
- **Basic Tags** [RFC 8216, 4.3.1](https://datatracker.ietf.org/doc/html/rfc8216#section-4.3.1)
- [x] `#EXTM3U` [RFC 8216, 4.3.1.1](https://datatracker.ietf.org/doc/html/rfc8216#section-4.3.1.1)
- [x] `#EXT-X-VERSION` [RFC 8216, 4.3.1.2](https://datatracker.ietf.org/doc/html/rfc8216#section-4.3.1.2)
- **Media Segment Tags** [RFC 8216, 4.3.2](https://datatracker.ietf.org/doc/html/rfc8216#section-4.3.2)
- [x] `#EXTINF` [RFC 8216, 4.3.2.1](https://datatracker.ietf.org/doc/html/rfc8216#section-4.3.2.1)
- [x] `#EXT-X-BYTERANGE` [RFC 8216, 4.3.2.2](https://datatracker.ietf.org/doc/html/rfc8216#section-4.3.2.2)
- [x] `#EXT-X-DISCONTINUITY` [RFC 8216, 4.3.2.3](https://datatracker.ietf.org/doc/html/rfc8216#section-4.3.2.3)
- [x] `#EXT-X-KEY` [RFC 8216, 4.3.2.4](https://datatracker.ietf.org/doc/html/rfc8216#section-4.3.2.4)
- [x] `#EXT-X-MAP` [RFC 8216, 4.3.2.5](https://datatracker.ietf.org/doc/html/rfc8216#section-4.3.2.5)
- [x] `#EXT-X-PROGRAM-DATE-TIME` [RFC 8216, 4.3.2.6](https://datatracker.ietf.org/doc/html/rfc8216#section-4.3.2.6)
- [ ] `#EXT-X-DATERANGE` [RFC 8216, 4.3.2.7](https://datatracker.ietf.org/doc/html/rfc8216#section-4.3.2.7)
- **Media Playlist Tags** [RFC 8216, 4.3.3](https://datatracker.ietf.org/doc/html/rfc8216#section-4.3.3)
- [x] `#EXT-X-TARGETDURATION` [RFC 8216, 4.3.3.1](https://datatracker.ietf.org/doc/html/rfc8216#section-4.3.3.1)
- [x] `#EXT-X-MEDIA-SEQUENCE` [RFC 8216, 4.3.3.2](https://datatracker.ietf.org/doc/html/rfc8216#section-4.3.3.2)
- [x] `#EXT-X-DISCONTINUITY-SEQUENCE` [RFC 8216, 4.3.3.3](https://datatracker.ietf.org/doc/html/rfc8216#section-4.3.3.3)
- [x] `#EXT-X-ENDLIST` [RFC 8216, 4.3.3.4](https://datatracker.ietf.org/doc/html/rfc8216#section-4.3.3.4)
- [x] `#EXT-X-PLAYLIST-TYPE` [RFC 8216, 4.3.3.5](https://datatracker.ietf.org/doc/html/rfc8216#section-4.3.3.5)
- [x] `#EXT-X-I-FRAMES-ONLY` [RFC 8216, 4.3.3.6](https://datatracker.ietf.org/doc/html/rfc8216#section-4.3.3.6)
- **Master Playlist Tags** [RFC 8216, 4.3.4](https://datatracker.ietf.org/doc/html/rfc8216#section-4.3.4)
- [x] `#EXT-X-MEDIA` [RFC 8216, 4.3.4.1](https://datatracker.ietf.org/doc/html/rfc8216#section-4.3.4.1)
- [x] `#EXT-X-STREAM-INF` [RFC 8216, 4.3.4.2](https://datatracker.ietf.org/doc/html/rfc8216#section-4.3.4.2)
- [x] `#EXT-X-I-FRAME-STREAM-INF` [RFC 8216, 4.3.4.3](https://datatracker.ietf.org/doc/html/rfc8216#section-4.3.4.3)
- [x] `#EXT-X-SESSION-DATA` [RFC 8216, 4.3.4.4](https://datatracker.ietf.org/doc/html/rfc8216#section-4.3.4.4)
- [x] `#EXT-X-SESSION-KEY` [RFC 8216, 4.3.4.5](https://datatracker.ietf.org/doc/html/rfc8216#section-4.3.4.5)
- **Media or Master Playlist Tags** [RFC 8216, 4.3.5](https://datatracker.ietf.org/doc/html/rfc8216#section-4.3.5)
- [x] `#EXT-X-INDEPENDENT-SEGMENTS` [RFC 8216, 4.3.5.1](https://datatracker.ietf.org/doc/html/rfc8216#section-4.3.5.1)
- [x] `#EXT-X-START` [RFC 8216, 4.3.5.2](https://datatracker.ietf.org/doc/html/rfc8216#section-4.3.5.2)### Difference with RFC8216 for `#EXT-X-KEY`
When a key in one `KEYFORMAT` is updated or overwritten, all keys in other `KEYFORMAT`s must be updated simultaneously.