Jolly

使用python生成阿里云直播流推流拉流地址
遇到直播相关的业务时,比如手机带货直播等,我们想到的就是寻找大厂提供的相应视频直播流服务。大厂的技术是值得信赖的,...
扫描右侧二维码阅读全文
28
2020/07

使用python生成阿里云直播流推流拉流地址

遇到直播相关的业务时,比如手机带货直播等,我们想到的就是寻找大厂提供的相应视频直播流服务。大厂的技术是值得信赖的,以阿里云直播为例,流程是用户方发起直播任务,相应的调用自己服务接口逻辑生成直播推流和拉流地址,继而拿到推流地址进行推流。推流的视频流就经过阿里云服务处理,然后分发到阿里云自己的cdn,用户则在用户端使用拉流地址进行拉流观看。整个流程就是这样的。

这里我们以python语言为例,主要实现产品服务端接收响应生成推流拉流地址的逻辑。
话不多说,直接上代码:

import time
import datetime
import hashlib
import config


def md5_encode(hash_str: str):
    """"""
    m = hashlib.md5()
    m.update(hash_str.encode("utf8"))
    return m.hexdigest()


def create_live_stream_url(app_name: str, stream_name: str):

    time_ex = datetime.datetime.now() + datetime.timedelta(hours=config.hours)

    time_sta = time.mktime(time_ex.timetuple())

    time_fin = str(int(time_sta))

    # 加密key,直播鉴权
    push_key = config.push_key
    pull_key = config.pull_key

    str_push = "/"+app_name+"/"+stream_name+"-"+time_fin+"-0-0-"+push_key

    push_url = "rtmp://"+config.push_host+"/"+app_name+"/"+stream_name+"?auth_key="+time_fin+"-0-0-"+md5_encode(str_push)

    str_view_rtmp = "/"+app_name+"/"+stream_name+"-"+time_fin+"-0-0-"+pull_key
    str_view_flv = "/"+app_name+"/"+stream_name+".flv"+"-"+time_fin+"-0-0-"+pull_key
    str_view_m3u8 = "/"+app_name+"/"+stream_name+".m3u8"+"-"+time_fin+"-0-0-"+pull_key

    rtmp_url = "rtmp://"+config.pull_host+"/"+app_name+"/"+stream_name+"?auth_key="+time_fin+"-0-0-"+md5_encode(str_view_rtmp)
    flv_url = "http://"+config.pull_host+"/"+app_name+"/"+stream_name+".flv"+"?auth_key="+time_fin+"-0-0-"+md5_encode(str_view_flv)
    m3u8_url = "http://"+config.pull_host+"/"+app_name+"/"+stream_name+".m3u8"+"?auth_key="+time_fin+"-0-0-"+md5_encode(str_view_m3u8)

    # print("推流地址: " + push_url)
    # print("rtmp播流地址: " + rtmp_url)
    # print("flv播流地址: " + flv_url)
    # print("m3u8播流地址: " + m3u8_url)

    return {'push_url': push_url, 'rtmp_url': rtmp_url, 'flv_url': flv_url, 'm3u8_url': m3u8_url}

传入阿里云视频服务中配置的app_name和生成的stream_name,处理生成的4个流地址,注意,地址格式必须按照上述规则生成,否则阿里云在验证地址时候会无法通过,也就是生成的流地址是没用的。

Last modification:July 28th, 2020 at 10:04 am
🌓