Having issue with the aws-sdk-go-v2 on GetHLSStreamingSessionURL

Viewed 33

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

0 Answers
Related