萤石视频接入api接口示例

api官方文档

文档概述 · 萤石开放平台API文档 (ys7.com)

方法层:

    @Value("${video.appKey}")
    private  String appKey;

    @Value("${video.appSecret}")
    private  String appSecret;

    @Override
    public String getToken(String appKey, String appSecret) {
        OkHttpClient client = new OkHttpClient();
        RequestBody body = new FormBody.Builder()
                .add("appKey", appKey)
                .add("appSecret", appSecret)
                .build();
        Request request = new Request.Builder()
                .url("https://open.ys7.com/api/lapp/token/get")
                .method("POST",body)
                .build();
        try (Response response = client.newCall(request).execute()) {
            if (response.isSuccessful()) {
                String string = response.body().string();
                String token = JSONUtil.parseObj(string).getJSONObject("data").getStr("accessToken");
                return token;
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }


  @Override
    public Result<String> getVideoUrlById(String id) {
        String token = getToken(appKey, appSecret);
        //获取设备编码
        String deviceSerial =this.getBaseMapper().getDetailById(id).getVideoCode();
        if (token==null){
            return Result.error("Key expiration ,please update key");
        }
        OkHttpClient client = new OkHttpClient();
        RequestBody body = new FormBody.Builder()
                .add("accessToken", token)
                .add("deviceSerial", deviceSerial)
                .add("protocol","2")
                .build();
        Request request = new Request.Builder()
                .url("https://open.ys7.com/api/lapp/v2/live/address/get")
                .method("POST",body)
                .build();
        try (Response response = client.newCall(request).execute()) {
            if (response.isSuccessful()) {
                String string = response.body().string();
                String code=JSONUtil.parseObj(string).getStr("code");
                String msg=JSONUtil.parseObj(string).getStr("msg");
                if ("200".equals(code)){
                    String url = JSONUtil.parseObj(string).getJSONObject("data").getStr("url");
                    return Result.OK("success!",url);
                }
                return Result.error(msg);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

pom文件

		<dependency>
			<groupId>com.squareup.okhttp3</groupId>
			<artifactId>okhttp</artifactId>
		</dependency>

### Smartbi 接入萤石视频的方法 为了实现Smartbi接入萤石视频的功能,可以遵循以下方法: #### 准备工作 确保已经注册并开通了萤石的企业版服务,并按照官方指南完成了摄像头的配置以及必要的API权限申请。由于涉及到跨平台的数据调用,可能还需要了解一些基础的HTTP请求方式和JSON数据处理技巧。 #### 获取访问令牌 根据萤石开放平台提供的说明文档[^2],首先需要通过应用密钥(AppKey)和应用秘钥(AppSecret)来换取访问令牌(AccessToken),这是后续所有操作的基础凭证。此过程通常涉及发送POST请求至指定URL,并附带相应的参数组合。 ```json { "appKey": "your_app_key", "appSecret": "your_app_secret" } ``` 成功响应后将会返回包含`accessToken`在内的信息体,用于下一步骤中的身份验证。 #### 查询设备详情与播放链接 利用上一步获得的AccessToken再次发起GET请求以检索特定摄像机的信息及其对应的实时预览地址。具体来说就是调用“获取单个设备信息”的接口来确认目标装置的状态;接着再执行“获取播放地址”的命令取得实际可用的RTMP或HLS格式串流路径。 ```javascript // 假设使用JavaScript作为示例外壳脚本语言 const axios = require('axios'); async function getDeviceLiveUrl(deviceSerial, channelNo, accessToken){ const url = `https://openapi.xsmartos.com/v1/device/${deviceSerial}/channel/${channelNo}/live`; try { let response = await axios.get(url,{ headers:{ 'Authorization': `Bearer ${accessToken}` } }); console.log(response.data); return response.data.playUrls; } catch (error) { throw new Error(`Failed to fetch live URL: ${error.message}`); } } ``` 上述代码片段展示了如何借助Node.js环境下的Axios库完成异步网络通信任务,当然也可以选用其他支持RESTful API交互的技术栈替代之。 #### 将视频嵌入Smartbi报表中 最后,在拿到有效的直播源之后就可以考虑怎样把这些动态影像展示给最终用户看了。对于Smartbi而言,一种可行的做法是在自定义组件里创建一个HTML5 `<video>`标签或者采用第三方插件如Video.js来进行渲染呈现[^3]。同时记得调整好尺寸比例以便于观看体验更佳。 ```html <template> <div class="video-container"> <!-- 使用 Video.js 插件 --> <video id="my-video" class="video-js vjs-default-skin" controls preload="auto" width="640" height="264"> <source :src="playUrl" type='application/x-mpegURL'> </video> </div> </template> <script> import videojs from 'video.js'; export default { props: ['playUrl'], mounted() { this.player = videojs('my-video'); }, beforeDestroy(){ if(this.player)this.player.dispose(); } }; </script> ``` 这段Vue框架内的模板结构能够帮助快速搭建起具备基本功能性的多媒体播放界面,只需传入之前准备好的播放网址即可正常运作起来。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值