更新时间:2026-04-10 GMT+08:00
分享

代码示例

开发指导中准备样式、引入SDK、获取鉴权信息,启动串流全部功能(除可选功能、proxy.js)整合为如下完整demo。

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>sender</title>
    <style>
        html, body {
            width: 100%;
            height: 100%;
        }


        body {
            margin: 0;
        }


        #box {
            width: 100%;
            height: 100%;
            display: flex;
            justify-content: space-between;
        }


        #container {
            width: 600px;
            height: 100%;
        }


        #left-box {
            width: 30%;
            margin: 30px;
        }


        #right-box {
            width: 30%;
            height: 90%;
            overflow: auto;
            border: solid 1px #000;
            margin: 30px;
            border-radius: 4px;
        }


        input {
            width: 500px;
            height: 30px;
            margin-top: 20px;
            margin-bottom: 20px;
        }


        button {
            padding: 5px;
        }
    </style>
</head>
<body>
<div id="box">
    <div id="left-box">
        <p style="color:red">输入以下参数,单击 初始化player并启动串流 按钮发起串流</p>


        <label for="">domain:</label>
        <input id="domain" type="text" value=""/><br>
        <label for="">user:</label>
        <input id="user" type="text" value=""/><br>
        <label for="">password:</label>
        <input id="password" type="password" value=""/><br>
        <label for="">instance_id:</label>
        <input id="instance_id" type="text" value=""/><br>


        <br>
        <button onclick="enter()">初始化player并启动串流</button>
        <br>
        <button onclick="closeMediaStream()">退出串流</button>
        <br>
    </div>
    <div id="container"></div>
    <div id="right-box"></div>
</div>


<script type="text/javascript" src="./js/kp-client-debug.js"></script>
<script type="text/javascript">
    var client = new KPClient();
    var player = null;
    let deviceInfo;
    let ele = document.getElementById('right-box');
    const domain = document.getElementById("domain").value;
    const user = document.getElementById("user").value;
    const password = document.getElementById("password").value;
    const instanceId = document.getElementById("instance_id").value;


    async function refreshIamToken() {
        return fetch("http://localhost:8080/v3/auth/tokens",
            {
                method: "POST",
                headers: {
                    "Content-Type": "application/json",
                },
                body: JSON.stringify({
                    "auth": {
                        "identity": {
                            "methods": [
                                "password"
                            ],
                            "password": {
                                "user": {
                                    "domain": {
                                        "name": domain
                                    },
                                    "name": user,
                                    "password": password
                                }
                            }
                        },
                        "scope": {
                            "domain": {
                                "name": domain
                            }
                        }
                    }
                }),
                mode: "cors"
            })
            .then(response  => {
                const headers = response.headers;
                for (let [key, value] of headers.entries()) {
                    console.log(`${key}: ${value}`);
                }
                return headers.get('x-subject-token');
            });
    }


    async function refreshDeviceToken() {
        const token = await refreshIamToken();
        return fetch(`http://localhost:8080/v1/instances/${instanceId}/auth`,
            {
                method: "POST",
                headers: {
                    "Content-Type": "application/json",
                    "x-auth-token": token,
                    "x-user-id": "123456",
                    "x-request-id": "0000123456"
                },
                mode: "cors"
            })
            .then(resp => resp.text())
            .then(data => {
                let json = JSON.parse(data);
                if (json["error_code"] === "0") {
                    let deviceToken = json["data"]["device_token"];
                    let deviceId = json["data"]["resource"]["device_id"];
                    let signalUrl = json["data"]["resource"]["rtc"]["ice_signaling"]["signaling_url"]
                    return {deviceToken, deviceId, signalUrl};
                } else {
                    // 请求异常
                    alert(json["error_msg"]);
                }
            });
    }


    async function enter() {
        let obj = {
            mountPoint: document.getElementById('container')
        };
        player = client.createPlayer(obj);
        ele.innerHTML += "<br/>" + "-----------isBrowserSupport:" + player.isBrowserSupport();
        player.on("onStateChange", function (event) {
            ele.innerHTML += "<br/>" + "-----------state changed:" + event.state;
        });
        player.on("onClose", function (event) {
            ele.innerHTML += "<br/>" + "-----------close:" + event.code + " " + event.message;
        });
        const {deviceToken, deviceId, signalUrl} = await refreshDeviceToken();
        deviceInfo = {
            rtcDeviceId: deviceId,
            rtcToken: deviceToken,
            rtcSignalUrl: signalUrl
        }
        window.sessionStorage.setItem('rtc', JSON.stringify(deviceInfo));
        if (deviceInfo) {
            ele.innerHTML += "<br/>" + "-----------创建KPPlayer";
            player.initMediaStream({
                boxid: deviceInfo.rtcDeviceId,
                token: deviceInfo.rtcToken,
                uuid: deviceInfo.rtcToken,
                signaling_url: deviceInfo.rtcSignalUrl
            });
        }
    }


    function closeMediaStream() {
        ele.innerHTML += "<br/>" + "-----------closeMediaStream";
        player.closeMediaStream();
    }
</script>
</body>
</html>

相关文档