diff --git a/qcloud_cos/cos_auth.py b/qcloud_cos/cos_auth.py index 64e112a8..e2712b37 100644 --- a/qcloud_cos/cos_auth.py +++ b/qcloud_cos/cos_auth.py @@ -138,12 +138,13 @@ def __call__(self, r): class CosRtmpAuth(AuthBase): - def __init__(self, conf, bucket=None, channel=None, params={}, expire=10000): + def __init__(self, conf, bucket=None, channel=None, params={}, expire=3600, presign_expire=0): self._secret_id = conf._secret_id self._secret_key = conf._secret_key self._token = conf._token self._anonymous = conf._anonymous self._expire = expire + self._presign_expire = presign_expire self._params = params if self._token: self._params['q-token'] = self._token @@ -154,6 +155,8 @@ def get_rtmp_sign(self): canonicalized_param = '' for k, v in self._params.iteritems(): canonicalized_param += '{key}={value}&'.format(key=k, value=v) + if self._presign_expire >= 60: + canonicalized_param += 'presign={value}'.format(value=self._presign_expire) canonicalized_param = canonicalized_param.rstrip('&') rtmp_str = u"{path}\n{params}\n".format(path=self._path, params=canonicalized_param) logger.debug("rtmp str: " + rtmp_str) diff --git a/qcloud_cos/cos_client.py b/qcloud_cos/cos_client.py index 590f8c3e..b000d856 100644 --- a/qcloud_cos/cos_client.py +++ b/qcloud_cos/cos_client.py @@ -3857,12 +3857,13 @@ def get_async_fetch_task(self, Bucket, TaskId, **kwargs): data = rt.json() return data - def put_live_channel(self, Bucket, ChannelName, Expire=3600, LiveChannelConfiguration={}, **kwargs): + def put_live_channel(self, Bucket, ChannelName, Expire=3600, PreSignExpire=0, LiveChannelConfiguration={}, **kwargs): """创建直播通道 :param Bucket(string): 存储桶名称. :param ChannelName(string): 直播通道名称. :param Expire(int): 推流url签名过期时间. + :param PreSignExpire(int): playlist中ts分片签名的过期时间,合法值[60,43200],默认为0,不开启该签名. :param LiveChannelConfiguration(dict): 直播通道配置. :param kwargs(dict): 设置请求headers. :return(dict): publish url and playurl. @@ -3900,7 +3901,7 @@ def put_live_channel(self, Bucket, ChannelName, Expire=3600, LiveChannelConfigur params=params) data = xml_to_dict(rt.content) if data['PublishUrls']['Url'] is not None: - rtmpSign = CosRtmpAuth(self._conf, bucket=Bucket, channel=ChannelName, expire=Expire) + rtmpSign = CosRtmpAuth(self._conf, bucket=Bucket, channel=ChannelName, expire=Expire, presign_expire=PreSignExpire) url = data['PublishUrls']['Url'] url += '?' + rtmpSign.get_rtmp_sign() data['PublishUrls']['Url'] = url