37 lines
882 B
Go
37 lines
882 B
Go
|
package storageproviders
|
||
|
|
||
|
import (
|
||
|
"bufio"
|
||
|
"os"
|
||
|
"path/filepath"
|
||
|
|
||
|
"github.com/grafov/m3u8"
|
||
|
"github.com/owncast/owncast/config"
|
||
|
"github.com/owncast/owncast/core/playlist"
|
||
|
|
||
|
log "github.com/sirupsen/logrus"
|
||
|
)
|
||
|
|
||
|
// rewriteRemotePlaylist will take a local playlist and rewrite it to have absolute URLs to remote locations.
|
||
|
func rewriteRemotePlaylist(localFilePath, remoteServingEndpoint 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 {
|
||
|
item.URI = remoteServingEndpoint + filepath.Join("/hls", item.URI)
|
||
|
}
|
||
|
|
||
|
publicPath := filepath.Join(config.HLSStoragePath, filepath.Base(localFilePath))
|
||
|
|
||
|
newPlaylist := p.String()
|
||
|
|
||
|
return playlist.WritePlaylist(newPlaylist, publicPath)
|
||
|
}
|