立即注册 登录
彼岸网 返回首页

天香公主的个人空间 http://www.bian-wang.com/discuz/?10005 [收藏] [复制] [分享] [RSS] https://github.com/txgz999/discuz/wiki

日志

Discuz功能改进:对在日志编辑器里添加视频的改进

热度 3已有 5234 次阅读2014-1-18 03:54 PM |个人分类:Discuz| 如何

Discuz给在网页里添加视频(和音频)提供了一些便利。对给出的视频地址,它们能产生相应的播放器代码,从而将视频嵌入Discuz的网页。这样的地方有三处:网络视频模块,日志编辑器和论坛帖子编辑器。有意思的是这三处的支持程度不尽相同。

在日志编辑器里,当视频链接通过工具条上的"添加视频FLASH或MP3音乐"按钮来加入日志的话,被储存的为BBCode。在网页显示前被转换成了下面的Flash object,所以他们是通过Flash播放器来播放的。在前文“如何在博文中添加可以在iPad上播放的视频”中我们讨论了播放形式:用iFrame让视频服务器按客户端的条件选择合适的播放器。但这个办法并不是总是有效的。它依赖于视频服务器提供这种服务。这两种播放形式使用的链接地址不同,这要求我们能找到适合各自播放方式的链接。在前文我们举例说明了在youtube,优酷和土豆网站上寻找适合第二种播放形式的链接的方法。那如何处理其它视频网站的链接呢?Discuz的程序里包含了对多个网站里不同视频链接形式之间的转换。而且能视客户端的条件选择播放方式。可惜这样好的功能只被用于网络视频模块和论坛帖子编辑器。本文讨论一下如何将这个功能用于日志编辑器,即如何用它来将含有视频信息的BBCode转换为合适的html标签。

让我们先来看一个网络视频的例子:


从中可见视频地址是按原样存来数据库里的。负责显示网络视频模块的程序是source\class\block\html\block_vedio.php (这里有个笔误,应为video):

它里面的getdata函数是通过source\function\function_discuzcode.php里的parseflv函数将视频地址转化为合适的html标签。parseflv按不同网站的视频地址的规律,分别得出youku, toudu, ku6, youtube, sina, sohu, ouou, 56等网站视频的合适地址。

这个函数的最后加入了一段在客户端运行的程序,其中用到了static\js\common.js 里的两个javascript函数mobileplayer和AC_FL_RunContent。第一个检查客户端G是否是移动设备,第二个生成flash object标签。整段程序的作用是在移动设备上为视频加入iframe标签,而在非移动设备上为视频加入flash object标签。


我们接着来讨论一下论坛编辑器:

从 中可见视频和音频是以BB代码的形式存储在数据库里的,但所用的BB标签(media和audio)和日志编辑器用的(flash)不同。负责显示论坛帖 子的程序是source\module\forum\forum_viewthread.php,它是用source\function \function_discuzcode.php里的discuzcode函数来将BB代码转换成html代码的。它处理视频时调用了 parsemedia函数,在parsemedia里有对parseflv的调用。所以论坛编辑器和网络视频模块用的是同样的选择播放器的办法。


最后让我们来看看日志编辑器。上次我们在“如何用Discuz软件包建造社交网站: 在微博里加图片”里介绍过显示博文用的程序source\include\space\space_blog.php依靠source\function\function_blog.php里的blog_flash函数将储存在数据库的视频的BB代码转换成了flash object代码。

如果我们将上面的程序改为调用网络视频使用的parseflv函数,就能按客户端的条件选择合适的播放器。


总结一下,Discuz是个从论坛功能开始逐步发展和扩充的软件,各个部分有些有各自为政的现象。如论坛编辑器和网络视频模块已经有很好的支持各个视频网站和按客户端的条件选择播放器的功能,但这个功能并没有为日志编辑器所利用。希望新的版本能更好地支持多媒体文件。




发表评论 评论 (13 个评论)

回复 天香公主 2016-4-5 10:14 AM
ladyff: 发现问题所在了
你添加视频是用的media标签,而我是用的flash标签
media标签的视频会用iframe来调用,而flash中的依然是用flash ...
嗯,'添加Flash'没有调用parseflv,它用的是parseflash。'添加视频'调用的是parsemedia,这个函数调用了parseflv。
回复 ladyff 2016-4-5 08:01 AM
天香公主: 作为测试,我在贴子里加了
[media=x,500,375]http://v.youku.com/v_show/id_XNTg4MjAwNzUy.html[/media]
得到下面的结果
http://www.bian-wang.com/discuz/data/ ...
发现问题所在了
你添加视频是用的media标签,而我是用的flash标签
media标签的视频会用iframe来调用,而flash中的依然是用flash
回复 天香公主 2016-4-4 11:09 PM
ladyff: 我就随便找了个youku的视频测试了下
发现还是调用swf的方式来处理
而手机版上则会用iframe方式

你说的几个视频网站这个我知道,似乎是定义了youku 土豆还有几个 ...
作为测试,我在贴子里加了
[media=x,500,375]http://v.youku.com/v_show/id_XNTg4MjAwNzUy.html[/media]
得到下面的结果
http://www.bian-wang.com/discuz/data/attachment/album/201604/04/225046prww9h4cvfrqqq44.jpg
注意两条红线,第二条显示我把原来的mobileplayer()改成了true,第一条显示了出现了iframe,虽然我们看到的还是flash,但这是在iframe里显示的flash (iframe和flash并不排斥)。

如果你能给我一个具体的例子(视频地址,如何加到贴子里去的),我们可以再讨论你的例子。
回复 ladyff 2016-4-3 11:56 PM
天香公主: 这和视频的出处有关,也许我前一个答复已经解释了你的观察。如果没有的话,请把视频的地址给我让我试试。总的来说,你最好用个debugger在程序运行时能一步步的观 ...
我就随便找了个youku的视频测试了下
发现还是调用swf的方式来处理
而手机版上则会用iframe方式

你说的几个视频网站这个我知道,似乎是定义了youku 土豆还有几个常见网站。
回复 天香公主 2016-4-3 10:20 PM
ladyff: 这样似乎是不行的,我测试过。强制设置成true之后,依然是按照原来的方式显示
似乎discuz在其他地方还是有判断。 ...
这和视频的出处有关,也许我前一个答复已经解释了你的观察。如果没有的话,请把视频的地址给我让我试试。总的来说,你最好用个debugger在程序运行时能一步步的观察结果,我用的是Devsense的PHP Tools for Visual Studio。
回复 天香公主 2016-4-3 10:14 PM
ladyff: 感谢。
使用iframe其实是有风险的,不知道discuz里面有没有对iframe的source做过滤?
还是说其实传递[flash]这宗标签的时候,过滤也对iframe方式的显示有效 ...
嗯,不是所有视频都能用iframe显示,这需要视频网站的支持,比如你自己网站里的视频就不能放在iframe里。你去看看source/function/function_discuzcode.php里函数parseflv的定义就知道它是对几个著名视频网站一一处理的(我文中写了这次网站的名字)。
回复 ladyff 2016-4-3 08:07 PM
天香公主: 改一下函数 parseflv,将

$enablemobile = $iframe ? 'mobileplayer() ? &quot;<iframe height=\''.$height.'\' width=\''.$width.'\' src=\''.$iframe.'\' fra ...
这样似乎是不行的,我测试过。强制设置成true之后,依然是按照原来的方式显示
似乎discuz在其他地方还是有判断。
回复 ladyff 2016-4-3 07:18 PM
天香公主: 改一下函数 parseflv,将

$enablemobile = $iframe ? 'mobileplayer() ? &quot;<iframe height=\''.$height.'\' width=\''.$width.'\' src=\''.$iframe.'\' fra ...
感谢。
使用iframe其实是有风险的,不知道discuz里面有没有对iframe的source做过滤?
还是说其实传递[flash]这宗标签的时候,过滤也对iframe方式的显示有效
回复 天香公主 2016-4-3 11:35 AM
ladyff: 有没有什么办法让discuz对桌面浏览器也强制使用iframe方式播放视频呢?
改一下函数 parseflv,将

$enablemobile = $iframe ? 'mobileplayer() ? "<iframe height=\''.$height.'\' width=\''.$width.'\' src=\''.$iframe.'\' frameborder=0 allowfullscreen></iframe>" : ' : '';
               
改为

$enablemobile = $iframe ? 'true ? "<iframe height=\''.$height.'\' width=\''.$width.'\' src=\''.$iframe.'\' frameborder=0 allowfullscreen></iframe>" : ' : '';
回复 ladyff 2016-4-3 09:09 AM
有没有什么办法让discuz对桌面浏览器也强制使用iframe方式播放视频呢?
回复 彼岸网 2014-1-25 08:22 AM
狂奔的蜗牛: 阿弥陀佛,这有什么难的?
对你来说是不难,继续念。
阿弥陀佛。
回复 狂奔的蜗牛 2014-1-25 06:14 AM
彼岸网: 这段经太深奥了,得罚蜗牛来念。
阿弥陀佛,这有什么难的?
回复 彼岸网 2014-1-19 12:55 AM
这段经太深奥了,得罚蜗牛来念。

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 立即注册

小黑屋|Archiver|彼岸网  

Powered by Discuz! X3.1 © 2001-2014 Comsenz Inc.
GMT-4, 2024-3-29 07:11 AM , Processed in 0.023252 second(s), 10 queries. ,ApcOn

返回顶部