Ramiro de Zavalia преди 5 години
родител
ревизия
26cc96fabf
променени са 1 файла, в които са добавени 88 реда и са изтрити 0 реда
  1. 88
    0
      main.go

+ 88
- 0
main.go Целия файл

@@ -0,0 +1,88 @@
package main

import "fmt"
import "os"
import "github.com/grafov/m3u8"
import "bufio"
import "encoding/json"
import "net/url"
import "net/http"
import "flag"
import "log"
import "strings"
import "path"

const baseScheme = "http"

type m3u8Json struct {
master *m3u8.MasterPlaylist
playlist []*m3u8.MediaPlaylist
}

func main() {
isUrl := false
var data *bufio.Reader
var baseUrl string
var outputJson m3u8Json
flag.Parse()
inputs := flag.Args()
if len(inputs) != 1 {
log.Fatal("Only 1 input is allowed")
}

input := inputs[0]
u, err := url.Parse(input)
if err != nil {
log.Fatal("not a valid URL")
}

if strings.Contains(u.Scheme, baseScheme) {
isUrl = true
}

if ! isUrl {
f, err := os.Open("playlist.m3u8")
if err!= nil {
log.Fatal(err)
}
fmt.Println("ok")
data = bufio.NewReader(f)
fmt.Println("ok2")
} else {
baseUrl = fmt.Sprintf("%v://%v%v",u.Scheme,u.Host,path.Dir(u.EscapedPath()))
r, err := http.Get(u.String())
if err != nil {
log.Fatal(err)
}
data = bufio.NewReader(r.Body)
}

p, listType, err := m3u8.DecodeFrom(data, true)
if err != nil {
log.Fatal(err)
}
switch listType {
case m3u8.MEDIA:
mediapl := p.(*m3u8.MediaPlaylist)
fmt.Printf("%+v\n", mediapl)
output, err := json.MarshalIndent(mediapl,""," ")
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s",output)
case m3u8.MASTER:
outputJson.master = p.(*m3u8.MasterPlaylist)
fmt.Printf("%+v\n", outputJson.master)
for _, entry := range outputJson.master.Variants {
fmt.Println(entry.Resolution)
if isUrl {
fmt.Printf("%v/%v\n",baseUrl,entry.URI)
}
}
output, err := json.MarshalIndent(outputJson.master,""," ")
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s",output)
}
}

Loading…
Отказ
Запис