遇到直播相关的业务时,比如手机带货直播等,我们想到的就是寻找大厂提供的相应视频直播流服务。大厂的技术是值得信赖的,以阿里云直播为例,流程是用户方发起直播任务,相应的调用自己服务接口逻辑生成直播推流和拉流地址,继而拿到推流地址进行推流。推流的视频流就经过阿里云服务处理,然后分发到阿里云自己的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个流地址,注意,地址格式必须按照上述规则生成,否则阿里云在验证地址时候会无法通过,也就是生成的流地址是没用的。
版权属于:Jolly
本文链接:https://totoro.site/index.php/archives/104/
关于转载:原创文章,禁止转载