Ueditor 富文本编辑器 插入 m3u8 和 mp4 视频(PHP)

这篇具有很好参考价值的文章主要介绍了Ueditor 富文本编辑器 插入 m3u8 和 mp4 视频(PHP)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

当前环境:PHP、Ueditor的版本是1.4.3

新的需求是,需要在Ueditor 富文本编辑器中,插入视频播放,并且视频格式有MP4,也有M3U8。

百度编辑器默认的是embed,需要修改下配置。 ueditor.all.jsueditor.config.js这两个文件要改一些东西,具体我这里就不展示了,网上有很多文章都有写。

注意:

创建插入视频字符串,这里也需要判断m3u8,mp4

case 'video':
                var ext = url.substr(url.lastIndexOf('.') + 1);
                if(ext == 'ogv') ext = 'ogg';
                // str = '<video' + (id ? ' id="' + id + '"' : '') + ' class="' + classname + ' video-js" ' + (align ? ' style="float:' + align + '"': '') +
                //     ' controls preload="none" width="' + width + '" height="' + height + '" src="' + url + '" data-setup="{}">' +
                //     '<source src="' + url + '" type="video/' + ext + '" /></video>';
                // break;
                if (ext == 'm3u8') {
                    str = '<video' + (id ? ' id="' + id + '"' : '') + ' class="' + classname + ' video-js vjs-default-skin vjs-big-play-centered" ' + (align ? ' style="float:' + align + '"': '') +
                    ' controls=""  width="' + width + '" height="' + height + '" data-setup="{}">' +
                    '<source src="' + url + '" type="application/x-mpegURL" /></video>';
                } else {
                    str = '<video' + (id ? ' id="' + id + '"' : '') + ' class="' + classname + ' video-js" ' + (align ? ' style="float:' + align + '"': '') +
                    ' controls preload="none" width="' + width + '" height="' + height + '" src="' + url + '" data-setup="{}">' +
                    '<source src="' + url + '" type="video/' + ext + '" /></video>';
                }
                break;

如图:
Ueditor 富文本编辑器 插入 m3u8 和 mp4 视频(PHP)

这里主要说下 video 文件夹中的修改(ueditor\dialogs\video)。

先说 video.js 文件,一般的方法是修改 function createPreviewVideo(url) 方法,把 $G(“preview”).innerHTML 原有的修改为:

$G("preview").innerHTML = '<video class="previewVideo video-js" controls="controls" src="'+conUrl+'" style="width:420;height:280 "></video>';

看图:
Ueditor 富文本编辑器 插入 m3u8 和 mp4 视频(PHP)
回到编辑器中操作插入视频功能,MP4格式的没问题,预览的时候可以播放,插入到编辑器后也可以播放;但是M3U8格式的视频不行,预览和插入后都不能播放。

在 video.html 页面中添加插件videojs:

<link rel="stylesheet" href="/share/js/video/video-js.css">
<script src="/share/js/video/video.min.js"></script>

也不行,好像是js没起作用。

视频弹出框 :

Ueditor 富文本编辑器 插入 m3u8 和 mp4 视频(PHP)
富文本编辑器中:
Ueditor 富文本编辑器 插入 m3u8 和 mp4 视频(PHP)
在本地静态页面测试的时候发现 m3u8 格式的 video 标签,要有type属性:type=“application/x-mpegURL”,但是 mp4 格式的加上“application/x-mpegURL”,却不能播放了。

所以在 video.js 里面写了一个判断,根据视频格式写不同的 type:

       $G("preview").innerHTML = '<div class="previewMsg"><span>'+lang.urlError+'</span></div>'+if (conUrl.substr(-3) == '3u8') {
            $G("preview").innerHTML = '<video class="previewVideo video-js" controls="" data-setup="{}" style="width:420;height:280" id="1"><source src='+conUrl+' type="application/x-mpegURL"></source></video>';
            var vid = document.getElementById('preview');
            var player = videojs(vid);
        } else {
            $G("preview").innerHTML = '<video class="previewVideo video-js" controls="controls" src="'+conUrl+'" style="width:420;height:280 "></video>';
        }

重新插入 m3u8 格式的视频,发现预览和插入后还是不能播放,mp4格式的视频在预览和插入后都可以播放。

抱着试一试的想法,点了提交按钮,发现在预览页面中可以播放,前提是要在预览页(detail.php)中引用videojs

<link rel="stylesheet" href="/share/js/video/video-js.css">
<script src="/share/js/video/video.min.js"></script> 
<script>
    $('video.video-js').each(function(i, e) {
        var id = e.id
        var vid = document.getElementById(id);
        var player = videojs(vid);
    })
</script>

如图:
Ueditor 富文本编辑器 插入 m3u8 和 mp4 视频(PHP)
同理,在前台页面中引用video.js,也可以播放 m3u8 的视频,只是不能在编辑的时候播放。

但是还有个问题,如果插入多个m3u8的视频,它们的id都是一样的,只有一个视频可以播放

Ueditor 富文本编辑器 插入 m3u8 和 mp4 视频(PHP)
我想在 ueditor.all.js 文件中发现视频部分在前面修改的时候被注释掉了,打开就可以了:
Ueditor 富文本编辑器 插入 m3u8 和 mp4 视频(PHP)
效果如图:
Ueditor 富文本编辑器 插入 m3u8 和 mp4 视频(PHP)
修改下js代码,功能是播放其中一个视频的时候,其他视频都暂停播放:

$('video.video-js').each(function(i, e) {
        var id = e.id
        var vid = document.getElementById(id);
        videojs(vid).ready(function(){
        this.on("play", function(e) {
            //pause other video
            $(".video-js").each(function (index) {
                if (i !== index) {
                    this.player.pause();
                }
            });
        });
    });
})

初步实现了需求,只是在视频弹出框预览时,和在ueditor编辑器中不能播放m3u8的视频,但是mp4的视频都可以播放;而在后台预览页,与前台正式页面中,视频的播放都没有问题。

进一步优化

Ueditor 富文本编辑器 插入 m3u8 和 mp4 视频(PHP)
视频弹出框中底部的按钮,我实在没有找到在哪里定义,或者封装的,就想了一个比较笨的方法,把原始的按钮注释掉,自己重新写2个按钮,实现预览和插入功能。

ueditor.css修改:

.edui-default .edui-dialog-foot {
    background-color: white;
    display: none; /* 隐藏视频弹窗底部按钮 */
}

video.html修改:

<!--把div改下-->
<video-js id="preview" class="vjs-default-skin vjs-big-play-centered" controls preload="auto" width="420" height="280">

</video-js>

<!--自己定义的按钮-->
<div>
      <input type="button" id="btn_preview" value="预览" />
      <input type="button" id="btn_insert" value="确认" />
</div>

<!--js代码-->
<script>
    $(function () {
        $("#btn_preview").click(function () {
            var url = $("#videoUrl").val();
            if (url.substr(-3) == '3u8') {
                $("#preview").html('<source src="' + url + '" type="application/x-mpegURL">');
                var vid = document.getElementById('preview');
                var player = videojs(vid);
            } else {
                $G("preview").innerHTML = '<video class="previewVideo video-js" controls="controls" src="'+url+'" style="width:420;height:280 "></video>';
            }
        });
        $("#btn_insert").click(function () {
            var url = $("#videoUrl").val();
            if (url.substr(-3) == '3u8') {
                var guid = generateGUID();           
                var html = '<video class="video video-js vjs-default-skin vjs-big-play-centered" id="' + guid + '" controls preload="auto" width="420" height="280">' +
                ' <source src="' + url + '" type="application/x-mpegURL" />' +
                '</video>' 
            } else {
                var html = '<video controls preload="auto" width="420" height="280">' +
                ' <source src="' + url + '" />' +
                '</video>'
            }
            UE.getEditor('content_content_main').execCommand('insertHtml', html);
        });

        function generateGUID() {
         return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
            var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
            return v.toString(16);
         });
        }
});
</script>

video.js修改:
Ueditor 富文本编辑器 插入 m3u8 和 mp4 视频(PHP)
Ueditor 富文本编辑器 插入 m3u8 和 mp4 视频(PHP)
Ueditor 富文本编辑器 插入 m3u8 和 mp4 视频(PHP)
重新插入m3u8视频:预览效果
Ueditor 富文本编辑器 插入 m3u8 和 mp4 视频(PHP)
到此,视频弹窗的预览效果实现了,不过还有一个问题,就是视频插入后,在富文本编辑器中还是不能播放m3u8的视频。

有什么好的方案欢迎给我留言。

补充:不用自定义预览和确认按钮,用原始的按钮也可以实现在预览时播放视频(上面优化的部分不用改,只做下面修改)

video.html:

<!--把div改下-->
<video-js id="preview" class="vjs-default-skin vjs-big-play-centered" controls preload="auto" width="420" height="280">

</video-js>

video.js:

       if (conUrl.substr(-3) == '3u8') {
            $("#preview").html('<source src="' + conUrl + '" type="application/x-mpegURL">');
                var vid = document.getElementById('preview');
                var player = videojs(vid);
        } else {
            $G("preview").innerHTML = '<video class="previewVideo video-js" controls="controls" src="'+conUrl+'" style="width:420;height:280 "></video>';
        }

Ueditor 富文本编辑器 插入 m3u8 和 mp4 视频(PHP)
实测也可以实现预览时播放m3u8视频:
Ueditor 富文本编辑器 插入 m3u8 和 mp4 视频(PHP)

新需求:要增加视频封面功能

1、在 video.html 页面增加封面图的输入框:id 自己起名字

<tr>
      <td><label for="coverUrl" class="url"><var id="lang_cover_url"></var></label></td>
      <td><input id="coverUrl" type="text"></td>
</tr>

2、在 zh-cn.js 文件中增加封面的标签文字:全局搜索“视频网址”就能找到添加的地方了

'lang_cover_url':"封面网址",

Ueditor 富文本编辑器 插入 m3u8 和 mp4 视频(PHP)
3、在 video.js 页面接收封面参数值:

/**
     * 将单个视频信息插入编辑器中
 */
function insertSingle(){
        var width = $G("videoWidth"),
            height = $G("videoHeight"),
            url=$G('videoUrl').value,
            coverUrl = $G('coverUrl').value,
            align = findFocus("videoFloat","name");
        if(!url) return false;
        if ( !checkNum( [width, height] ) ) return false;
        editor.execCommand('insertvideo', {
            url: convert_url(url),
            width: width.value,
            height: height.value,
            align: align,
            coverUrl: coverUrl
        }, isModifyUploadVideo ? 'upload':null);
}

4、在 ueditor.all.js 中,添加 poster 属性

搜索:me.commands["insertvideo"] ,然后修改如下:

html.push(creatInsertStr( vi.url, vi.width || 420,  vi.height || 280, id + i, null, cl, 'video', vi.coverUrl));

在修改 creatInsertStr 方法:注意是“video插件, 为UEditor提供视频插入支持”

function creatInsertStr(url,width,height,id,align,classname,type,imgUrl){
// 。。。

     case 'video':
                var ext = url.substr(url.lastIndexOf('.') + 1);
                if(ext == 'ogv') ext = 'ogg';
                // str = '<video' + (id ? ' id="' + id + '"' : '') + ' class="' + classname + ' video-js" ' + (align ? ' style="float:' + align + '"': '') +
                //     ' controls preload="none" width="' + width + '" height="' + height + '" src="' + url + '" data-setup="{}">' +
                //     '<source src="' + url + '" type="video/' + ext + '" /></video>';
                // break;
                if (ext == 'm3u8') {
                    str = '<video' + (id ? ' id="' + id + '"' : '') + ' class="' + classname + ' video-js vjs-default-skin vjs-big-play-centered" ' + (align ? ' style="float:' + align + '"': '') +
                    ' controls=""  width="' + width + '" height="' + height + '" data-setup="{}" poster="'+imgUrl+'">' +
                    '<source src="' + url + '" type="application/x-mpegURL" /></video>';
                } else {
                    str = '<video' + (id ? ' id="' + id + '"' : '') + ' class="' + classname + ' video-js" ' + (align ? ' style="float:' + align + '"': '') +
                    ' controls preload="none" width="' + width + '" height="' + height + '" src="' + url + '" data-setup="{}" poster="'+imgUrl+'">' +
                    '<source src="' + url + '" type="video/' + ext + '" /></video>';
                }
                break;

// 。。。
}

测试成功。文章来源地址https://www.toymoban.com/news/detail-501048.html

到了这里,关于Ueditor 富文本编辑器 插入 m3u8 和 mp4 视频(PHP)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 秀米编辑器(xiumi)+百度编辑器(Ueditor) 集成 :解决集成问题,秀米编辑器导出到百度编辑器格式问题,图片保存到自己的服务器(阿里云OSS)

    1.集成前提条件:         1. 需要集成 百度编辑器 到环境中         2. https 环境下才可以导出数据到百度编辑器,如果不是https环境,会出现错误          然后我们开始讲解如何集成: 2.引入资源: //百度编辑器 需要修改的文件(配置与原始的配置不一样,后面

    2024年02月09日
    浏览(40)
  • 实战纪实 | 编辑器漏洞之Ueditor-任意文件上传漏洞 (老洞新谈)

    前言 前段时间在做某政府单位的项目的时候发现存在该漏洞,虽然是一个老洞,但这也是容易被忽视,且能快速拿到shell的漏洞,在利用方式上有一些不一样的心得,希望能帮助到一些还不太了解的小伙伴,故此写了此篇文章。 1.1 漏洞描述 Ueditor是百度开发的一个网站编辑器

    2024年04月26日
    浏览(35)
  • vue项目百度ueditor编辑器集成135和秀米,主题图标美化

    本文介绍vue项目里引入百度Ueditor富文本编辑器,集成135编辑器和秀米编辑器,使内容编辑更加丰富,跳转体验更加丝滑。再封装成组件,使用更加快捷。 编辑器主界面 弹框打开135编辑器 弹框打开秀米编辑器 操作说明:ueditor编辑器菜单栏集成135和秀米图标,点击分别弹框打

    2024年02月05日
    浏览(51)
  • AJAX + PHP 编辑器内容自动备份草稿保存到本地 (适用ueditor百度编辑器或其它) 内容变化后自动触发备份txt文件

    百度自带的自动备份功能enableAutoSave存在问题, 比如第一个文章他自动备份了.等发表第二个文章时,结果把第一个文章的内容自动填充进去了.关键你还不知情!出现过多次这种情况了. 一, 百度原版的 ,具体使用方法,看这里个文章 Ueditor百度编辑器内容自动保存到本地防数据丢失

    2024年02月10日
    浏览(48)
  • 视频爬虫:解析m3u8文件 python m3u8库,m3u8文件中.ts视频流的解密下载

    这里需要引用的库是: from Crypto.Cipher import AES 有坑哈, python3.0 之后直接安装crypto你会发现不管怎么着都会报错。 经过查找资料找到了原因,原来是20年之后crypto已经被pycryptohome替换掉啦, 如果之前安装过crypyo 活pycrypto需要先卸载 然后再安装 pycryptohome 就可以啦 首先我们需

    2024年02月14日
    浏览(52)
  • 【富文本编辑器实战】02 编写编辑器配置文件

    本篇文章主要内容是项目的配置文件的编写与讲解,包括菜单项配置、语言配置、总体配置。 下图是编辑器的总体结构: 编辑器大致可以分为两个部分,菜单栏(图中的 1)和下面的编辑器(图中的 4)。其中菜单栏的内容较多,每个菜单项都包含了图标,说明文字(图中的 2)。部

    2024年01月21日
    浏览(49)
  • 【富文本编辑器实战】04 菜单组件和编辑器的整合

    在上一篇文章中,我们对整个编辑器项目的大体结构有了一定的了解,主要分为菜单栏和编辑区。菜单栏包括了编辑器的主要文本操作功能,且菜单项是可配置的。编辑器界面显示比较简单,是一个可编辑的 div 区域。接下来我们就来把编辑器的整体框架搭建起来,让其可以

    2024年01月24日
    浏览(64)
  • dede编辑器修改成纯文本编辑器的方法

    我在做优秀啦网站大全的时候需要的正文内容都不需要设置什么文字样式,所以我需要把编辑器上的工具全部取消掉,包括会员投稿中的编辑器工具栏全部取消掉或者屏蔽隐藏掉,所以我需要把DEDE编辑器修改成纯文本编辑器的方法如下: 如图: 首先打开 /include/ckeditor/ckedi

    2024年02月16日
    浏览(36)
  • Vim文本编辑器

    目录 一、Vim文本编辑器   1.1、什么是Vim文本编辑器 1.2、Vim文本编辑器基本格式 1.3、Vim的三种模式及切换 ​二、命令模式 2.1、Vim的进入与退出 2.2、命令模式下光标跳转的快捷键 2.3、常用命令集合 三、编辑模式 四、末行模式 Linux 系统中“一切皆文件”,因此当我们要更改

    2024年02月10日
    浏览(52)
  • 富文本编辑器

    啥是富文本编辑器,就是下面这个东西: 1.那这玩意儿怎么安装和配置: 2. 通过(在终端里输入)  npm install vue-quill-editor --save  安装 3.具体的在项目里的配置过程可以看最新的官方文档vue-quill-editor · Quill官方中文文档 · 看云 4.这里先简单说下怎么配置,首先在main里输入:

    2024年02月10日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包