C#阿里云视频直播生成地址播流推流
阿里云视频中心
最近用阿里云视频中心做了一个小小的直播Demo,后续打算用于公司的直播服务播放器,功能包含推流、播流、未开始显示KV图、观众访问记录收集、是否匿名用户。
阿里云官方支持文档
(一)地址生成
推流地址与播流地址无需调用API即可生成,只需要符合阿里云的规则即可,如下图所示。
代码中涉及到的枚举类
public enum iLiveAddresSchema
{
rtmp = 1,
http = 2,
https = 3
}
public enum iLiveStreamFormat
{
rtmp = 1,
flv = 2,
m3u8 = 3
}
public enum iLiveEncodeType
{
None = 0,
/// <summary>
/// 流畅 宽度自适应,高度:360
/// </summary>
lld = 1,
/// <summary>
/// /// <summary>
/// 标清 宽度自适应,高度:480
/// </summary>
/// </summary>
lsd = 2,
/// <summary>
/// /// <summary>
/// 高清 宽度自适应,高度:720
/// </summary>
/// </summary>
lhd = 3,
/// <summary>
/// /// <summary>
/// 超清 宽度自适应,高度:1080
/// </summary>
/// </summary>
lud = 4
}
/// <summary>
/// 生成推流or播流地址
/// </summary>
/// <param name="schema">推流/播流域名前缀(rtmp/http/https)</param>
/// <param name="domainName">推流/播流域名</param>
/// <param name="appName">appName</param>
/// <param name="streamName">streamName</param>
/// <param name="exipresTime">有效期,最大8小时</param>
/// <param name="key">鉴权Key</param>
/// <param name="uid">暂时无用,传0即可</param>
/// <param name="format">播流方式(rtmp/FLY/H3u8)</param>
/// <param name="encodeType">视频清晰度()</param>
/// <returns></returns>
protected string BuildSignedUrl(iLiveAddresSchema schema, string domainName, string appName, string streamName, int exipresTime, string key, string uid = "0", iLiveStreamFormat format = iLiveStreamFormat.rtmp, iLiveEncodeType encodeType = iLiveEncodeType.None)
{
long timestamp = (long)((DateTime.UtcNow.AddSeconds(exipresTime) - new DateTime(1970, 1, 1)).TotalSeconds);
string random = Guid.NewGuid().ToString().Replace("-", "");
string path = BuildPath(appName, streamName, format, encodeType);
string signature = GetSignature(path, key, uid, timestamp, random);
//auth_key 参数名区分大小写
return string.Format("{0}{1}{2}?auth_key={3}-{4}-{5}-{6}", schema.ConvertToString(), domainName, path, timestamp, random, uid, signature);
}
调用示例
温馨提示: 播流的时候参数选择http或者https,取决于播流域名是否有https安全证书。
string pushAddress = AliyunGenerator.BuildSignedUrl(iLiveAddresSchema.rtmp,推流地址, appName,streamName, 3600 * 8, 推流的鉴权Key,"0");
string rtmp = AliyunGenerator.BuildSignedUrl(iLiveAddresSchema.rtmp,播流地址, appName, streamName, 3600 * 8, 播流的鉴权Key, "0",iLiveStreamFormat.rtmp,iLiveEncodeType.None);
string flv = AliyunGenerator.BuildSignedUrl(iLiveAddresSchema.http,播流地址, appName, streamName, 3600 * 8, 播流的鉴权Key,"0",iLiveStreamFormat.flv,iLiveEncodeType.None);
string m3u8 = AliyunGenerator.BuildSignedUrl(iLiveAddresSchema.http,播流地址, appName, streamName, 3600 * 8,播流的鉴权Key,"0",iLiveStreamFormat.m3u8,iLiveEncodeType.None);
(二)Obs导播台推流
服务选择自定义,服务器填生成的推流域名+AppName
比如生成的推流地址是rtmp://push-ilive.anruisocial.com/sanyue/test?auth_key=1592841123-ef63d73d615045c7a7c07110f2039b26-0-789bf6c7493803abceb820bca8cfed92
服务器:rtmp://push-ilive.anruisocial.com/sanyue
串流密钥:test?auth_key=1592841123-ef63d73d615045c7a7c07110f2039b26-0-789bf6c7493803abceb820bca8cfed92
(三)使用阿里云Aliplayer播流
1、打开阿里云Aliplayer在线配置配置一个直播的网站。
2、复制生成的代码并保存一个HTML,然后打开即可。