github.com/aliyun/aliyun-oss-go-sdk@v3.0.2+incompatible/sample/livechannel.go (about) 1 package sample 2 3 import ( 4 "fmt" 5 "io/ioutil" 6 "time" 7 8 "github.com/aliyun/aliyun-oss-go-sdk/oss" 9 ) 10 11 // CreateLiveChannelSample Samples for create a live-channel 12 func CreateLiveChannelSample() { 13 channelName := "create-livechannel" 14 //create bucket 15 bucket, err := GetTestBucket(bucketName) 16 if err != nil { 17 HandleError(err) 18 } 19 20 // Case 1 - Create live-channel with Completely configure 21 config := oss.LiveChannelConfiguration{ 22 Description: "sample-for-livechannel", //description information, up to 128 bytes 23 Status: "enabled", //enabled or disabled 24 Target: oss.LiveChannelTarget{ 25 Type: "HLS", //the type of object, only supports HLS, required 26 FragDuration: 10, //the length of each ts object (in seconds), in the range [1,100], default: 5 27 FragCount: 4, //the number of ts objects in the m3u8 object, in the range of [1,100], default: 3 28 PlaylistName: "test-get-channel-status.m3u8", //the name of m3u8 object, which must end with ".m3u8" and the length range is [6,128],default: playlist.m3u8 29 }, 30 } 31 32 result, err := bucket.CreateLiveChannel(channelName, config) 33 if err != nil { 34 HandleError(err) 35 } 36 37 playURL := result.PlayUrls[0] 38 publishURL := result.PublishUrls[0] 39 fmt.Printf("create livechannel:%s with config respones: playURL:%s, publishURL: %s\n", channelName, playURL, publishURL) 40 41 // Case 2 - Create live-channel only specified type of target which is required 42 simpleCfg := oss.LiveChannelConfiguration{ 43 Target: oss.LiveChannelTarget{ 44 Type: "HLS", 45 }, 46 } 47 result, err = bucket.CreateLiveChannel(channelName, simpleCfg) 48 if err != nil { 49 HandleError(err) 50 } 51 playURL = result.PlayUrls[0] 52 publishURL = result.PublishUrls[0] 53 fmt.Printf("create livechannel:%s with simple config respones: playURL:%s, publishURL: %s\n", channelName, playURL, publishURL) 54 55 err = DeleteTestBucketAndLiveChannel(bucketName) 56 if err != nil { 57 HandleError(err) 58 } 59 60 fmt.Println("PutObjectSample completed") 61 } 62 63 // PutLiveChannelStatusSample Set the status of the live-channel sample: enabled/disabled 64 func PutLiveChannelStatusSample() { 65 channelName := "put-livechannel-status" 66 bucket, err := GetTestBucket(bucketName) 67 if err != nil { 68 HandleError(err) 69 } 70 71 config := oss.LiveChannelConfiguration{ 72 Target: oss.LiveChannelTarget{ 73 Type: "HLS", //the type of object, only supports HLS, required 74 }, 75 } 76 77 _, err = bucket.CreateLiveChannel(channelName, config) 78 if err != nil { 79 HandleError(err) 80 } 81 82 // Case 1 - Set the status of live-channel to disabled 83 err = bucket.PutLiveChannelStatus(channelName, "disabled") 84 if err != nil { 85 HandleError(err) 86 } 87 88 // Case 2 - Set the status of live-channel to enabled 89 err = bucket.PutLiveChannelStatus(channelName, "enabled") 90 if err != nil { 91 HandleError(err) 92 } 93 94 err = DeleteTestBucketAndLiveChannel(bucketName) 95 if err != nil { 96 HandleError(err) 97 } 98 99 fmt.Println("PutLiveChannelStatusSample completed") 100 } 101 102 // PostVodPlayListSample Sample for generate playlist 103 func PostVodPlayListSample() { 104 channelName := "post-vod-playlist" 105 playlistName := "playlist.m3u8" 106 bucket, err := GetTestBucket(bucketName) 107 if err != nil { 108 HandleError(err) 109 } 110 111 config := oss.LiveChannelConfiguration{ 112 Target: oss.LiveChannelTarget{ 113 Type: "HLS", //the type of object, only supports HLS, required 114 PlaylistName: "playlist.m3u8", 115 }, 116 } 117 118 _, err = bucket.CreateLiveChannel(channelName, config) 119 if err != nil { 120 HandleError(err) 121 } 122 123 //This stage you can push live stream, and after that you could generator playlist 124 125 endTime := time.Now().Add(-1 * time.Minute) 126 startTime := endTime.Add(-60 * time.Minute) 127 err = bucket.PostVodPlaylist(channelName, playlistName, startTime, endTime) 128 if err != nil { 129 HandleError(err) 130 } 131 132 err = DeleteTestBucketAndLiveChannel(bucketName) 133 if err != nil { 134 HandleError(err) 135 } 136 137 fmt.Println("PostVodPlayListSampleSample completed") 138 } 139 140 // GetVodPlayListSample Sample for generate playlist and return the content of the playlist 141 func GetVodPlayListSample() { 142 channelName := "get-vod-playlist" 143 bucket, err := GetTestBucket(bucketName) 144 if err != nil { 145 HandleError(err) 146 } 147 148 config := oss.LiveChannelConfiguration{ 149 Target: oss.LiveChannelTarget{ 150 Type: "HLS", //the type of object, only supports HLS, required 151 PlaylistName: "playlist.m3u8", 152 }, 153 } 154 155 _, err = bucket.CreateLiveChannel(channelName, config) 156 if err != nil { 157 HandleError(err) 158 } 159 160 //This stage you can push live stream, and after that you could generator playlist 161 162 endTime := time.Now().Add(-1 * time.Minute) 163 startTime := endTime.Add(-60 * time.Minute) 164 body, err := bucket.GetVodPlaylist(channelName, startTime, endTime) 165 if err != nil { 166 HandleError(err) 167 } 168 defer body.Close() 169 170 data, err := ioutil.ReadAll(body) 171 if err != nil { 172 HandleError(err) 173 } 174 fmt.Printf("content of playlist is:%v\n", string(data)) 175 176 err = DeleteTestBucketAndLiveChannel(bucketName) 177 if err != nil { 178 HandleError(err) 179 } 180 181 fmt.Println("PostVodPlayListSampleSample completed") 182 } 183 184 // GetLiveChannelStatSample Sample for get the state of live-channel 185 func GetLiveChannelStatSample() { 186 channelName := "get-livechannel-stat" 187 bucket, err := GetTestBucket(bucketName) 188 if err != nil { 189 HandleError(err) 190 } 191 192 config := oss.LiveChannelConfiguration{ 193 Target: oss.LiveChannelTarget{ 194 Type: "HLS", //the type of object, only supports HLS, required 195 }, 196 } 197 198 _, err = bucket.CreateLiveChannel(channelName, config) 199 if err != nil { 200 HandleError(err) 201 } 202 203 stat, err := bucket.GetLiveChannelStat(channelName) 204 if err != nil { 205 HandleError(err) 206 } 207 208 status := stat.Status 209 connectedTime := stat.ConnectedTime 210 remoteAddr := stat.RemoteAddr 211 212 audioBW := stat.Audio.Bandwidth 213 audioCodec := stat.Audio.Codec 214 audioSampleRate := stat.Audio.SampleRate 215 216 videoBW := stat.Video.Bandwidth 217 videoFrameRate := stat.Video.FrameRate 218 videoHeight := stat.Video.Height 219 videoWidth := stat.Video.Width 220 221 fmt.Printf("get channel stat:(%v, %v,%v, %v), audio(%v, %v, %v), video(%v, %v, %v, %v)\n", channelName, status, connectedTime, remoteAddr, audioBW, audioCodec, audioSampleRate, videoBW, videoFrameRate, videoHeight, videoWidth) 222 223 err = DeleteTestBucketAndLiveChannel(bucketName) 224 if err != nil { 225 HandleError(err) 226 } 227 228 fmt.Println("GetLiveChannelStatSample completed") 229 } 230 231 // GetLiveChannelInfoSample Sample for get the configuration infomation of live-channel 232 func GetLiveChannelInfoSample() { 233 channelName := "get-livechannel-info" 234 bucket, err := GetTestBucket(bucketName) 235 if err != nil { 236 HandleError(err) 237 } 238 239 config := oss.LiveChannelConfiguration{ 240 Target: oss.LiveChannelTarget{ 241 Type: "HLS", //the type of object, only supports HLS, required 242 }, 243 } 244 245 _, err = bucket.CreateLiveChannel(channelName, config) 246 if err != nil { 247 HandleError(err) 248 } 249 250 info, err := bucket.GetLiveChannelInfo(channelName) 251 if err != nil { 252 HandleError(err) 253 } 254 255 desc := info.Description 256 status := info.Status 257 fragCount := info.Target.FragCount 258 fragDuation := info.Target.FragDuration 259 playlistName := info.Target.PlaylistName 260 targetType := info.Target.Type 261 262 fmt.Printf("get channel stat:(%v,%v, %v), target(%v, %v, %v, %v)\n", channelName, desc, status, fragCount, fragDuation, playlistName, targetType) 263 264 err = DeleteTestBucketAndLiveChannel(bucketName) 265 if err != nil { 266 HandleError(err) 267 } 268 269 fmt.Println("GetLiveChannelInfoSample completed") 270 } 271 272 // GetLiveChannelHistorySample Sample for get push records of live-channel 273 func GetLiveChannelHistorySample() { 274 channelName := "get-livechannel-info" 275 bucket, err := GetTestBucket(bucketName) 276 if err != nil { 277 HandleError(err) 278 } 279 280 config := oss.LiveChannelConfiguration{ 281 Target: oss.LiveChannelTarget{ 282 Type: "HLS", //the type of object, only supports HLS, required 283 }, 284 } 285 286 _, err = bucket.CreateLiveChannel(channelName, config) 287 if err != nil { 288 HandleError(err) 289 } 290 291 //at most return up to lastest 10 push records 292 history, err := bucket.GetLiveChannelHistory(channelName) 293 for _, record := range history.Record { 294 remoteAddr := record.RemoteAddr 295 startTime := record.StartTime 296 endTime := record.EndTime 297 fmt.Printf("get channel:%s history:(%v, %v, %v)\n", channelName, remoteAddr, startTime, endTime) 298 } 299 300 err = DeleteTestBucketAndLiveChannel(bucketName) 301 if err != nil { 302 HandleError(err) 303 } 304 305 fmt.Println("GetLiveChannelHistorySample completed") 306 } 307 308 // ListLiveChannelSample Samples for list live-channels with specified bucket name 309 func ListLiveChannelSample() { 310 channelName := "list-livechannel" 311 bucket, err := GetTestBucket(bucketName) 312 if err != nil { 313 HandleError(err) 314 } 315 316 config := oss.LiveChannelConfiguration{ 317 Target: oss.LiveChannelTarget{ 318 Type: "HLS", //the type of object, only supports HLS, required 319 }, 320 } 321 322 _, err = bucket.CreateLiveChannel(channelName, config) 323 if err != nil { 324 HandleError(err) 325 } 326 327 // Case 1: list all the live-channels 328 marker := "" 329 for { 330 // Set the marker value, the first time is "", the value of NextMarker that returned should as the marker in the next time 331 // At most return up to lastest 100 live-channels if "max-keys" is not specified 332 result, err := bucket.ListLiveChannel(oss.Marker(marker)) 333 if err != nil { 334 HandleError(err) 335 } 336 337 for _, channel := range result.LiveChannel { 338 fmt.Printf("list livechannel: (%v, %v, %v, %v, %v, %v)\n", channel.Name, channel.Status, channel.Description, channel.LastModified, channel.PlayUrls[0], channel.PublishUrls[0]) 339 } 340 341 if result.IsTruncated { 342 marker = result.NextMarker 343 } else { 344 break 345 } 346 } 347 348 // Case 2: Use the parameter "max-keys" to specify the maximum number of records returned, the value of max-keys cannot exceed 1000 349 // if "max-keys" the default value is 100 350 result, err := bucket.ListLiveChannel(oss.MaxKeys(10)) 351 if err != nil { 352 HandleError(err) 353 } 354 for _, channel := range result.LiveChannel { 355 fmt.Printf("list livechannel: (%v, %v, %v, %v, %v, %v)\n", channel.Name, channel.Status, channel.Description, channel.LastModified, channel.PlayUrls[0], channel.PublishUrls[0]) 356 } 357 358 // Case 3: Only list the live-channels with the value of parameter "prefix" as prefix 359 // max-keys, prefix, maker parameters can be combined 360 result, err = bucket.ListLiveChannel(oss.MaxKeys(10), oss.Prefix("list-")) 361 if err != nil { 362 HandleError(err) 363 } 364 for _, channel := range result.LiveChannel { 365 fmt.Printf("list livechannel: (%v, %v, %v, %v, %v, %v)\n", channel.Name, channel.Status, channel.Description, channel.LastModified, channel.PlayUrls[0], channel.PublishUrls[0]) 366 } 367 368 err = DeleteTestBucketAndLiveChannel(bucketName) 369 if err != nil { 370 HandleError(err) 371 } 372 373 fmt.Println("ListLiveChannelSample completed") 374 } 375 376 // DeleteLiveChannelSample Sample for delete live-channel 377 func DeleteLiveChannelSample() { 378 channelName := "delete-livechannel" 379 bucket, err := GetTestBucket(bucketName) 380 if err != nil { 381 HandleError(err) 382 } 383 384 config := oss.LiveChannelConfiguration{ 385 Target: oss.LiveChannelTarget{ 386 Type: "HLS", //the type of object, only supports HLS, required 387 }, 388 } 389 390 _, err = bucket.CreateLiveChannel(channelName, config) 391 if err != nil { 392 HandleError(err) 393 } 394 395 err = bucket.DeleteLiveChannel(channelName) 396 if err != nil { 397 HandleError(err) 398 } 399 400 err = DeleteTestBucketAndLiveChannel(bucketName) 401 if err != nil { 402 HandleError(err) 403 } 404 405 fmt.Println("DeleteLiveChannelSample completed") 406 } 407 408 // SignRtmpURLSample Sample for generate a RTMP push-stream signature URL for the trusted user to push the RTMP stream to the live channel. 409 func SignRtmpURLSample() { 410 channelName := "sign-rtmp-url" 411 playlistName := "playlist.m3u8" 412 bucket, err := GetTestBucket(bucketName) 413 if err != nil { 414 HandleError(err) 415 } 416 417 config := oss.LiveChannelConfiguration{ 418 Target: oss.LiveChannelTarget{ 419 Type: "HLS", //the type of object, only supports HLS, required 420 PlaylistName: "playlist.m3u8", 421 }, 422 } 423 424 result, err := bucket.CreateLiveChannel(channelName, config) 425 if err != nil { 426 HandleError(err) 427 } 428 429 playURL := result.PlayUrls[0] 430 publishURL := result.PublishUrls[0] 431 fmt.Printf("livechannel:%s, playURL:%s, publishURL: %s\n", channelName, playURL, publishURL) 432 433 signedRtmpURL, err := bucket.SignRtmpURL(channelName, playlistName, 3600) 434 if err != nil { 435 HandleError(err) 436 } 437 fmt.Printf("livechannel:%s, sinedRtmpURL: %s\n", channelName, signedRtmpURL) 438 439 err = DeleteTestBucketAndLiveChannel(bucketName) 440 if err != nil { 441 HandleError(err) 442 } 443 444 fmt.Println("SignRtmpURLSample completed") 445 }