侯小啾 2022-06-12 13:25 采纳率: 75%
浏览 140
已结题

前端摄像头处理实时视频问题

问题遇到的现象和发生背景

请求帮忙讲解或者修改代码前端。我的需求是,想要在web前端用摄像头实时拍摄视频,然后不直接显示该视频画面。将每一帧画面传递到后端程序代码中,使用python opencv将图像处理好之后再传回来显示画面(对应img id="video" width="480" height="720" src="{{ url_for('home.video_viewer') }}"这一句)。

其中,我对前端代码中的video.addEventListener("DOMContentLoaded", function () 这一大段代码最不理解,可能也存在问题,请求各位佬讲解或修改一下!
这一段的作用python获取视频数据的代码相对应,对应python代码为:

if request.method == 'POST':
        imgData = base64.b64decode(request.form['imgdata'].replace('data:image/png;base64,', ''))

(即从form标签的imgdata中取到视频数据)(作为参考)

问题相关代码

前端代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        img {
            border: 1px solid #ccc;
            display: block;
            margin: 100px 0 20px 700px;
            float: left;
        }

    </style>
</head>
<body>
    <img id="video" width="480" height="720" src="{{ url_for('home.video_viewer') }}">
    <script type="text/javascript">
    window.addEventListener("DOMContentLoaded", function() {
        var video = document.getElementById("video");
        var videoObj = {"video" : true};
        var errBack = function(error) {
            console.log("Video capture error: ", error.code);
        };
        if (navigator.getUserMedia) {
            navigator.getUserMedia(videoObj, function(stream) {
                video.srcObject = stream;
            }, errBack);
        } else if (navigator.webkitGetUserMedia) {
            navigator.webkitGetUserMedia(videoObj, function(stream) {
                video.srcObject = window.webkitURL.createObjectURL(stream);
            }, errBack);
        } else if (navigator.mozGetUserMedia) {
            navigator.mozGetUserMedia(videoObj, function (stream) {
                video.srcObject = window.URL.createObjectURL(stream);
            }, errBack);
            }
        }, false);


    video.addEventListener("DOMContentLoaded", function () {
        var dataURL = canvas.toDataURL();
        var temp = document.createElement("form");
        temp.action = "http://127.0.0.1:5002";
        temp.method = "post";
        temp.style.display = "none";
        var opt = document.createElement("textarea");
        opt.name ="imgdata";
        opt.value = dataURL;
        temp.appendChild(opt);
        document.body.appendChild(temp);
        temp.submit();
    });

</script>
</body>
</html>
  • 写回答

2条回答 默认 最新

  • 溪风沐雪 2022-06-12 15:51
    关注

    总感觉你这逻辑是错误的,为什么不直接用后端采集视频然后处理完给前端显示呢

    评论
  • 船长在船上 前端领域优质创作者 2022-06-13 08:01
    关注

    一般后台会返回rtsp流地址前端来调用摄像头进行画像或者识别捕捉

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 6月14日
  • 修改了问题 6月12日
  • 修改了问题 6月12日
  • 创建了问题 6月12日

悬赏问题

  • ¥20 matlab报错,vflux计算潜流通量
  • ¥15 自己编写函数strlen(), strcpy(), strcmp(), strcat(), 没有编写main(),为什么测评结果都是错的,哪里出了问题
  • ¥15 我该如何实现鼠标按下GUI按钮时就执行按钮里面的操作的方法
  • ¥15 关于#硬件工程#的问题:我这边有个锁相环电路没有效果
  • ¥15 20款 27寸imac苹果一体机装win10后,蓝牙耳机和音响放歌曲卡顿断断续续.
  • ¥15 求解icon library .icl图标库文件
  • ¥15 VB.NET 父窗体调取子窗体报错
  • ¥15 python海龟作图如何改代码使其最后画出来的是一个镜像翻转的图形
  • ¥15 我不明白为什么c#微软的官方api浏览器为什么不支持函数说明的检索,有支持检索函数说明的工具吗?
  • ¥15 在我想检测ros是否成功安装时输入roscore出现以下