owncast/video/storageproviders/rewriteLocalPlaylist.go

44 lines
1.1 KiB
Go
Raw Normal View History

package storageproviders
import (
"bufio"
"os"
"path/filepath"
"github.com/grafov/m3u8"
2023-06-16 03:11:44 +03:00
"github.com/owncast/owncast/services/config"
playlist "github.com/owncast/owncast/video/playlists"
log "github.com/sirupsen/logrus"
)
// rewritePlaylistLocations will take a local playlist and rewrite it to have absolute URLs to a specified location.
func rewritePlaylistLocations(localFilePath, remoteServingEndpoint, pathPrefix string) error {
f, err := os.Open(localFilePath) // nolint
if err != nil {
log.Fatalln(err)
}
p := m3u8.NewMasterPlaylist()
if err := p.DecodeFrom(bufio.NewReader(f), false); err != nil {
log.Warnln(err)
}
for _, item := range p.Variants {
// Determine the final path to this playlist.
var finalPath string
if pathPrefix != "" {
finalPath = filepath.Join(pathPrefix, "/hls")
} else {
finalPath = "/hls"
}
item.URI = remoteServingEndpoint + filepath.Join(finalPath, item.URI)
}
2023-07-22 08:25:59 +03:00
c := config.Get()
2023-06-16 03:11:44 +03:00
publicPath := filepath.Join(c.HLSStoragePath, filepath.Base(localFilePath))
newPlaylist := p.String()
return playlist.WritePlaylist(newPlaylist, publicPath)
}