317 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			PHP
		
	
	
		
		
			
		
	
	
			317 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			PHP
		
	
	
|  | <?php | ||
|  | 
 | ||
|  | namespace OSS\Tests; | ||
|  | 
 | ||
|  | require_once __DIR__ . '/Common.php'; | ||
|  | 
 | ||
|  | use OSS\Model\LiveChannelConfig; | ||
|  | use OSS\Core\OssException; | ||
|  | 
 | ||
|  | class BucketLiveChannelTest extends \PHPUnit\Framework\TestCase | ||
|  | { | ||
|  |     private $bucketName; | ||
|  |     private $client; | ||
|  | 
 | ||
|  |     protected function setUp(): void | ||
|  |     { | ||
|  |         $this->client = Common::getOssClient(); | ||
|  |         $this->bucketName = 'php-sdk-test-rtmp-bucket-name-' . strval(rand(0, 10000)); | ||
|  |         $this->client->createBucket($this->bucketName); | ||
|  |         Common::waitMetaSync(); | ||
|  |     } | ||
|  | 
 | ||
|  |     protected function tearDown(): void | ||
|  |     { | ||
|  |     ////to delete created bucket
 | ||
|  |     //1. delele live channel
 | ||
|  |         $list = $this->client->listBucketLiveChannels($this->bucketName); | ||
|  |         if (count($list->getChannelList()) != 0) | ||
|  |         { | ||
|  |             foreach($list->getChannelList() as $list) | ||
|  |             { | ||
|  |                 $this->client->deleteBucketLiveChannel($this->bucketName, $list->getName()); | ||
|  |             } | ||
|  |         } | ||
|  |     //2. delete exsited object
 | ||
|  |         $prefix = 'live-test/'; | ||
|  |         $delimiter = '/'; | ||
|  |         $nextMarker = ''; | ||
|  |         $maxkeys = 1000; | ||
|  |         $options = array( | ||
|  |             'delimiter' => $delimiter, | ||
|  |             'prefix' => $prefix, | ||
|  |             'max-keys' => $maxkeys, | ||
|  |             'marker' => $nextMarker, | ||
|  |         ); | ||
|  | 
 | ||
|  |         try { | ||
|  |             $listObjectInfo = $this->client->listObjects($this->bucketName, $options); | ||
|  |         } catch (OssException $e) { | ||
|  |             printf($e->getMessage() . "\n"); | ||
|  |             return; | ||
|  |         } | ||
|  | 
 | ||
|  |         $objectList = $listObjectInfo->getObjectList(); // 文件列表
 | ||
|  |         if (!empty($objectList)) | ||
|  |         {    | ||
|  |             foreach($objectList as $objectInfo) | ||
|  |                 $this->client->deleteObject($this->bucketName, $objectInfo->getKey());      | ||
|  |         } | ||
|  |     //3. delete the bucket
 | ||
|  |         $this->client->deleteBucket($this->bucketName); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testPutLiveChannel() | ||
|  |     { | ||
|  |         $config = new LiveChannelConfig(array( | ||
|  |             'description' => 'live channel 1', | ||
|  |             'type' => 'HLS', | ||
|  |             'fragDuration' => 10, | ||
|  |             'fragCount' => 5, | ||
|  |             'playListName' => 'hello.m3u8' | ||
|  |         )); | ||
|  |         $info = $this->client->putBucketLiveChannel($this->bucketName, 'live-1', $config); | ||
|  |         $this->client->deleteBucketLiveChannel($this->bucketName, 'live-1'); | ||
|  | 
 | ||
|  |         $this->assertEquals('live-1', $info->getName()); | ||
|  |         $this->assertEquals('live channel 1', $info->getDescription()); | ||
|  |         $this->assertEquals(1, count($info->getPublishUrls())); | ||
|  |         $this->assertEquals(1, count($info->getPlayUrls())); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testPutLiveChannelWithDefaultParams() | ||
|  |     { | ||
|  |         $config = new LiveChannelConfig(array( | ||
|  |             'description' => 'live channel 1', | ||
|  |             'type' => 'HLS', | ||
|  |         )); | ||
|  |         $info = $this->client->putBucketLiveChannel($this->bucketName, 'live-1', $config); | ||
|  |         $this->client->deleteBucketLiveChannel($this->bucketName, 'live-1'); | ||
|  | 
 | ||
|  |         $this->assertEquals('live-1', $info->getName()); | ||
|  |         $this->assertEquals('live channel 1', $info->getDescription()); | ||
|  |         $this->assertEquals(1, count($info->getPublishUrls())); | ||
|  |         $this->assertEquals(1, count($info->getPlayUrls())); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testListLiveChannels() | ||
|  |     { | ||
|  |        $config = new LiveChannelConfig(array( | ||
|  |             'description' => 'live channel 1', | ||
|  |             'type' => 'HLS', | ||
|  |             'fragDuration' => 10, | ||
|  |             'fragCount' => 5, | ||
|  |             'playListName' => 'hello.m3u8' | ||
|  |         )); | ||
|  |         $this->client->putBucketLiveChannel($this->bucketName, 'live-1', $config); | ||
|  | 
 | ||
|  |         $config = new LiveChannelConfig(array( | ||
|  |             'description' => 'live channel 2', | ||
|  |             'type' => 'HLS', | ||
|  |             'fragDuration' => 10, | ||
|  |             'fragCount' => 5, | ||
|  |             'playListName' => 'hello.m3u8' | ||
|  |         )); | ||
|  |         $this->client->putBucketLiveChannel($this->bucketName, 'live-2', $config); | ||
|  | 
 | ||
|  |         $list = $this->client->listBucketLiveChannels($this->bucketName); | ||
|  | 
 | ||
|  |         $this->assertEquals($this->bucketName, $list->getBucketName()); | ||
|  |         $this->assertEquals(false, $list->getIsTruncated()); | ||
|  |         $channels = $list->getChannelList(); | ||
|  |         $this->assertEquals(2, count($channels)); | ||
|  | 
 | ||
|  |         $chan1 = $channels[0]; | ||
|  |         $this->assertEquals('live-1', $chan1->getName()); | ||
|  |         $this->assertEquals('live channel 1', $chan1->getDescription()); | ||
|  |         $this->assertEquals(1, count($chan1->getPublishUrls())); | ||
|  |         $this->assertEquals(1, count($chan1->getPlayUrls())); | ||
|  | 
 | ||
|  |         $chan2 = $channels[1]; | ||
|  |         $this->assertEquals('live-2', $chan2->getName()); | ||
|  |         $this->assertEquals('live channel 2', $chan2->getDescription()); | ||
|  |         $this->assertEquals(1, count($chan2->getPublishUrls())); | ||
|  |         $this->assertEquals(1, count($chan2->getPlayUrls())); | ||
|  | 
 | ||
|  |         $list = $this->client->listBucketLiveChannels($this->bucketName, array( | ||
|  |             'prefix' => 'live-', | ||
|  |             'marker' => 'live-1', | ||
|  |             'max-keys' => 10 | ||
|  |         )); | ||
|  |         $channels = $list->getChannelList(); | ||
|  |         $this->assertEquals(1, count($channels)); | ||
|  |         $chan2 = $channels[0]; | ||
|  |         $this->assertEquals('live-2', $chan2->getName()); | ||
|  |         $this->assertEquals('live channel 2', $chan2->getDescription()); | ||
|  |         $this->assertEquals(1, count($chan2->getPublishUrls())); | ||
|  |         $this->assertEquals(1, count($chan2->getPlayUrls())); | ||
|  | 
 | ||
|  |         $this->client->deleteBucketLiveChannel($this->bucketName, 'live-1'); | ||
|  |         $this->client->deleteBucketLiveChannel($this->bucketName, 'live-2'); | ||
|  |         $list = $this->client->listBucketLiveChannels($this->bucketName, array( | ||
|  |             'prefix' => 'live-' | ||
|  |         )); | ||
|  |         $this->assertEquals(0, count($list->getChannelList())); | ||
|  |    } | ||
|  | 
 | ||
|  |     public function testDeleteLiveChannel() | ||
|  |     { | ||
|  |         $channelName = 'live-to-delete'; | ||
|  |         $config = new LiveChannelConfig(array( | ||
|  |             'description' => 'live channel to delete', | ||
|  |             'type' => 'HLS', | ||
|  |             'fragDuration' => 10, | ||
|  |             'fragCount' => 5, | ||
|  |             'playListName' => 'hello.m3u8' | ||
|  |         )); | ||
|  |         $this->client->putBucketLiveChannel($this->bucketName, $channelName, $config); | ||
|  | 
 | ||
|  |         $this->client->deleteBucketLiveChannel($this->bucketName, $channelName); | ||
|  |         $list = $this->client->listBucketLiveChannels($this->bucketName, array( | ||
|  |             'prefix' => $channelName | ||
|  |         )); | ||
|  | 
 | ||
|  |         $this->assertEquals(0, count($list->getChannelList())); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testSignRtmpUrl() | ||
|  |     { | ||
|  |         $channelName = '90475'; | ||
|  |         $bucket = 'douyu'; | ||
|  |         $now = time(); | ||
|  |         $url = $this->client->signRtmpUrl($bucket, $channelName, 900, array( | ||
|  |             'params' => array( | ||
|  |                 'playlistName' => 'playlist.m3u8' | ||
|  |             ) | ||
|  |         )); | ||
|  | 
 | ||
|  |         $ret = parse_url($url); | ||
|  |         $this->assertEquals('rtmp', $ret['scheme']); | ||
|  |         parse_str($ret['query'], $query); | ||
|  | 
 | ||
|  |         $this->assertTrue(isset($query['OSSAccessKeyId'])); | ||
|  |         $this->assertTrue(isset($query['Signature'])); | ||
|  |         $this->assertTrue(intval($query['Expires']) - ($now + 900) < 3); | ||
|  |         $this->assertEquals('playlist.m3u8', $query['playlistName']); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testGetgenPreSignedRtmpUrlVsSignedRtmpUrl() | ||
|  |     { | ||
|  |         $channelName = '90475'; | ||
|  |         $bucket = 'douyu'; | ||
|  |         $url1 = '245'; | ||
|  |         $url2 = '123'; | ||
|  |         $expiration = 0; | ||
|  | 
 | ||
|  |         do { | ||
|  |             $begin = time(); | ||
|  |             $expiration = time() + 900; | ||
|  |             $url1 = $this->client->generatePresignedRtmpUrl($bucket, $channelName, $expiration, array( | ||
|  |                 'params' => array( | ||
|  |                     'playlistName' => 'playlist.m3u8' | ||
|  |                 ) | ||
|  |             )); | ||
|  | 
 | ||
|  |             $url2 = $this->client->signRtmpUrl($bucket, $channelName, 900, array( | ||
|  |                 'params' => array( | ||
|  |                     'playlistName' => 'playlist.m3u8' | ||
|  |                 ) | ||
|  |             )); | ||
|  | 
 | ||
|  |             $end = time(); | ||
|  | 
 | ||
|  |             if ($begin == $end) | ||
|  |                 break; | ||
|  |             usleep(500000); | ||
|  |         } while (true); | ||
|  |         $this->assertEquals($url1, $url1); | ||
|  |         $this->assertTrue(strpos($url1, 'Expires='.$expiration) !== false); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testLiveChannelInfo() | ||
|  |     { | ||
|  |         $channelName = 'live-to-put-status'; | ||
|  |         $config = new LiveChannelConfig(array( | ||
|  |             'description' => 'test live channel info', | ||
|  |             'type' => 'HLS', | ||
|  |             'fragDuration' => 10, | ||
|  |             'fragCount' => 5, | ||
|  |             'playListName' => 'hello.m3u8' | ||
|  |         )); | ||
|  |         $this->client->putBucketLiveChannel($this->bucketName, $channelName, $config); | ||
|  | 
 | ||
|  |         $info = $this->client->getLiveChannelInfo($this->bucketName, $channelName); | ||
|  |         $this->assertEquals('test live channel info', $info->getDescription()); | ||
|  |         $this->assertEquals('enabled', $info->getStatus()); | ||
|  |         $this->assertEquals('HLS', $info->getType()); | ||
|  |         $this->assertEquals(10, $info->getFragDuration()); | ||
|  |         $this->assertEquals(5, $info->getFragCount()); | ||
|  |         $this->assertEquals('playlist.m3u8', $info->getPlayListName()); | ||
|  | 
 | ||
|  |         $this->client->deleteBucketLiveChannel($this->bucketName, $channelName); | ||
|  |         $list = $this->client->listBucketLiveChannels($this->bucketName, array( | ||
|  |             'prefix' => $channelName | ||
|  |         )); | ||
|  |         $this->assertEquals(0, count($list->getChannelList())); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testPutLiveChannelStatus() | ||
|  |     { | ||
|  |         $channelName = 'live-to-put-status'; | ||
|  |         $config = new LiveChannelConfig(array( | ||
|  |             'description' => 'test live channel info', | ||
|  |             'type' => 'HLS', | ||
|  |             'fragDuration' => 10, | ||
|  |             'fragCount' => 5, | ||
|  |             'playListName' => 'hello.m3u8' | ||
|  |         )); | ||
|  |         $this->client->putBucketLiveChannel($this->bucketName, $channelName, $config); | ||
|  |         | ||
|  |         $info = $this->client->getLiveChannelInfo($this->bucketName, $channelName); | ||
|  |         $this->assertEquals('test live channel info', $info->getDescription()); | ||
|  |         $this->assertEquals('enabled', $info->getStatus()); | ||
|  |         $this->assertEquals('HLS', $info->getType()); | ||
|  |         $this->assertEquals(10, $info->getFragDuration()); | ||
|  |         $this->assertEquals(5, $info->getFragCount()); | ||
|  |         $this->assertEquals('playlist.m3u8', $info->getPlayListName()); | ||
|  |         $status = $this->client->getLiveChannelStatus($this->bucketName, $channelName); | ||
|  |         $this->assertEquals('Idle', $status->getStatus()); | ||
|  | 
 | ||
|  | 
 | ||
|  |         $resp = $this->client->putLiveChannelStatus($this->bucketName, $channelName, "disabled");  | ||
|  |         $info = $this->client->getLiveChannelInfo($this->bucketName, $channelName); | ||
|  |         $this->assertEquals('test live channel info', $info->getDescription()); | ||
|  |         $this->assertEquals('disabled', $info->getStatus()); | ||
|  |         $this->assertEquals('HLS', $info->getType()); | ||
|  |         $this->assertEquals(10, $info->getFragDuration()); | ||
|  |         $this->assertEquals(5, $info->getFragCount()); | ||
|  |         $this->assertEquals('playlist.m3u8', $info->getPlayListName()); | ||
|  | 
 | ||
|  |         $status = $this->client->getLiveChannelStatus($this->bucketName, $channelName); | ||
|  |         //getLiveChannelInfo
 | ||
|  |         $this->assertEquals('Disabled', $status->getStatus()); | ||
|  | 
 | ||
|  |         $this->client->deleteBucketLiveChannel($this->bucketName, $channelName); | ||
|  |         $list = $this->client->listBucketLiveChannels($this->bucketName, array( | ||
|  |             'prefix' => $channelName | ||
|  |         )); | ||
|  |         $this->assertEquals(0, count($list->getChannelList())); | ||
|  | 
 | ||
|  |     } | ||
|  |     public function testLiveChannelHistory() | ||
|  |     { | ||
|  |         $channelName = 'live-test-history'; | ||
|  |         $config = new LiveChannelConfig(array( | ||
|  |             'description' => 'test live channel info', | ||
|  |             'type' => 'HLS', | ||
|  |             'fragDuration' => 10, | ||
|  |             'fragCount' => 5, | ||
|  |             'playListName' => 'hello.m3u8' | ||
|  |         )); | ||
|  |         $this->client->putBucketLiveChannel($this->bucketName, $channelName, $config); | ||
|  |          | ||
|  |         $history = $this->client->getLiveChannelHistory($this->bucketName, $channelName); | ||
|  |         $this->assertEquals(0, count($history->getLiveRecordList())); | ||
|  |     } | ||
|  | } |