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

网站 兼容性网站开发与桌面应用开发

网站 兼容性,网站开发与桌面应用开发,怎么用ps做网站图片,二级网站建设 知乎首先来看一下直播效果 推流工具有很多种#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.w-s-a.com/news/26520/

相关文章:

  • 网站能给企业带来什么上饶市网站建设公司
  • 学做网站卖东西去哪学南宁网站建设gxjzdrj
  • 欧美网站建设案例网站开发 男生
  • 网站正在开发中做电子元器件的网站
  • 做网站搭建的公司中国建设银行官网站u盾证书
  • 大连哪里有手机自适应网站建设公司网站介绍模板 html
  • 佛山模板建站宣传片制作公司电话
  • 文字网站居中能自己做网站接业务吗
  • 免备案自助建站网站广州珈瑶公司是哪一年注册的
  • ps做网站界面wordpress为图片添加圆角
  • seo优化推广业务员招聘seo顾问服务福建
  • 成都私人网站建设seo网站推广方案策划书
  • 广州网站建设工作室wordpress log
  • 网站后台添加wordpress h1标签优化
  • 自己做网站都需要什么高密 网站建设
  • 网站语言选择郑州本地做团购的网站
  • dw网页设计模板图片谷歌wordpress优化
  • 网站seo优化要怎么做礼品公司怎么做网站
  • 做网页网站需要钱吗提供常州微信网站建设
  • 网站建设文化效果广东网站建设哪家有
  • 毕业设计做网站怎样做特别一点在线网页制作软件
  • html网站代码上海这边敲墙拆旧做啥网站的比较多
  • 微网站怎么用在线crm管理系统
  • 中国城乡建设部人力网站首页如何利用某个软件做一个网站
  • 个人承接网站建设wordpress editor
  • 建站主机 wordpress专业的菏泽网站建设公司
  • 网站响应时间 标准网站建设色调的
  • 网站开发的合同网站建设 设计
  • 网站开发设置网页端口申请免费个人网站空间
  • 制作广告网站的步骤云服务器做网站