Python生成阿里云直播推流地址和拉流地址

代码#

import hashlib
import random
import string
import time


def md5(param):
    if param is None or len(param) == 0:
        return None
    md5_hash = hashlib.md5()
    md5_hash.update(param.encode('utf-8'))
    return md5_hash.hexdigest()


def generate_push_url(push_domain, push_key, app_name, stream_name, expire_time):
    push_url = ""
    if push_key == "":
        push_url = f"rtmp://{push_domain}/{app_name}/{stream_name}"
    else:
        timestamp = int(time.time()) + expire_time
        string_to_md5 = f"/{app_name}/{stream_name}-{timestamp}-0-0-{push_key}"
        auth_key = md5(string_to_md5)
        push_url = f"rtmp://{push_domain}/{app_name}/{stream_name}?auth_key={timestamp}-0-0-{auth_key}"
    print(f"Push URL: {push_url}")


def general_pull_url(pull_domain, pull_key, app_name, stream_name, expire_time):
    rtmp_url = ""
    hls_url = ""
    flv_url = ""
    if pull_key == "":
        rtmp_url = f"rtmp://{pull_domain}/{app_name}/{stream_name}"
        hls_url = f"http://{pull_domain}/{app_name}/{stream_name}.m3u8"
        flv_url = f"http://{pull_domain}/{app_name}/{stream_name}.flv"
    else:
        timestamp = int(time.time()) + expire_time

        rtmp_to_md5 = f"/{app_name}/{stream_name}-{timestamp}-0-0-{pull_key}"
        rtmp_auth_key = md5(rtmp_to_md5)
        rtmp_url = f"rtmp://{pull_domain}/{app_name}/{stream_name}?auth_key={timestamp}-0-0-{rtmp_auth_key}"

        hls_to_md5 = f"/{app_name}/{stream_name}.m3u8-{timestamp}-0-0-{pull_key}"
        hls_auth_key = md5(hls_to_md5)
        hls_url = f"http://{pull_domain}/{app_name}/{stream_name}.m3u8?auth_key={timestamp}-0-0-{hls_auth_key}"

        flv_to_md5 = f"/{app_name}/{stream_name}.flv-{timestamp}-0-0-{pull_key}"
        flv_auth_key = md5(flv_to_md5)
        flv_url = f"http://{pull_domain}/{app_name}/{stream_name}.flv?auth_key={timestamp}-0-0-{flv_auth_key}"

    print(f"RTMP URL: {rtmp_url}")
    print(f"HLS URL: {hls_url}")
    print(f"FLV URL: {flv_url}")


def main():
    # Generate random app_name and stream_name (5 characters alphanumeric)
    app_name = ''.join(random.choices(string.ascii_letters + string.digits, k=5))
    stream_name = ''.join(random.choices(string.ascii_letters + string.digits, k=5))

    expire_time = 3600  # 过期时间
    pull_domain = "拉流域名"
    pull_key = "拉流URL鉴权Key"

    push_domain = "推流域名"
    push_key = "推流URL鉴权Key"

    general_pull_url(pull_domain, pull_key, app_name, stream_name, expire_time)
    generate_push_url(push_domain, push_key, app_name, stream_name, expire_time)


if __name__ == '__main__':
    main()

打印结果#

RTMP URL: rtmp://拉流域名/uQU2G/ZOOzm?auth_key=1719481549-0-0-b07661172c6e730a735fbb624b9e0b2f
HLS URL: http://拉流域名/uQU2G/ZOOzm.m3u8?auth_key=1719481549-0-0-56a23c4b85f9f83fc3b973e532821dac
FLV URL: http://拉流域名/uQU2G/ZOOzm.flv?auth_key=1719481549-0-0-831a487d70ef905958a5e9baa39ae40c
Push URL: rtmp://推流域名/uQU2G/ZOOzm?auth_key=1719481549-0-0-b6bf523e3ac9658d297e30aa9dd8db30

作者:piggthird

出处:https://www.cnblogs.com/piggthird/p/18271572

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   PiggThird  阅读(63)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu