利用阿里云加密播放视频

418 阅读1分钟

vue3+vite项目中,使用阿里云加密播放视频,防止用户私自保存下载传播,保护视频资源的数据安全。

index.html的head标签中添加这两行代码

// 本地文件放public文件夹里
<link rel="stylesheet" href="/ali/2.9.17/aliplayer-min.css" />
<script charset="utf-8" type="text/javascript" src="/ali/2.9.17/aliplayer-min.js"></script>
// 或者使用线上地址
<link rel="stylesheet" href="https://g.alicdn.com/de/prismplayer/2.8.2/skins/default/aliplayer-min.css" />
<script charset="utf-8" type="text/javascript" src="https://g.alicdn.com/de/prismplayer/2.8.2/aliplayer-min.js"></script>

页面中写一个div容器

// id与loadVideo()中的id对应
<div id="ali-video"></div>

后台接口:通过videoId请求接口,获取到阿里云解析需要的数据(示例)

{
    "playAuth": "eyJTZWN1cml0eVRva2VuIjoiQ0FJU2lBTjFxNkZ0NUIyeWZTaklyNWI3Rzg3L3ViMUU0THVGTUdHRXFsa1hUYnBLb2ZUbHJEejJJSHRQZkhKdUFlZ2R2djgwbEc1VjcvY2JscklxRThRZEhCeWZOSnNydnM0R3FGbitKb0hidk5ldTBic0hoWnY5cDV0KzkrT2lqcUhvZU96Y",
    "requestId": "5EC2E3DA-8D65-574D-9F9A-2A6B1F3E3A51",
    "videoMeta": {
        "status": "Normal",
        "duration": 2902.848,
        "title": "0411魏立新最终.mp4",
        "videoId": "efdb9be00be471ee867d34b6fdcb0102",
        "coverURL": "http://outin-2bb5bf4705d811eea2dc00163e038793.oss-cn-beijing.aliyuncs.com/efdb9be00be471ee867d34b6fdcb0102/snapshots/5dc1f505172a488eaa92e10d2e0c6962-00004.jpg?Expires=1689305797&OSSAccessKeyId=LTAI5tGo8c8H9HqS5BEfcU3U&Signature=gAbcb2i1pZhZjkaAx6V5iiYsukM%3D"
    }
}

调用阿里云方法

// 调用loadVideo方法,res.data是上文中的示例数据
loadVideo(res.data);

// 视频加密播放
function loadVideo(obj) {
    setTimeout(() => {
        const player = new Aliplayer({
            id: "ali-video",
            width: "100%",
            height: "100%",
            preload: true,
            autoplay: true,
            useH5Prism: true,
            playsinline: true,
            controlBarVisibility: "hover",
            isLive: false,
            rePlay: false,
            encryptType: "1", // 播放加密视频设置encryptType=1,非加密视频注释掉,调试可以注释防止debugger
            vid: obj.videoMeta.videoId, //必选参数。音视频ID。示例:1e067a2831b641db90d570b6480f****。
            playauth: obj.playAuth, //必选参数。音视频播放凭证。
        });
    }, 100);
}