美文网首页
萤石云的视频封面问题

萤石云的视频封面问题

作者: 简书是什么书 | 来源:发表于2023-08-07 15:06 被阅读0次

    1. 萤石云的视频列表没有封面

    默认获取到的视频列表是没有封面的,好在ys7提供了一个抓取当前画面的接口:


    image.png

    所以,我在用户访问视频列表页的时候,将每个视频都去抓拍一张图片,作为poster使用,如下图:


    20230808145614.jpg

    2. 但是,问题来了

    目前的视频列表只有2条数据的时候,页面加载完成都需要5~8秒的时间,这用户体验能行的?
    循环抓拍图片作为封面这个方案,直接就被pass掉了!要是有10多个视频,那不得抓拍半天啊!!!

    3. 解决

    只能想办法在后台先提前设置好封面,前端访问列表的时候,直接用了!

            Db::startTrans();
            try {
                //是否采用模型验证
                if ($this->modelValidate) {
                    $name = str_replace("\\model\\", "\\validate\\", get_class($this->model));
                    $validate = is_bool($this->modelValidate) ? ($this->modelSceneValidate ? $name . '.add' : $name) : $this->modelValidate;
                    $this->model->validateFailException()->validate($validate);
                }
    
                //抓取摄像头的图片作为封面
                $competition = CompetitionModel::get($params['competition_id']);
                if (!$competition->organizer->appkey || !$competition->organizer->appsecret) {
                    throw new \Exception('主办方的萤石云配置错误');
                }
                $auth = new YS7Auth($competition->organizer->appkey, $competition->organizer->appsecret);
                $client = new YS7Client($auth);
                $res = $client->device->capture($params['deviceSerial'], $params['channelNo']);
                $params['picUrl'] = $res['picUrl'];
                
                //判断是修改还是添加
                $map['deviceId'] = $params['deviceId'];
                $map['competition_id'] = $params['competition_id'];
                $info = $this->model->where($map)->find();
                
                $path = '/uploads/poster/';
                if ($info) {
                    $path .= $info['id'].'.jpg';
                    $result = $this->model->allowField(true)->where($map)->update($params);
                } else {
                    $result = $this->model->allowField(true)->save($params);
                    $path .= $this->model->id.'.jpg';
                }
                if (file_put_contents($path, file_get_contents($res['picUrl']))) {
                    $this->model->allowField(true)->save(['picUrl' => $path]);
                }
                Db::commit();
            } catch (ValidateException|PDOException|Exception $e) {
                Db::rollback();
                $this->error($e->getMessage());
            }
    

    相关文章

      网友评论

          本文标题:萤石云的视频封面问题

          本文链接:https://www.haomeiwen.com/subject/vbegpdtx.html