hlsdl

package module
v0.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 17, 2023 License: GPL-3.0 Imports: 22 Imported by: 0

README

HLS downloader

This is a library to support downloading a m3u8 file. All ts segments will be downloaded into a folder then be joined into a single TS file.

About this project

This project is forked from canhlinh/hlsdl and added some exported function for other program's usage

Exported functions / methods
  • ParseSegments function
  • Segment Decrypt method
  • Segment Download method

Features:

  • Concurrent download segments with multiple http connections
  • Decrypt hls encoded segments
  • Auto retry download
  • Display downloading progress bar
  • Record a live stream video
How to integrate this library to your code.

Get the library

go get github.com/liuminhaw/hlsdl

then import it to your code.

import "github.com/liuminhaw/hlsdl"

Sample:

package main

import (
	"fmt"

	"github.com/liuminhaw/hlsdl"
)

func main() {
	hlsDL := hlsdl.New("https://bitdash-a.akamaihd.net/content/sintel/hls/video/1500kbit.m3u8", nil, "download", 64, true, "")
	
	filepath, err := hlsDL.Download()
	if err != nil {
		panic(err)
	}

	fmt.Println(filepath)
}

How to build a console application

Build for linux

make build-linux

Build for windows

make build-windows

Run the application

./bin/hlsdl --help
./bin/hlsdl -u https://bitdash-a.akamaihd.net/content/sintel/hls/video/1500kbit.m3u8 -d download -w 10

example

Record a live stream video

./bin/hlsdl --url "http://cdn1.live-tv.od.ua:8081/bbb/bbbtv-abr/bbb/bbbtv-720p/chunks.m3u8?nimblesessionid=62115268" --record true

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type DownloadResult

type DownloadResult struct {
	Err   error
	SeqId uint64
}

type DownloadSegmentReport

type DownloadSegmentReport struct {
	Data []byte
	Err  error
}

type HlsDl

type HlsDl struct {
	// contains filtered or unexported fields
}

HlsDl present a HLS downloader

func New

func New(hlsURL string, headers map[string]string, dir string, workers int, enableBar bool, filename string) *HlsDl

func (*HlsDl) Download

func (hlsDl *HlsDl) Download() (string, error)

type Recorder

type Recorder struct {
	// contains filtered or unexported fields
}

func NewRecorder

func NewRecorder(url string, dir string) *Recorder

func (*Recorder) Start

func (r *Recorder) Start() (string, error)

Start starts a record a live streaming

type Segment

type Segment struct {
	*m3u8.MediaSegment
	Path string
	Data []byte
}

func ParseSegments

func ParseSegments(hlsURL string, headers map[string]string) ([]*Segment, error)

func (*Segment) Decrypt added in v0.2.0

func (s *Segment) Decrypt(headers map[string]string) ([]byte, error)

Decrypt given segment

func (*Segment) Download added in v0.2.0

func (s *Segment) Download(headers map[string]string) (int, error)

type SegmentPuller

type SegmentPuller struct {
	Segment *Segment
	Err     error
}

Directories

Path Synopsis
cmd

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL