美文网首页
webrtc采集视频并设置视频滤镜效果

webrtc采集视频并设置视频滤镜效果

作者: 一叶知秋0830 | 来源:发表于2019-08-12 22:15 被阅读0次

    滤镜介绍

    浏览器中设置视频滤镜使用的是CSS filter,不同浏览器中设置特效的关键字不一样,Chrome、Safari、Opera、Filefox等用的是-webkit-filter,IE使用的filter。(对于百分比的滤镜参数可以是百分比也可以是小数。)

    滤镜 设置方式 说明
    默认 none 默认值,没有效果
    高斯模糊 blur(px) 给图像设置高斯模糊。设置屏幕上以多少像素融在一起, 所以值越大越模糊;如果没有设定值,则默认是0;这个参数可设置css长度值,但不接受百分比值。
    明暗度 brightness(%) 如果值是0%,图像会全黑。值是100%,则图像无变化。其他的值对应线性乘数效果。值超过100%也是可以的,图像会比原来更亮。如果没有设定值,默认是1。
    对比度 contrast(%) 值是0%的话,图像会全黑。值是100%,图像不变。值可以超过100%,意味着会运用更低的对比。若没有设置值,默认是1。
    阴影 drop-shadow(h-shadow v-shadow blur spread color) 设置一个阴影效果,h-shadow(必须)设置阴影水平偏移量,为负时阴影出现在元素左边;v-shadow(必须)设置阴影水平偏移量,为负时阴影出现在元素上边;blur(可选)设置模糊度,值越大,越模糊,则阴影会变得更大更淡,不允许负值 若未设定,默认是0 (则阴影的边界很锐利);spread(可选)设置阴影大小,正值会使阴影扩张和变大,负值会是阴影缩小,若未设定,默认是0 (阴影会与元素一样大小);color(可选)设置颜色,若省略则阴影是透明的。
    灰度 grayscale(%) 将视频图像转换为灰度图像,值为100%则完全转为灰度图像,值为0%图像无变化。值在0%到100%之间,则是效果的线性乘子。若未设置,值默认是0。
    色相旋转 hue-rotate(deg) 给视频图像应用色相旋转。deg设定图像会被调整的色环角度值。值为0则图像无变化。若值未设置,默认值是0deg。该值虽然没有最大值,超过360deg的值相当于又绕一圈。
    反转 invert(%) 反转视频图像,100%是完全反转。值为0%则无变化。值在0%和100%之间,则是效果的线性乘子。 若值未设置,值默认是0。
    透明度 opacity(%) 转化视频的透明程度。值为0%则是完全透明,值为100%则图像无变化。值在0%和100%之间, 若值未设置,值默认是1。
    饱和度 saturate(%) 转换视频饱和度,值为0%则是完全不饱和,值为100%则图像无变化。超过100%的值是允许的,则有更高的饱和度。 若值未设置,值默认是1。
    深褐色 sepia(%) 将视频转换为深褐色,值为100%则完全是深褐色的,值为0%图像无变化。值在0%到100%之间,若未设置,值默认是0;

    代码实现

    首先通过nodejs搭建web服务器,搭建好后将服务启动。然后在public目录下新建一个filter目录,在filter目录下创建一个index.html文件,代码内容如下(各个滤镜效果的参数值是写死的,想看其他参数值的效果直接在代码中更改后刷新看效果)。

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title>webrtc设置视频滤镜</title>
        <script type="text/javascript" src="js/jquery.min.js"></script>
        <script type="text/javascript" src="https://webrtc.github.io/adapter/adapter-latest.js"></script>
    
        <style>
                .none {
                    -webkit-filter: none;
                    filter: none;
                }
    
                .blur {
                    -webkit-filter: blur(4px);
                    filter: blur(4px);
                }
    
                .brightness {
                    -webkit-filter: brightness(0.30);
                    filter: brightness(0.30);
                }
    
                .contrast {
                    -webkit-filter: contrast(180%);
                    filter: contrast(180%);
                }
    
                .grayscale {
                    -webkit-filter: grayscale(100%);
                    filter: grayscale(100%);
                }
    
                .huerotate {
                    -webkit-filter: hue-rotate(180deg);
                    filter: hue-rotate(180deg);
                }
    
                .invert {
                    -webkit-filter: invert(100%);
                    filter: invert(100%);
                }
    
                .opacity {
                    -webkit-filter: opacity(50%);
                    filter: opacity(50%);
                }
    
                .saturate {
                    -webkit-filter: saturate(7);
                    filter: saturate(7);
                }
    
                .sepia {
                    -webkit-filter: sepia(100%);
                    filter: sepia(100%);
                }
    
                .shadow {
                    -webkit-filter: drop-shadow(8px 8px 10px green);
                    filter: drop-shadow(8px 8px 10px green);
                }
    
            </style>
    </head>
    <body>
        <!-- playsinline表示直接在浏览器内播放 -->
        <video autoplay playsinline id="player"></video>
    
        <div>
            <label>滤镜:</label>
            <select id="filter">
                <option value="none">无</option>
                <option value="blur">高斯模糊</option>
                <option value="brightness">明暗度</option>
                <option value="contrast">对比度</option>
                <option value="grayscale">灰度</option>
                <option value="huerotate">色相旋转</option>
                <option value="invert">反转</option>
                <option value="opacity">透明度</option>
                <option value="saturate">饱和度</option>
                <option value="sepia">深褐色</option>
                <option value="shadow">阴影</option>
            </select>
        </div>
    
        <script type="text/javascript" src="js/client.js"></script>
    </body>
    </html> 
    

    如果要使用多个滤镜,每个滤镜使用空格分隔,要注意不同的顺序会产生不同的效果。

    // 同时使用多个滤镜示例
    .myfilter {
        -webkit-filter: contrast(200%) brightness(150%); 
        filter: contrast(200%) brightness(150%);
    }
    

    然后在filter目录下新建一个js目录,在js目录下创建一个client.js文件,代码内容如下:

    'use strict'
    
    const player = $("#player")[0];
    const filterSelect = $("#filter")[0];
    
    start();
    
    // 选择不同的滤镜效果
    filterSelect.onchange = function(){
        player.className = filterSelect.value;
    }
    
    function start(){
        if (!navigator.mediaDevices || !navigator.mediaDevices.getUserMedia) {
            console.log('不支采集音视频数据!');
        }else{
            // 采集音视频数据
            var constrants = {
                video:true,
                audio:true
            };
            navigator.mediaDevices.getUserMedia(constrants).then(gotMediaStream).catch(handleError);
        }
    }
    
    // 采集音视频数据成功时调用的方法
    function gotMediaStream(stream){
        
        player.srcObject = stream;
    }
    
    // 采集音视频数据失败时调用的方法
    function handleError(err){
        console.log(err.name+':'+err.message);
    }
    

    然后打开浏览器在地址栏输入https://192.168.20.242:8081/filter/index.html,如果是第一次运行,会弹出摄像头和麦克风的授权弹框,允许就可以了。通过下拉框选择不同的选项可以查看不同的滤镜效果。

    相关文章

      网友评论

          本文标题:webrtc采集视频并设置视频滤镜效果

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