chongdongxiaoyu
实时音视频为客户端创建令牌
from aliyunsdkcore.client import AcsClient
from aliyunsdkrtc.request.v20180111 import CreateChannelRequest
from aliyunsdkcore.acs_exception.exceptions import ServerException
import aliyunsdkcore.profile.region_provider as rtc_user_config
import aliyunsdkcore.request as rtc_request
import aliyunsdkcore.http.protocol_type as rtc_protocol_type
import json, uuid


# 频道认证
class ChannelAuth:
    def __init__(self):
        self.app_id = None
        self.channel_id = None
        self.nonce = None
        self.timestamp = None
        self.channel_key = None
        self.recovered = None
        self.request_id = None


# 恢复错误
def recover_for_error(ex, app_id, channel_id):
    fatal = False
    request_id = ""
    if isinstance(ex, ServerException):
        request_id = ex.get_request_id()
        code = ex.get_error_code()
        if code == "IllegalOperationApp":
            fatal = True
        elif code.startswith("InvalidAccessKeyId"):
            fatal = True
        elif code == "SignatureDoesNotMatch":
            fatal = True
    if fatal:
        raise ex
    recovered = "RCV-%s" % str(uuid.uuid4())
    print("Recover from %s, recovered=%s" % (ex, recovered))
    auth = ChannelAuth()
    auth.app_id = app_id
    auth.channel_id = channel_id
    auth.nonce = recovered
    auth.timestamp = 0
    auth.channel_key = recovered
    auth.request_id = request_id
    auth.recovered = True
    return auth


# 创建频道
def create_channel(app_id, channel_id,
                   access_key_id, access_key_secret, region_id, endpoint
                   ):
    try:
        client = AcsClient(access_key_id, access_key_secret, region_id)
        request = CreateChannelRequest.CreateChannelRequest()
        request.set_AppId(app_id)
        request.set_ChannelId(channel_id)

        # Use HTTP, x3 times faster than HTTPS.
        rtc_request.set_default_protocol_type(rtc_protocol_type.HTTP)

        response = client.do_action_with_exception(request)
        obj = json.loads(response)

        auth = ChannelAuth()
        auth.app_id = app_id
        auth.channel_id = channel_id
        auth.nonce = obj[\'Nonce\']
        auth.timestamp = obj[\'Timestamp\']
        auth.channel_key = obj[\'ChannelKey\']
        auth.request_id = obj[\'RequestId\']
        auth.recovered = False
        return auth
    except Exception as ex:
        return recover_for_error(ex, app_id, channel_id)


region_id = "cn-hangzhou"  # 地域
endpoint = "rtc.aliyuncs.com"  # 节点

app_id = \'sj17fi\'
channel_id = str(uuid.uuid4())
access_key_id = \'LTAIT0dog7\'
access_key_secret = \'8LOt6GqvvvvvvvPdvPcBXl\'

auth = create_channel(app_id, channel_id,
                      access_key_id, access_key_secret, region_id, endpoint
                      )

# print(r1)
# print(auth.channel_key)
# print(auth.nonce)
# print(auth.timestamp)

# 为客户端创建令牌
import uuid, hashlib


def create_user_id():
    return str(uuid.uuid4())


def create_token(channel_id, channel_key, app_id, user_id, nonce, timestamp):
    channel_id = channel_id.encode(\'utf-8\')
    channel_key = channel_key.encode(\'utf-8\')
    app_id = app_id.encode(\'utf-8\')
    user_id = user_id.encode(\'utf-8\')
    nonce = nonce.encode(\'utf-8\')
    timestamp = str(timestamp).encode(\'utf-8\')

    h = hashlib.sha256()
    h.update(channel_id)
    h.update(channel_key)
    h.update(app_id)
    h.update(user_id)
    h.update(nonce)
    h.update(timestamp)
    token = h.hexdigest()
    return token


userid = create_user_id()
token = create_token(channel_id, auth.channel_key, app_id,
                     userid, auth.nonce, auth.timestamp)

channels = {}

channels[\'AppID\'] = app_id
channels[\'channel_id\'] = channel_id
channels[\'userid\'] = userid
channels[\'Nonce\'] = auth.nonce
channels[\'Timestamp\'] = auth.timestamp
channels[\'Token\'] = channel_id
channels[\'GSLB\'] = \'https://rgslb.rtc.aliyuncs.com\'

print(channels)

# { # \'AppID\': \'sj1fu7fi\', \'channel_id\': \'02da1070-ec2a-4ebd-829f-4653e385b4a2\', # \'userid\': \'9072b3d7-e954-4fd4-b807-aa60bf1d83c3\', \'Nonce\': \'844bba6b89b5f9956f6a2a6fc33efde8\', \'Timestamp\': 1555379321, # \'Token\': \'02da1070-ec2a-4ebd-829f-4653e385b4a2\', \'GSLB\': \'https://rgslb.rtc.aliyuncs.com\' # }

 














 

分类:

技术点:

相关文章:

  • 2021-12-29
  • 2021-12-28
  • 2021-12-29
  • 2021-10-25
  • 2022-02-09
  • 2021-11-23
  • 2022-01-01
  • 2021-12-29
猜你喜欢
  • 2021-09-06
  • 2021-12-29
  • 2021-11-29
  • 2022-01-09
  • 2021-12-19
  • 2021-11-23
相关资源
相似解决方案