当前位置: 首页 > news >正文

手机好看的网站迪哥哪个网站上做游戏直播

手机好看的网站,迪哥哪个网站上做游戏直播,万能网站网址下载,网站地图格式首先来看一下直播效果 推流工具有很多种#xff08;例如OBS、阿里云直播Demo推流、等等#xff0c;我用的是芯象导播#xff09;阿里播放器地址 一、直播基础服务概述 官方文档说明 二、直播域名配置需要两个域名#xff08;推流域名、播流域名#xff09; 官方文档说…首先来看一下直播效果 推流工具有很多种例如OBS、阿里云直播Demo推流、等等我用的是芯象导播阿里播放器地址 一、直播基础服务概述 官方文档说明 二、直播域名配置需要两个域名推流域名、播流域名 官方文档说明 四、开发流程 1、Java SDK安装 我用的是Apache Maven安装方式 官方安装说明文档 2、Java代码生成推流地址和播放地址 官方案例 package com.zaiyun.zhibo.utils;import com.zaiyun.common.core.domain.model.User; import com.zaiyun.common.utils.DateUtils; import com.zaiyun.common.utils.SecurityUtils; import com.zaiyun.zhibo.domain.LiveRooms; import org.springframework.stereotype.Component;import java.math.BigInteger; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.Date; import java.util.HashMap;/*** 阿里视频直播工具类*/ Component public class LiveUtils {/*** 生成推流地址** param appName 推流AppName* param streamName 推流StreamName*/public static String buildPushUrl(String appName, String streamName) {String pushDomain zyt.*****.com; //推流域名String pushKey 2T39rSP2dVro;//推流域名配置的鉴权KeyString pushUrl ;//推流域名未开启鉴权功能的情况下if (pushKey ) {pushUrl rtmp:// pushDomain / appName / streamName;} else {Long timeStamp System.currentTimeMillis() / 1000L 3601L;String stringToMd5 / appName / streamName - Long.toString(timeStamp) -0-0- pushKey;String authKey md5(stringToMd5);pushUrl rtmp:// pushDomain / appName / streamName ?auth_key Long.toString(timeStamp) -0-0- authKey;}return pushUrl;}/*** 生成播放地址** param appName 播放appName同推流appName)* param streamName 播放streamName播放源流时streamName 同推流streamName播放转码流时streamName 为推流streamName_{转码模板ID}*/public static HashMapString, String buildPullUrl(String appName, String streamName) {String pullDomain zyb.*****.com; //播放域名String pullKey 92KiuYjNYr5H; //播放鉴权KeyString rtmpUrl ; //rtmp的拉流地址String hlsUrl ; //m3u8的拉流地址String flvUrl ; //flv的拉流地址String rtsUrl ; //rts的拉流地址//播放域名未配置鉴权Key的情况下if (pullKey ) {rtmpUrl rtmp:// pullDomain / appName / streamName;rtsUrl artc:// pullDomain / appName / streamName;hlsUrl http:// pullDomain / appName / streamName .m3u8;flvUrl http:// pullDomain / appName / streamName .flv;} else {Long timeStamp System.currentTimeMillis() / 1000L 3600L;String rtmpToMd5 / appName / streamName - Long.toString(timeStamp) -0-0- pullKey;String rtmpAuthKey md5(rtmpToMd5);rtmpUrl rtmp:// pullDomain / appName / streamName ?auth_key Long.toString(timeStamp) -0-0- rtmpAuthKey;String hlsToMd5 / appName / streamName .m3u8- Long.toString(timeStamp) -0-0- pullKey;String hlsAuthKey md5(hlsToMd5);hlsUrl http:// pullDomain / appName / streamName .m3u8 ?auth_key Long.toString(timeStamp) -0-0- hlsAuthKey;String flvToMd5 / appName / streamName .flv- Long.toString(timeStamp) -0-0- pullKey;String flvAuthKey md5(flvToMd5);flvUrl http:// pullDomain / appName / streamName .flv ?auth_key Long.toString(timeStamp) -0-0- flvAuthKey;String rtsToMd5 / appName / streamName - Long.toString(timeStamp) -0-0- pullKey;String rtsAuthKey md5(rtsToMd5);rtsUrl artc:// pullDomain / appName / streamName ?auth_key Long.toString(timeStamp) -0-0- rtsAuthKey;}HashMapString, String url new HashMap();url.put(rtmpUrl, rtmpUrl);url.put(hlsUrl, hlsUrl);url.put(flvUrl, flvUrl);url.put(rtsUrl, rtsUrl);return url;}/*** 计算md5*/public static String md5(String param) {if (param null || param.length() 0) {return null;}try {MessageDigest md5 MessageDigest.getInstance(MD5);md5.update(param.getBytes());byte[] byteArray md5.digest();BigInteger bigInt new BigInteger(1, byteArray);// 参数16表示16进制String result bigInt.toString(16);// 不足32位高位补零while (result.length() 32) {result 0 result;}return result;} catch (NoSuchAlgorithmException e) {e.printStackTrace();}return null;}/*** 登录需的要鉴权信息*/public static HashMapString, Object appAuth(LiveRooms room) {String role ;User user SecurityUtils.getLoginUser().getUser();String userId user.getUserId().toString();String appId room.getAppId();String appKey room.getAppKey();String appSign room.getAppSign();String nonce java.util.UUID.randomUUID().toString();Long timestamp DateUtils.addHours(new Date(), 1).getTime() / 1000;String signContent String.format(%s%s%s%s%s%s, appId, appKey, userId, nonce, timestamp, role);String appToken org.apache.commons.codec.digest.DigestUtils.sha256Hex(signContent);HashMapString, Object result new HashMap();result.put(appId, appId);result.put(appSign, appSign);result.put(appToken, appToken);result.put(role, role);result.put(nonce, nonce);result.put(userId, userId);result.put(timestamp, timestamp);result.put(userName, user.getUserName());return result;} }3、直播间互动功能消息组 package com.zaiyun.zhibo.controller;import com.zaiyun.common.annotation.Anonymous; import com.zaiyun.common.core.controller.BaseController; import com.zaiyun.common.core.domain.AjaxResult; import com.zaiyun.zhibo.domain.LiveRooms; import com.zaiyun.zhibo.mapper.LiveRoomsMapper; import com.zaiyun.zhibo.utils.LiveAppUtils; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;import javax.annotation.Resource; import java.util.HashMap;/*** 最新版本的消息组*/ Anonymous RestController RequestMapping(/live/app) public class LiveAppController extends BaseController {ResourceLiveAppUtils liveAppUtils;ResourceLiveRoomsMapper liveRoomsMapper;/*** 创建互动消息应用*/PostMapping(/create)public AjaxResult createMessageApp() {try {String appName myApp;return success(liveAppUtils.createMessageApp(appName));} catch (Exception e) {return AjaxResult.error(201, e.getMessage());}}/*** 获取互动消息应用*/PostMapping(/list)public AjaxResult getMessageAppList() {try {return success(liveAppUtils.getMessageAppList());} catch (Exception e) {return AjaxResult.error(201, e.getMessage());}}/*** 获取互动消息应用详情*/PostMapping(/info)public AjaxResult getMessageAppInfo() {try {String appId abc13a82b773;return success(liveAppUtils.getMessageAppInfo(appId));} catch (Exception e) {return AjaxResult.error(201, e.getMessage());}}/*** 创建消息组*/PostMapping(/group/create)public AjaxResult createMessageGroup() {try {String appId abc13a82b773;return success(liveAppUtils.createMessageGroup(appId));} catch (Exception e) {return AjaxResult.error(201, e.getMessage());}}/*** 查询指定用户下消息组列表*/PostMapping(/group/list)public AjaxResult listMessageGroup() {try {String appId abc13a82b773;return success(liveAppUtils.listMessageGroup(appId));} catch (Exception e) {return AjaxResult.error(201, e.getMessage());}}/*** 消息组详情*/PostMapping(/group/describe)public AjaxResult groupDescribe() {try {HashMapString, String parameter new HashMap();parameter.put(appId, abc13a82b773);parameter.put(groupId, 211a39c8-2ebd-4d4b-978e-dfa31836220f);return success(liveAppUtils.groupDescribe(parameter));} catch (Exception e) {return AjaxResult.error(201, e.getMessage());}}/*** 发送消息到群组*/PostMapping(/send/group)public AjaxResult sendMessageGroup(RequestBody HashMapString, String data) {try {String roomId data.get(roomId);String msgType data.get(msgType);String body data.get(body);if (roomId null || msgType null || body null) {return AjaxResult.error(201, 参数错误 roomId 或 msgType 或 body);}LiveRooms liveRooms new LiveRooms();liveRooms.setId(Integer.parseInt(roomId));LiveRooms room liveRoomsMapper.findRoomByWhere(liveRooms);HashMapString, String parameter new HashMap();parameter.put(appId, room.getAppId());parameter.put(groupId, room.getGroupId());parameter.put(senderId, admin getUserId());//发送者parameter.put(msgType, msgType);//消息类型parameter.put(body, body);//消息内容return success(liveAppUtils.sendMessageGroup(parameter));} catch (Exception e) {return AjaxResult.error(201, e.getMessage());}}/*** 发送消息到用户*/PostMapping(/send/user)public AjaxResult sendMessageUser() {try {HashMapString, String parameter new HashMap();parameter.put(appId, abc13a82b773);parameter.put(senderId, uid10);//发送者parameter.put(receiverId, 100);//接收者parameter.put(body, {\content\:\这里是发送的消息内容\});//消息内容return success(liveAppUtils.sendMessageUser(parameter));} catch (Exception e) {return AjaxResult.error(201, e.getMessage());}}/*** 查询群组消息列表*/PostMapping(/group/messages)public AjaxResult getGroupMessages() {try {HashMapString, String parameter new HashMap();parameter.put(appId, abc13a82b773);parameter.put(groupId, 211a39c8-2ebd-4d4b-978e-dfa31836220f);return success(liveAppUtils.getGroupMessages(parameter));} catch (Exception e) {return AjaxResult.error(201, e.getMessage());}}/*** 查询群组用户列表*/PostMapping(/group/users)public AjaxResult getGroupUsers() {try {HashMapString, String parameter new HashMap();parameter.put(appId, abc13a82b773);parameter.put(groupId, 211a39c8-2ebd-4d4b-978e-dfa31836220f);return success(liveAppUtils.getGroupUsers(parameter));} catch (Exception e) {return AjaxResult.error(201, e.getMessage());}} } package com.zaiyun.zhibo.utils;import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.IAcsClient; import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.live.model.v20161101.*; import com.aliyuncs.profile.DefaultProfile; import com.zaiyun.common.config.AlibabaConfig; import com.zaiyun.common.utils.uuid.UUID; import org.apache.commons.lang3.RandomStringUtils; import org.springframework.stereotype.Component;import java.util.ArrayList; import java.util.HashMap;/*** 阿里视频直播工具类*/ Component public class LiveAppUtils {/*** 初始化配置*/public static IAcsClient createClient() throws Exception {DefaultProfile profile DefaultProfile.getProfile(cn-shanghai, AlibabaConfig.getAccessKeyId(), AlibabaConfig.getAccessKeySecret());return new DefaultAcsClient(profile);}/*** 创建互动消息应用** param appName 互动消息应用名称长度 2~16 个字符*/public static CreateLiveMessageAppResponse createMessageApp(String appName) throws Exception {IAcsClient client createClient();CreateLiveMessageAppRequest request new CreateLiveMessageAppRequest();request.setAppName(appName);request.setAuditType(1);//内置安全审核try {return client.getAcsResponse(request);} catch (ClientException error) {throw new RuntimeException(创建互动消息应用异常 error);}}/*** 查询互动消息应用列表*/public static Object getMessageAppList() throws Exception {IAcsClient client createClient();ListLiveMessageAppsRequest request new ListLiveMessageAppsRequest();request.setSortType(1);try {return client.getAcsResponse(request);} catch (ClientException error) {throw new RuntimeException(查询互动消息应用列表异常 error);}}/*** 查询互动消息应用详情*/public static Object getMessageAppInfo(String appId) throws Exception {IAcsClient client createClient();DescribeLiveMessageAppRequest request new DescribeLiveMessageAppRequest();request.setAppId(appId);try {return client.getAcsResponse(request);} catch (ClientException error) {throw new RuntimeException(查询互动消息应用详情异常 error);}}/*** 创建消息组** param appId 互动消息应用ID*/public static String createMessageGroup(String appId) throws Exception {IAcsClient client createClient();CreateLiveMessageGroupRequest request new CreateLiveMessageGroupRequest();request.setAppId(appId);request.setCreatorId(admin1);//群组创建者ID。request.setDataCenter(cn-shanghai);//数据中心request.setGroupInfo(testgroupinfo);//群组扩展信息最大512字符。request.setGroupId(UUID.fastUUID().toString());//要创建的群组ID由大小写字母、数字组成最大64字符。request.setGroupName(RandomStringUtils.randomAlphanumeric(10));//群组名最大64字符。ArrayListString administrators new ArrayList();administrators.add(aaaaa);administrators.add(bbbbb);administrators.add(ccccc);request.setAdministrators(administrators);//管理员用户ID数组try {CreateLiveMessageGroupResponse response client.getAcsResponse(request);return response.getGroupId();} catch (ClientException error) {throw new RuntimeException(创建消息组异常 error);}}/*** 查询指定用户下消息组列表** param appId 互动消息应用ID*/public static Object listMessageGroup(String appId) throws Exception {IAcsClient client createClient();ListLiveMessageGroupsRequest request new ListLiveMessageGroupsRequest();request.setAppId(appId);request.setSortType(2);try {return client.getAcsResponse(request);} catch (ClientException error) {throw new RuntimeException(查询指定用户下消息组列表异常 error);}}/*** 消息组详情** param parameter 请求参数*/public static Object groupDescribe(HashMapString, String parameter) throws Exception {IAcsClient client createClient();DescribeLiveMessageGroupRequest request new DescribeLiveMessageGroupRequest();request.setAppId(parameter.get(appId));request.setGroupId(parameter.get(groupId));try {return client.getAcsResponse(request);} catch (ClientException error) {throw new RuntimeException(查询指定用户下消息组列表异常 error);}}/*** 发送消息到群组** param parameter 请求参数*/public static Object sendMessageGroup(HashMapString, String parameter) throws Exception {IAcsClient client createClient();SendLiveMessageGroupRequest request new SendLiveMessageGroupRequest();request.setAppId(parameter.get(appId));request.setGroupId(parameter.get(groupId));request.setSenderId(parameter.get(senderId));//发送者request.setBody(parameter.get(body));//消息内容request.setMsgType(Long.parseLong(parameter.get(msgType)));//消息类型try {return client.getAcsResponse(request);} catch (ClientException error) {throw new RuntimeException(发送消息到群组异常 error);}}/*** 发送消息到用户** param parameter 请求参数*/public static Object sendMessageUser(HashMapString, String parameter) throws Exception {IAcsClient client createClient();SendLiveMessageUserRequest request new SendLiveMessageUserRequest();request.setAppId(parameter.get(appId));request.setSenderId(parameter.get(senderId));//发送者request.setReceiverId(parameter.get(receiverId));//接收者request.setBody(parameter.get(body));//消息内容try {return client.getAcsResponse(request);} catch (ClientException error) {throw new RuntimeException(发送消息到用户异常 error);}}/*** 查询群组消息列表** param parameter 请求参数*/public static Object getGroupMessages(HashMapString, String parameter) throws Exception {IAcsClient client createClient();ListLiveMessageGroupMessagesRequest request new ListLiveMessageGroupMessagesRequest();request.setAppId(parameter.get(appId));request.setGroupId(parameter.get(groupId));request.setSortType(2);request.setPageSize(10);try {return client.getAcsResponse(request);} catch (ClientException error) {throw new RuntimeException(查询群组消息列表异常 error);}}/*** 查询群组用户列表** param parameter 必须参数*/public static Object getGroupUsers(HashMapString, String parameter) throws Exception {IAcsClient client createClient();ListLiveMessageGroupUsersRequest request new ListLiveMessageGroupUsersRequest();request.setAppId(parameter.get(appId));request.setGroupId(parameter.get(groupId));request.setSortType(2);request.setPageSize(30);try {return client.getAcsResponse(request);} catch (ClientException error) {throw new RuntimeException(查询群组用户列表异常 error);}} }4、推流、断流回调 /*** 推流、断流回调地址*/GetMapping(/callback)public void callback(HttpServletRequest request) {try {//处理回调请求参数HashMapString, Object paramsMap ConvertUtils.getRequestData(request);//开始推流if (paramsMap.get(action).equals(publish)) {tiktokLogger.info(开始推流 paramsMap);liveRoomsLogService.addRoomLog(paramsMap);}//推流中断if (paramsMap.get(action).equals(publish_done)) {tiktokLogger.info(推流中断 paramsMap);liveRoomsLogService.upRoomLog(paramsMap);}} catch (Exception e) {tiktokLogger.info(回调异常 e.getMessage());}}/*** 处理请求参数** param request 请求* return 结果*/public static HashMapString, Object getRequestData(HttpServletRequest request) {HashMapString, Object paramsMap new HashMap(); //重新定义请求的参数MapString, String[] map request.getParameterMap(); //请求中的map数组for (String key : map.keySet()) { //遍历数组String[] value map.get(key);if (value.length 1) {paramsMap.put(key, map.get(key)[0]);} else {paramsMap.put(key, value);}}return paramsMap;}推流、断流日志 09:44:32.770 [http-nio-8082-exec-13] INFO extend-tiktok - [callback,44] - 开始推流{appzyt.***.com, node117.49.93.167, appnameTtSCpj, width1080, actionpublish, idD6v3Su5mMQ, time1723599872, usrargsvhostzyb.***.comauth_key1723603295-0-0-487e7adb13e00bdda7e7c6cbd97f88f8ali_publisherali_edge_node_ip117.49.93.167ali_node_vialive13.cn4435%2clive15.l2et135-3ali_node_ip10.120.24.162#26%2c118.178.204.227#6alilive_streamidv2live13.cn4435_2955_3699959155_1723599872186alilive_clienthostlive15.l2et135-3orig_tc_urlrtmp://zyt.***.com/TtSCpj, height1920} 09:46:06.204 [http-nio-8082-exec-15] INFO extend-tiktok - [callback,50] - 推流中断{appzyt.***.com, node117.49.93.167, appnameTtSCpj, width1080, actionpublish_done, idD6v3Su5mMQ, time1723599966, usrargsvhostzyb.***.comauth_key1723603295-0-0-487e7adb13e00bdda7e7c6cbd97f88f8ali_publisher_ipali_edge_node_ip117.49.93.167ali_node_vialive13.cn4435%2clive15.l2et135-3ali_node_ip10.120.24.162#26%2c118.178.204.227#6alilive_streamidv2live13.cn4435_2955_3699959155_1723599872186alilive_clienthostlive15.l2et135-3orig_tc_urlrtmp://zyt.***.com/TtSCpj, height1920} 09:46:25.407 [http-nio-8082-exec-64] INFO extend-tiktok - [callback,44] - 开始推流{appzyt.***.com, node117.49.93.167, appnameSrvv66, ip, width1080, actionpublish, idb974e1hqmy, time1723599985, usrargsvhostzyb.***.comauth_key1723603558-0-0-c54c7bad6bde755300bac0efb5ae44b7ali_publisher_ipali_edge_node_ip117.49.93.167ali_node_vialive6.cn4435%2clive3.l2et135-3ali_node_ip10.120.24.217#26%2c118.178.204.215#6alilive_streamidv2live6.cn4435_3485_3698551537_1723599984805alilive_clienthostlive3.l2et135-3orig_tc_urlrtmp://zyt.***.com/Srvv66, height1920} 09:53:58.001 [http-nio-8082-exec-53] INFO extend-tiktok - [callback,50] - 推流中断{appzyt.***.com, node117.49.93.167, appnameSrvv66, ip, width1080, actionpublish_done, idb974e1hqmy, time1723600437, usrargsvhostzyb.***.comauth_key1723603558-0-0-c54c7bad6bde755300bac0efb5ae44b7ali_publisher_ipali_edge_node_ip117.49.93.167ali_node_vialive6.cn4435%2clive3.l2et135-3ali_node_ip10.120.24.217#26%2c118.178.204.215#6alilive_streamidv2live6.cn4435_3485_3698551537_1723599984805alilive_clienthostlive3.l2et135-3orig_tc_urlrtmp://zyt.***.com/Srvv66, height1920} 11:01:52.914 [http-nio-8082-exec-18] INFO extend-tiktok - [callback,44] - 开始推流{appzyt.***.com, node58.222.29.233, appnameSrvv66, ip, width1080, actionpublish, idb974e1hqmy, time1723604512, usrargsvhostzyb.***.comauth_key1723603558-0-0-c54c7bad6bde755300bac0efb5ae44b7ali_publisher_ipali_edge_node_ip58.222.29.233ali_node_vialive1.cn3421%2clive15.l2et135-3ali_node_ip10.120.25.6#26%2c118.178.204.227#6alilive_streamidv2live1.cn3421_76677_2481419939_1723604511502alilive_clienthostlive15.l2et135-3orig_tc_urlrtmp://zyt.***.com/Srvv66, height1920} 11:14:48.320 [http-nio-8082-exec-65] INFO extend-tiktok - [callback,50] - 推流中断{appzyt.***.com, node58.222.29.233, appnameSrvv66, ip, width1080, actionpublish_done, idb974e1hqmy, time1723605288, usrargsvhostzyb.***.comauth_key1723603558-0-0-c54c7bad6bde755300bac0efb5ae44b7ali_publisher_ipali_edge_node_ip58.222.29.233ali_node_vialive1.cn3421%2clive15.l2et135-3ali_node_ip10.120.25.6#26%2c118.178.204.227#6alilive_streamidv2live1.cn3421_76677_2481419939_1723604511502alilive_clienthostlive15.l2et135-3orig_tc_urlrtmp://zyt.***.com/Srvv66, height1920}直播记录
http://www.dnsts.com.cn/news/125840.html

相关文章:

  • 谷歌优化工具上海优化网站公司哪家好
  • 关键词查找网站移动网站制作价格
  • 禅城区做网站策划腾讯云服务器租用
  • 南京做网站的网络公司后台更改公司网站背景图片
  • dede 网站地图模版什么是手机网站
  • 自己公司产品网站的好处网站开发人员绩效如何计算
  • 网站建设费应入什么科目柳州网站网站建设
  • 中国上市公司名单大全东莞债优化
  • 网站介绍模板网络营销的特点与功能
  • 重庆秀山网站建设费用开发大型网站
  • 北京个人网站开发制作wordpress 上传图片错误
  • wordpress全站ajax网站页面设计需求
  • 网站开发项目合同搜索引擎优化技术都有哪些
  • 怎么查询网站点击量搜索引擎推广成功的案例
  • wordpress安装教程桂林seo代排名
  • 榆林网站建设哪家好深圳网站制作需要多少钱
  • 网站平台建设调研报告做外贸哪个网站看外汇
  • 东营做营销型网站设计网名的特殊符号
  • 南平武夷山网站建设无锡网站建设培训班
  • 网站建设公司小程序电信网站备案
  • 表格做网站工装公司联系方式
  • 东营专业网站建设公司电话东莞网站建设电镀挂具
  • 做排版的网站山东住房和城乡建设部网站
  • 小浪底水利枢纽建设管理局网站精神文明地方联盟网站建设
  • 网站集群建设价格泉州网站制作方案
  • 做网站是百度包年快照wordpress中文版和英文版
  • 怎样创建网站快捷方式重庆 新闻发布会
  • 注册网站英语wordpress 主题添加设置
  • 域名 不做网站重庆做seo网站优化选择哪家
  • 福州开发网站公司建设局的全称