最近,公司要搞屏幕远程控制,包含了屏幕直播。一开始公司准备自己搭服务器的,后来 说服务器转码,前端还要插件的,麻烦之类的。然后就变成了用阿里的SDK 一条龙服务。
不过 我自己在前期调研阶段 ,也自己实现了直播推送H.264 到服务器,服务器转发到手机解码播放。延迟1s左右。这个 在我下一篇博客哪里会详细叙说。
阿里直播SDK推流地址生成
首先 来看一个推流地址样式
rtmp://liveDomain/appName/streamName?auth_key=time-rand-0-md5hash
记得注意 我加粗的字体,下面上代码
/**
* @param appName 控制台上面的app名称
* @param streamName 流的名称
* @param time 十位数的时间戳
* @param rand 随机数,建议使用UUID(不能包含中划线“-”,例如: 477b3bbc253f467b8def6711128c7bec 格式)
* @param key 鉴权key
* @param liveDomain 推流域名
* @return 推流的地址
*/
public static String CreatePushUrl(String appName, String streamName, String time,String rand, String key, String liveDomain) {
Objects.requireNonNull(appName);
Objects.requireNonNull(streamName);
Objects.requireNonNull(time);
Objects.requireNonNull(key);
Objects.requireNonNull(liveDomain);
String strpush = "/" + appName + "/" + streamName + "-" + time + "-"+rand+"-0-" + key;
String pushurl = "rtmp://video-center.alivecdn.com/" + appName + "/" + streamName + "?vhost=" + liveDomain + "&auth_key=" + time + "-"+rand+"-0-" + Md5Utils.getMD5(strpush);
return pushurl;
}
阿里直播SDK播流地址生成
/**
* @param appName 控制台上面的app名称
* @param streamName 流的名称
* @param time 十位数的时间戳
* @param rand 这是用来标识的 否则同一个时间戳 生成的地址总是相同的 随机数,建议使用UUID(不能包含中划线“-”,例如: 477b3bbc253f467b8def6711128c7bec 格式)
* @param key 鉴权key
* @param liveDomain 推流域名
* @param templateId 无用 传入null就行
* @return 播放流的地址 默认是flv 也可以更改此代码
*/
public static String GetPlayUrl(String appName, String streamName, String time,String rand, String key, String liveDomain, String templateId) {
String strviewrtmp1 = null;
String strviewflv1 = null;
String strviewm3u81 = null;
String rtmpurl1 = null;
String flvurl1 = null;
String m3u8url1 = null;
Objects.requireNonNull(appName);
Objects.requireNonNull(streamName);
Objects.requireNonNull(time);
Objects.requireNonNull(key);
Objects.requireNonNull(liveDomain);
if (templateId == null) {
strviewrtmp1 = "/" + appName + "/" + streamName + "-" + time + "-"+rand+"-0-" + key;
strviewflv1 = "/" + appName + "/" + streamName