I want to access the KVS archived streams on the front end. Instead of giving the IAM information to the front end, it would be more comfortable for me to generate the getHLSMasterPlaylist.m3u8 and then send it to the front end. When I tried to do that with GoLang, I failed at the very first step, which was getting the GetHLSStreamingSessionURL. Could someone help me and see what I did wrong? Or maybe I should switch to Python or JAVA instead?
Down below is the code I have.
package main
import (
"context"
"fmt"
"log"
"time"
"github.com/aws/aws-sdk-go-v2/aws"
"github.com/aws/aws-sdk-go-v2/config"
"github.com/aws/aws-sdk-go-v2/credentials"
"github.com/aws/aws-sdk-go-v2/service/kinesisvideoarchivedmedia"
"github.com/aws/aws-sdk-go-v2/service/kinesisvideoarchivedmedia/types"
)
const (
_region = "us-west-2"
_token = "ABCDEFGH"
_key = "ABCDEFGHIJKLMNOPQRST"
_streamName = "testStream"
_expires = 600
_maxFragments = 1000
_startUnixTime = 1657213200
_endUnixTime = 1657292400
)
func main() {
cfg2, err := config.LoadDefaultConfig(context.TODO() /* , config.WithRegion("us-west-2") */)
if err != nil {
log.Fatalf("unable to load SDK config, %v", err)
}
kvsClient := kinesisvideoarchivedmedia.NewFromConfig(cfg2, func(o *kinesisvideoarchivedmedia.Options) {
o.Region = _region
o.Credentials = aws.NewCredentialsCache(credentials.NewStaticCredentialsProvider(_token, _key, ""))
})
var startTime time.Time = time.Unix(_startUnixTime, 0)
var endTime time.Time = time.Unix(_endUnixTime, 0)
var expires int32 = _expires
var maxMediaPlaylistFragmentResults int64 = _maxFragments
var streamName = _streamName
output, err := kvsClient.GetHLSStreamingSessionURL(
context.TODO(),
/*Input*/
&kinesisvideoarchivedmedia.GetHLSStreamingSessionURLInput{
ContainerFormat: types.ContainerFormatFragmentedMp4,
DiscontinuityMode: types.HLSDiscontinuityModeOnDiscontinuity,
DisplayFragmentTimestamp: types.HLSDisplayFragmentTimestampAlways,
Expires: &expires,
HLSFragmentSelector: &types.HLSFragmentSelector{
FragmentSelectorType: types.HLSFragmentSelectorTypeProducerTimestamp,
TimestampRange: &types.HLSTimestampRange{
StartTimestamp: &startTime,
EndTimestamp: &endTime,
},
},
MaxMediaPlaylistFragmentResults: &maxMediaPlaylistFragmentResults,
PlaybackMode: types.HLSPlaybackModeOnDemand,
StreamName: &streamName,
},
)
if err != nil {
log.Fatalf("unable to getHLSStreamingSessionURL, %v", err)
}
fmt.Println("out.HLSStreamingSessionURL = ", output.HLSStreamingSessionURL)
}
The output would be:
out.HLSStreamingSessionURL = <nil>
The guide and the resource I followed are:
https://aws.github.io/aws-sdk-go-v2/docs/making-requests/
https://pkg.go.dev/github.com/aws/aws-sdk-go/service/kinesisvideoarchivedmedia