github.com/muxinc/mux-go@v1.1.1/examples/video/assets/exercise-assets.go (about)

     1  package main
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  	"time"
     7  
     8  	muxgo "github.com/muxinc/mux-go"
     9  	"github.com/muxinc/mux-go/examples/common"
    10  )
    11  
    12  func main() {
    13  
    14  	// API Client Initialization
    15  	client := muxgo.NewAPIClient(
    16  		muxgo.NewConfiguration(
    17  			muxgo.WithBasicAuth(os.Getenv("MUX_TOKEN_ID"), os.Getenv("MUX_TOKEN_SECRET")),
    18  		))
    19  
    20  	// ========== create-asset ==========
    21  	asset, err := client.AssetsApi.CreateAsset(muxgo.CreateAssetRequest{
    22  		Input: []muxgo.InputSettings{
    23  			muxgo.InputSettings{
    24  				Url: "https://storage.googleapis.com/muxdemofiles/mux-video-intro.mp4",
    25  			},
    26  			muxgo.InputSettings{
    27  				Url:            "https://tears-of-steel-subtitles.s3.amazonaws.com/tears-fr.vtt",
    28  				TextType:       "subtitles",
    29  				Type:           "text",
    30  				LanguageCode:   "fr",
    31  				ClosedCaptions: false,
    32  				Name:           "French",
    33  			},
    34  		},
    35  		NormalizeAudio: true,
    36  	})
    37  	common.AssertNoError(err)
    38  	common.AssertNotNil(asset.Data)
    39  	fmt.Println("create-asset OK ✅")
    40  
    41  	// ========== list-assets ==========
    42  	lr, err := client.AssetsApi.ListAssets()
    43  	common.AssertNoError(err)
    44  	common.AssertNotNil(lr.Data)
    45  	common.AssertStringEqualsValue(asset.Data.Id, lr.Data[0].Id)
    46  	fmt.Println("list-assets OK ✅")
    47  
    48  	// Wait for the asset to become ready
    49  	if asset.Data.Status != "ready" {
    50  		fmt.Println("    Waiting for asset to become ready...")
    51  		for {
    52  			// ========== get-asset ==========
    53  			gr, err := client.AssetsApi.GetAsset(asset.Data.Id)
    54  			common.AssertNoError(err)
    55  			common.AssertNotNil(gr)
    56  			common.AssertStringEqualsValue(asset.Data.Id, gr.Data.Id)
    57  			if gr.Data.Status != "ready" {
    58  				fmt.Println("    Asset still not ready.")
    59  				time.Sleep(1 * time.Second)
    60  			} else {
    61  				// ========== get-asset-input-info ==========
    62  				ir, err := client.AssetsApi.GetAssetInputInfo(asset.Data.Id)
    63  				common.AssertNoError(err)
    64  				common.AssertNotNil(ir.Data)
    65  				break
    66  			}
    67  		}
    68  	}
    69  	fmt.Println("get-asset OK ✅")
    70  	fmt.Println("get-asset-input-info OK ✅")
    71  
    72  	// ========== clipping ==========
    73  	clipAsset, err := client.AssetsApi.CreateAsset(muxgo.CreateAssetRequest{
    74  		Input: []muxgo.InputSettings{
    75  			muxgo.InputSettings{
    76  				Url: "mux://assets/" + asset.Data.Id,
    77  				StartTime: 0,
    78  				EndTime: 5,
    79  			},
    80  		},
    81  	})
    82  	common.AssertNoError(err)
    83  	common.AssertNotNil(clipAsset.Data.Id)
    84  	fmt.Println("clipping OK ✅")
    85  
    86  	// ========== create-asset-playback-id ==========
    87  	capr := muxgo.CreatePlaybackIdRequest{muxgo.PUBLIC}
    88  	capre, err := client.AssetsApi.CreateAssetPlaybackId(asset.Data.Id, capr)
    89  	common.AssertNoError(err)
    90  	common.AssertNotNil(capre.Data)
    91  	common.AssertStringEqualsValue(string(capre.Data.Policy), "public")
    92  	fmt.Println("create-asset-playback-id OK ✅")
    93  
    94  	// ========== get-asset-playback-id ==========
    95  	pbre, err := client.AssetsApi.GetAssetPlaybackId(asset.Data.Id, capre.Data.Id)
    96  	common.AssertNoError(err)
    97  	common.AssertNotNil(pbre.Data)
    98  	common.AssertStringEqualsValue(capre.Data.Id, pbre.Data.Id)
    99  	fmt.Println("get-asset-playback-id OK ✅")
   100  
   101  	// ========== get-asset-or-livestream-id =========
   102  	playbackId := pbre.Data.Id
   103  	pbResp, err := client.PlaybackIDApi.GetAssetOrLivestreamId(playbackId)
   104  	common.AssertNoError(err)
   105  	common.AssertNotNil(pbResp.Data)
   106  	common.AssertStringEqualsValue(pbResp.Data.Object.Id, asset.Data.Id)
   107  	common.AssertStringEqualsValue(pbResp.Data.Object.Type, "asset")
   108  	fmt.Println("get-asset-or-livestream-id OK ✅")
   109  
   110  
   111  	// ========== update-asset-mp4-support ==========
   112  	mp4r := muxgo.UpdateAssetMp4SupportRequest{"standard"}
   113  	mp4, err := client.AssetsApi.UpdateAssetMp4Support(asset.Data.Id, mp4r)
   114  	common.AssertNoError(err)
   115  	common.AssertNotNil(mp4.Data)
   116  	common.AssertStringEqualsValue(asset.Data.Id, mp4.Data.Id)
   117  	common.AssertStringEqualsValue(mp4.Data.Mp4Support, "standard")
   118  	fmt.Println("update-asset-mp4-support OK ✅")
   119  
   120  	// ========== update-asset-master-access ==========
   121  	mr := muxgo.UpdateAssetMasterAccessRequest{"temporary"}
   122  	mas, err := client.AssetsApi.UpdateAssetMasterAccess(asset.Data.Id, mr)
   123  	common.AssertNoError(err)
   124  	common.AssertNotNil(mas.Data)
   125  	common.AssertStringEqualsValue(asset.Data.Id, mas.Data.Id)
   126  	common.AssertStringEqualsValue(mas.Data.MasterAccess, "temporary")
   127  	fmt.Println("update-asset-master-access OK ✅")
   128  
   129  	// ========== create-asset-track ==========
   130  	cat := muxgo.CreateTrackRequest{
   131  		Url:            "https://tears-of-steel-subtitles.s3.amazonaws.com/tears-en.vtt",
   132  		TextType:       "subtitles",
   133  		Type:           "text",
   134  		LanguageCode:   "en",
   135  		ClosedCaptions: false,
   136  		Name:           "English",
   137  	}
   138  	s, err := client.AssetsApi.CreateAssetTrack(asset.Data.Id, cat)
   139  	common.AssertNoError(err)
   140  	common.AssertNotNil(s.Data)
   141  	common.AssertNotNil(s.Data.Id)
   142  	common.AssertStringEqualsValue(s.Data.Name, "English")
   143  	a2s, err := client.AssetsApi.GetAsset(asset.Data.Id)
   144  	common.AssertIntEqualsValue(len(a2s.Data.Tracks), 4) // Audio, Video, French that we ingested with the asset, and the English we added here!
   145  	fmt.Println("create-asset-track OK ✅")
   146  
   147  	// ========== delete-asset-track ==========
   148  	err = client.AssetsApi.DeleteAssetTrack(asset.Data.Id, s.Data.Id)
   149  	common.AssertNoError(err)
   150  	a1s, err := client.AssetsApi.GetAsset(asset.Data.Id)
   151  	common.AssertIntEqualsValue(len(a1s.Data.Tracks), 3) // Audio, Video, French that we ingested with the asset
   152  	fmt.Println("delete-asset-track OK ✅")
   153  
   154  	// ========== delete-asset-playback-id ==========
   155  	err = client.AssetsApi.DeleteAssetPlaybackId(asset.Data.Id, capre.Data.Id)
   156  	common.AssertNoError(err)
   157  	dpba, err := client.AssetsApi.GetAsset(asset.Data.Id)
   158  	common.AssertNoError(err)
   159  	if len(dpba.Data.PlaybackIds) > 0 {
   160  		fmt.Println("List of playback IDs wasn't empty")
   161  		os.Exit(255)
   162  	}
   163  	fmt.Println("delete-asset-playback-id OK ✅")
   164  
   165  	// ========== delete-asset ==========
   166  	err = client.AssetsApi.DeleteAsset(asset.Data.Id)
   167  	common.AssertNoError(err)
   168  	_, err = client.AssetsApi.GetAsset(asset.Data.Id)
   169  	common.AssertNotNil(err)
   170  	fmt.Println("delete-asset OK ✅")
   171  }