owncast/playlistMonitor.go

68 lines
1.4 KiB
Go

package main
import (
"fmt"
"io/ioutil"
"log"
"path/filepath"
"time"
icore "github.com/ipfs/interface-go-ipfs-core"
"github.com/radovskyb/watcher"
)
var filesToUpload = make(map[string]string)
func monitorVideoContent(path string, ipfs *icore.CoreAPI) {
w := watcher.New()
go func() {
for {
select {
case event := <-w.Event:
if event.Op != watcher.Write {
continue
}
if filepath.Base(event.Path) == "temp.m3u8" {
for filePath, objectID := range filesToUpload {
if objectID != "" {
continue
}
newObjectPath := save("hls/"+filePath, ipfs)
fmt.Println(filePath, newObjectPath)
filesToUpload[filePath] = newObjectPath
}
playlistBytes, err := ioutil.ReadFile(event.Path)
verifyError(err)
playlistString := string(playlistBytes)
if false {
playlistString = generateRemotePlaylist(playlistString, filesToUpload)
}
writePlaylist(playlistString, "webroot/stream.m3u8")
} else if filepath.Ext(event.Path) == ".ts" {
filesToUpload[filepath.Base(event.Path)] = ""
// copy(event.Path, "webroot/"+filepath.Base(event.Path))
}
case err := <-w.Error:
log.Fatalln(err)
case <-w.Closed:
return
}
}
}()
// Watch this folder for changes.
if err := w.Add(path); err != nil {
log.Fatalln(err)
}
if err := w.Start(time.Millisecond * 100); err != nil {
log.Fatalln(err)
}
}