hls

package module
v1.1.7-0...-46021a1 Latest Latest
Warning

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

Go to latest
Published: Oct 13, 2020 License: MIT Imports: 24 Imported by: 0

README

介绍

该插件依赖github.com/Monibuca/plugin-ts

功能

  1. 该插件可用来拉取网络上的m3u8文件并解析后转换成其他协议
  2. 该插件可以在服务器写HLS文件,配合nginx等可以提供HLS的服务
  3. 配合gateway插件可以直接访问http://localhost:8081/hls/live/user1.m3u8 进行播放,其中8081端口是gateway插件配置的,live/user1是streamPath,需要根据实际情况修改

配置

[HLS]
EnableWrite = false
Fragment = 5
Window = 2
Path = "hls"

EnableWrite 用来控制是否启用HLS文件写入功能

使用方法

  1. 创建HLS结构体实例
  2. 设置该对象的Video.Req和Audio.Req属性(用于请求m3u8文件)没有audio单独的m3u8可不设置Audio.Req属性
  3. 调用对象的Publish方法,传入流名称和上级publisher,如果没有就传本对象
  4. 使用UI界面,点击拉流转发,可以将一个远程的hls流拉入服务器中,配置StreamPath用于从服务器中播放这个流。

如果拉取远程ts文件需要cookie或者http的验证,可以将验证头设置到HLS对象的TsHead属性中。

import 	. "github.com/Monibuca/plugin-ts"
func demo(){
    p:=new(HLS)
    p.Video.Req = http.NewRequest("GET","http://xxxx.com/demo.m3u8", nil)
    p.Publish("live/hls")
}

Documentation

Index

Constants

View Source
const APPKEY string = "6f0a0539"

APPKEY 此处替换成申请的appkey

View Source
const BASEMETHOD string = "/webapi/service"

BASEMETHOD 基本方法

View Source
const HKM3U8URLB string = "/1/live.m3u8"

HKM3U8URLB 海康m3u8url后半段

View Source
const HKM3U8URLF string = "http://172.16.104.2:6713/mag/hls/"

HKM3U8URLF 海康m3u8url前半段

View Source
const (
	HLS_KEY_METHOD_AES_128 = "AES-128"
)
View Source
const HOST string = "http://111.30.79.44:90"

HOST 此处替换成平台SDK所在服务器IP与端口

View Source
const METHOD string = "/vss/getPlatCameraResListByUnits"

METHOD 请求方法

View Source
const SECRET string = "6aabd44a437e4f9583b47d1ac090bb6d"

SECRET 此处替换成申请的secret

Variables

This section is empty.

Functions

func BuildToken

func BuildToken(paramJSON string) string

BuildToken 建立token

func CreateMD5

func CreateMD5(sourceString string) string

CreateMD5 生成md5

func Get

func Get(url string) string

func GetPlatEncodeDeviceResListJSON

func GetPlatEncodeDeviceResListJSON() string

GetPlatEncodeDeviceResListJSON 获取摄像头编码信息JSON

func Post

func Post(url string, data interface{}, contentType string) string

发送POST请求 url: 请求地址 data: POST请求提交的数据 contentType: 请求体格式,如:application/json content: 请求放回的内容

Types

type DeviceInfo

type DeviceInfo struct {
	CameraName string `json:"cameraName"`
	SysCode    string `json:"sysCode"`
}

func GetDeviceList

func GetDeviceList() []*DeviceInfo

GetDeviceList 获取设备列表

type HLS

type HLS struct {
	TS
	HLSInfo
	TsHead      http.Header     //用于提供cookie等特殊身份的http头
	SaveContext context.Context //用来保存ts文件到服务器
}

HLS 发布者

func (*HLS) Publish

func (p *HLS) Publish(streamName string) (result bool)

type HLSInfo

type HLSInfo struct {
	Video  M3u8Info
	Audio  M3u8Info
	TSInfo *TSInfo
}

HLSInfo 可序列化信息,供控制台查看

type M3u8Info

type M3u8Info struct {
	Req       *http.Request `json:"-"`
	M3U8Count int           //一共拉取的m3u8文件数量
	TSCount   int           //一共拉取的ts文件数量
	LastM3u8  string        //最后一个m3u8文件内容
	M3u8Info  []TSCost      //每一个ts文件的消耗
}

M3u8Info m3u8文件的信息,用于拉取m3u8文件,和提供查询

type Playlist

type Playlist struct {
	ExtM3U         string      // indicates that the file is an Extended M3U [M3U] Playlist file. (4.3.3.1) -- 每个M3U文件第一行必须是这个tag.
	Version        int         // indicates the compatibility version of the Playlist file. (4.3.1.2) -- 协议版本号.
	Sequence       int         // indicates the Media Sequence Number of the first Media Segment that appears in a Playlist file. (4.3.3.2) -- 第一个媒体段的序列号.
	Targetduration int         // specifies the maximum Media Segment duration. (4.3.3.1) -- 每个视频分段最大的时长(单位秒).
	PlaylistType   int         // rovides mutability information about the Media Playlist file. (4.3.3.5) -- 提供关于PlayList的可变性的信息.
	Discontinuity  int         // indicates a discontinuity between theMedia Segment that follows it and the one that preceded it. (4.3.2.3) -- 该标签后边的媒体文件和之前的媒体文件之间的编码不连贯(即发生改变)(场景用于插播广告等等).
	Key            PlaylistKey // specifies how to decrypt them. (4.3.2.4) -- 解密媒体文件的必要信息(表示怎么对media segments进行解码).
	EndList        string      // indicates that no more Media Segments will be added to the Media Playlist file. (4.3.3.4) -- 标示没有更多媒体文件将会加入到播放列表中,它可能会出现在播放列表文件的任何地方,但是不能出现两次或以上.
	Inf            PlaylistInf // specifies the duration of a Media Segment. (4.3.2.1) -- 指定每个媒体段(ts)的持续时间.
}

以”#EXT“开头的表示一个”tag“,否则表示注释,直接忽略

func (*Playlist) GetInfCount

func (this *Playlist) GetInfCount(filename string) (num int, err error)

func (*Playlist) Init

func (this *Playlist) Init(filename string) (err error)

func (*Playlist) UpdateInf

func (this *Playlist) UpdateInf(filename string, tmpFilename string, inf PlaylistInf) (err error)

func (*Playlist) WriteInf

func (this *Playlist) WriteInf(filename string, inf PlaylistInf) (err error)

type PlaylistInf

type PlaylistInf struct {
	Duration float64
	Title    string
}

type PlaylistKey

type PlaylistKey struct {
	Method string // specifies the encryption method. (4.3.2.4)
	Uri    string // key url. (4.3.2.4)
	IV     string // key iv. (4.3.2.4)
}

type TSCost

type TSCost struct {
	DownloadCost int
	DecodeCost   int
	BufferLength int
}

TSCost ts文件拉取的消耗信息

Jump to

Keyboard shortcuts

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