Skip to content

Commit 4a3a73d

Browse files
authored
Merge pull request #286 from bug-is-zhang/master
add ci hls play key sdk and demo
2 parents 96ee96a + 1ac21f8 commit 4a3a73d

File tree

3 files changed

+180
-1
lines changed

3 files changed

+180
-1
lines changed

demo/ci_media.py

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1905,6 +1905,23 @@ def ci_get_presigned_download_url():
19051905
print(url)
19061906

19071907

1908+
def ci_get_hls_play_key():
1909+
response, data = client.ci_get_hls_play_key(bucket_name, Accept='application/json')
1910+
print(response)
1911+
print(data)
1912+
1913+
1914+
def ci_update_hls_play_key():
1915+
response, data = client.ci_update_hls_play_key(
1916+
Bucket=bucket_name,
1917+
MasterPlayKey='40c502079d484466b2e9e046ce11ae06',
1918+
BackupPlayKey='128d75fd2b6b4f958ccbb6fc38f60f03',
1919+
Accept='application/json'
1920+
)
1921+
print(response)
1922+
print(data)
1923+
1924+
19081925
if __name__ == "__main__":
19091926
# ci_get_media_queue()
19101927
# ci_get_media_jobs()
@@ -1963,4 +1980,6 @@ def ci_get_presigned_download_url():
19631980
# ci_create_tts_jobs()
19641981
# ci_create_translation_jobs()
19651982
# ci_create_words_generalize_jobs()
1966-
ci_get_presigned_download_url()
1983+
# ci_get_presigned_download_url()
1984+
# ci_update_hls_play_key()
1985+
ci_get_hls_play_key()

qcloud_cos/cos_client.py

Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10592,6 +10592,131 @@ def ci_get_ai_queue(self, Bucket, State='All', QueueIds='', PageNumber='', PageS
1059210592
PageNumber=PageNumber, PageSize=PageSize,
1059310593
UrlPath="/ai_queue", **kwargs)
1059410594

10595+
def ci_get_hls_play_key(self, Bucket, **kwargs):
10596+
""" 获取 HLS 播放密钥 https://cloud.tencent.com/document/product/436/104292
10597+
10598+
:param Bucket(string) 存储桶名称.
10599+
:param kwargs:(dict) 设置上传的headers.
10600+
:return(dict): response header.
10601+
:return(dict): 请求成功返回的结果,dict类型.
10602+
10603+
.. code-block:: python
10604+
10605+
config = CosConfig(Region=region, SecretId=secret_id, SecretKey=secret_key, Token=token) # 获取配置对象
10606+
client = CosS3Client(config)
10607+
# 获取 HLS 播放密钥
10608+
response, data = client.ci_get_hls_play_key(
10609+
Bucket='bucket',
10610+
ObjectKey='',
10611+
Body={}
10612+
)
10613+
print data
10614+
print response
10615+
"""
10616+
headers = mapped(kwargs)
10617+
final_headers = {}
10618+
params = {}
10619+
for key in headers:
10620+
if key.startswith("response"):
10621+
params[key] = headers[key]
10622+
else:
10623+
final_headers[key] = headers[key]
10624+
headers = final_headers
10625+
10626+
params = format_values(params)
10627+
path = "/playKey"
10628+
url = self._conf.uri(bucket=Bucket, path=path, endpoint=self._conf._endpoint_ci)
10629+
10630+
logger.info(
10631+
"ci_get_hls_play_key result, url=:{url} ,headers=:{headers}, params=:{params}".format(
10632+
url=url,
10633+
headers=headers,
10634+
params=params))
10635+
rt = self.send_request(
10636+
method='GET',
10637+
url=url,
10638+
auth=CosS3Auth(self._conf, path, params=params),
10639+
params=params,
10640+
headers=headers,
10641+
ci_request=True)
10642+
10643+
data = rt.content
10644+
response = dict(**rt.headers)
10645+
if 'Content-Type' in response:
10646+
if response['Content-Type'] == 'application/xml' and 'Content-Length' in response and \
10647+
response['Content-Length'] != 0:
10648+
data = xml_to_dict(rt.content)
10649+
format_dict(data, ['Response'])
10650+
elif response['Content-Type'].startswith('application/json'):
10651+
data = rt.json()
10652+
10653+
return response, data
10654+
10655+
def ci_update_hls_play_key(self, Bucket, MasterPlayKey=None, BackupPlayKey=None, **kwargs):
10656+
""" 更新 HLS 播放密钥 https://cloud.tencent.com/document/product/436/104291
10657+
10658+
:param Bucket(string) 存储桶名称.
10659+
:param MasterPlayKey(string) 主播放密钥.
10660+
:param BackupPlayKey(string) 备播放密钥.
10661+
:param kwargs:(dict) 设置上传的headers.
10662+
:return(dict): response header.
10663+
:return(dict): 请求成功返回的结果,dict类型.
10664+
10665+
.. code-block:: python
10666+
10667+
config = CosConfig(Region=region, SecretId=secret_id, SecretKey=secret_key, Token=token) # 获取配置对象
10668+
client = CosS3Client(config)
10669+
# 获取 HLS 播放密钥
10670+
response, data = client.ci_get_hls_play_key(
10671+
Bucket='bucket',
10672+
ObjectKey='',
10673+
Body={}
10674+
)
10675+
print data
10676+
print response
10677+
"""
10678+
headers = mapped(kwargs)
10679+
final_headers = {}
10680+
params = {}
10681+
for key in headers:
10682+
if key.startswith("response"):
10683+
params[key] = headers[key]
10684+
else:
10685+
final_headers[key] = headers[key]
10686+
headers = final_headers
10687+
10688+
if MasterPlayKey is not None:
10689+
params['masterPlayKey'] = MasterPlayKey
10690+
if BackupPlayKey is not None:
10691+
params['backupPlayKey'] = BackupPlayKey
10692+
params = format_values(params)
10693+
path = "/playKey"
10694+
url = self._conf.uri(bucket=Bucket, path=path, endpoint=self._conf._endpoint_ci)
10695+
logger.info("ci_update_hls_play_key result, url=:{url} ,headers=:{headers}, params=:{params}".format(
10696+
url=url,
10697+
headers=headers,
10698+
params=params))
10699+
rt = self.send_request(
10700+
method='PUT',
10701+
url=url,
10702+
bucket=Bucket,
10703+
auth=CosS3Auth(self._conf, path, params=params),
10704+
params=params,
10705+
headers=headers,
10706+
ci_request=True)
10707+
10708+
data = rt.content
10709+
response = dict(**rt.headers)
10710+
if 'Content-Type' in response:
10711+
if response['Content-Type'] == 'application/xml' and 'Content-Length' in response and \
10712+
response['Content-Length'] != 0:
10713+
data = xml_to_dict(rt.content)
10714+
format_dict(data, ['Response'])
10715+
elif response['Content-Type'].startswith('application/json'):
10716+
data = rt.json()
10717+
10718+
return response, data
10719+
1059510720

1059610721
if __name__ == "__main__":
1059710722
pass

ut/test.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5810,6 +5810,41 @@ def test_ci_asr_bucket():
58105810
assert data['AsrBucket']['Name'] == ci_bucket_name
58115811

58125812

5813+
def test_ci_hls_play_key():
5814+
kwargs = {"CacheControl": "no-cache", "ResponseCacheControl": "no-cache"}
5815+
5816+
response, data = client.ci_update_hls_play_key(
5817+
Bucket=ci_bucket_name,
5818+
MasterPlayKey='40c502079d484466b2e9e046ce11ae06',
5819+
BackupPlayKey='128d75fd2b6b4f958ccbb6fc38f60f03',
5820+
**kwargs
5821+
)
5822+
assert response['Content-Type'] == 'application/xml'
5823+
assert data['PlayKeyList']['MasterPlayKey'] == '40c502079d484466b2e9e046ce11ae06'
5824+
assert data['PlayKeyList']['BackupPlayKey'] == '128d75fd2b6b4f958ccbb6fc38f60f03'
5825+
5826+
response, data = client.ci_update_hls_play_key(
5827+
Bucket=ci_bucket_name,
5828+
MasterPlayKey='40c502079d484466b2e9e046ce11ae07',
5829+
BackupPlayKey='128d75fd2b6b4f958ccbb6fc38f60f04',
5830+
Accept='application/json',
5831+
**kwargs
5832+
)
5833+
assert response['Content-Type'] == 'application/json'
5834+
assert data['PlayKeyList']['MasterPlayKey'] == '40c502079d484466b2e9e046ce11ae07'
5835+
assert data['PlayKeyList']['BackupPlayKey'] == '128d75fd2b6b4f958ccbb6fc38f60f04'
5836+
5837+
response, data = client.ci_get_hls_play_key(ci_bucket_name)
5838+
assert response['Content-Type'] == 'application/xml'
5839+
assert data['PlayKeyList']['MasterPlayKey'] == '40c502079d484466b2e9e046ce11ae07'
5840+
assert data['PlayKeyList']['BackupPlayKey'] == '128d75fd2b6b4f958ccbb6fc38f60f04'
5841+
5842+
response, data = client.ci_get_hls_play_key(ci_bucket_name, Accept='application/json')
5843+
assert response['Content-Type'] == 'application/json'
5844+
assert data['PlayKeyList']['MasterPlayKey'] == '40c502079d484466b2e9e046ce11ae07'
5845+
assert data['PlayKeyList']['BackupPlayKey'] == '128d75fd2b6b4f958ccbb6fc38f60f04'
5846+
5847+
58135848
if __name__ == "__main__":
58145849
setUp()
58155850
"""

0 commit comments

Comments
 (0)