查看: 1339|回复: 28
打印 上一主题 下一主题

[求助] 30万米求制作支持视频的macOS版GoldenDict

[复制链接]
  • TA的每日心情
    奋斗
    2019-4-14 02:12
  • 签到天数: 93 天

    [LV.6]常住居民II

    250

    主题

    2966

    回帖

    53万

    积分

    状元

    吃水不忘挖井人

    Rank: 9Rank: 9Rank: 9

    积分
    530980

    灌水大神章笑傲江湖章推广专家QQ 章

    跳转到指定楼层
    1
    发表于 2019-10-29 11:18:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 jonah_w 于 2019-10-29 11:44 编辑

    瞬间升6个状元,同时造福论坛广大macOS用户。


    论坛有一个支持视频的Windows版GoldenDict:

    2019.10.14 最新GoldenDict-Qt5.12.5-vs16.3.3极速不死版--支持动画视频
    https://www.pdawiki.com/forum/thread-33760-1-1.html?x=294297

    也有源码:
    https://github.com/nonwill/goldendict

    希望可以编译一个macOS版本。

    注:因为源码里删除了64位的支持,所以可能需要增加或修改相关源码才能完整编译 which I don't know how to do it…

    希望懂C++或者Qt的大佬可以帮忙弄一下。

    成功后,转账30万米。另送本人制作收费词典4部。或任何可以接受的其他条件。

    如果可以跟随官方源码长期同步更新,送本人制作的所有macOS格式词典,详见下面链接:
    Mac专享词典计划 https://www.pdawiki.com/forum/forum.php?mod=collection&action=view&ctid=428&fromop=my

    谢谢。





    本帖被以下淘专辑推荐:

  • TA的每日心情
    郁闷
    2020-1-8 23:46
  • 签到天数: 83 天

    [LV.6]常住居民II

    5

    主题

    179

    回帖

    6万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    67459
    推荐
    发表于 2019-11-11 18:57:38 | 只看该作者
    本帖最后由 gain_pd 于 2019-11-11 22:53 编辑

    测试了最新的Qtwebkit版本,问题仍然存在,我提了一个issue(https://github.com/qtwebkit/qtwebkit/issues/921),看进度如何。
    暂时从goldendict代码层面解决。

    只能妥协一下,给video强制加preload="none"的标签,等到这个bug修复再改回来。这是最新的编译文件, 处理了video preload标签
    链接:https://pan.baidu.com/s/1wNHutS-XHczl4oKTD_vXiA  密码:koss

    另外词典制作者需要在词典的js文件中涉及到给video的preload属性的地方,一律加上preload="none"标签。
    比如大英百科的EB2010.js, 修改之后的文件如下, EB2010.js.zip (1.69 KB, 下载次数: 1)
    下载之后替换原来目录的文件EB2010.js就不会自动播放视频了。
    具体修改的地方如下:第12行的行数中preload处理更改为none
    1. function EB2010_video_poster(EB_entry){
    2.         var v=EB_entry.getElementsByTagName('video');
    3.         if(!v[0]) return;
    4.         for(var i=0; i<v.length; ++i){
    5.                 v[i].preload='metadata';
    6.                 v[i].poster='eblogo.jpg';
    7.         }
    8. }
    复制代码
    需要改为

    1. function EB2010_video_poster(EB_entry){
    2.         var v=EB_entry.getElementsByTagName('video');
    3.         if(!v[0]) return;
    4.         for(var i=0; i<v.length; ++i){
    5.                 v[i].preload='none';
    6.                 v[i].poster='eblogo.jpg';
    7.         }
    8. }
    复制代码


    大英百科其他地方不用变动
    链接:https://pan.baidu.com/s/1ZzDGvo9-xrdcO4zgs3CdUQ  密码:o2w2

    我能做的暂时就这么多了。感谢nonwill兄和jonah_w兄的指点和帮助。















  • TA的每日心情
    郁闷
    2020-1-8 23:46
  • 签到天数: 83 天

    [LV.6]常住居民II

    5

    主题

    179

    回帖

    6万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    67459
    推荐
    发表于 2019-11-10 02:00:29 | 只看该作者
    本帖最后由 gain_pd 于 2019-11-10 02:10 编辑

    来了一版。
    视频播放参见链接截图视频播放还是参考@nonwill 兄的看法
    1. 因为webkit的实现我并不太了解,自己也在程序源代码级别调试过GoldenDict,在GoldenDict的代码(Qt库级别的代码)中并不能捕获到视频内容的请求信息(或许在qtwebkit的实现中,这部分的处理与QNetWork组件绑定的比较弱吧,webkit的实现代码量巨大,我并没有再深入的去探究),所以不能直接在 GoldenDict代码中直接处理视频文件的读操作,只能用了个折中的方法--视频文件先拷贝到临时目录,然后把source的src重定向到这个文件(在程序退出时候这些文件和临时目录都会自动删除),如此以来,访问视频文件的io操作就交给webkit加文件系统自个儿处理了。这个方案实现容易,当然也考虑过更好地方法---在GoldenDict中实现一个简单的虚拟http服务器,只用来处理大文件请求----但如果考虑这个方案,那为什么不直接使用词典服务器呢,而且这个方案略显复杂,实现起来对GoldenDict的侵略比较大,所以就搁置了----而且说不定哪天qtwebkit的升级版本就能很好的支持视频文件访问了呢(也或许现在就有只是我能力有限并没有发现而已)。也是因为这个原因,使用flash的播放器也不能处理并播放本地文件(这部分跟flash小程序的参数处理有关)。
    复制代码
    mdx中用的是本地路径,非mdd资源文件中的路径。

    有关flash,本来想支持的,要看qtwebkit这个分支的推进程度:https://github.com/qtwebkit/qtwebkit/tree/npapi_mac_v2
    目前不可行。



    演示视频(可能正在审核):https://www.bilibili.com/video/av75155178/

    明天下午补充一下细节。

    链接:https://pan.baidu.com/s/15VBwBi5QVH57KTu7fe1lyQ  密码:70c5




  • TA的每日心情
    郁闷
    2020-1-8 23:46
  • 签到天数: 83 天

    [LV.6]常住居民II

    5

    主题

    179

    回帖

    6万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    67459
    推荐
    发表于 2019-11-10 10:51:30 | 只看该作者
    jonah_w 发表于 2019-11-10 07:42
    刚试了一下,好像不兼容最新版的macOS 10.15 系统
    可以把源码传了github上,我自己编译一个版本再试试。
    ...

    我就是在10.15的机器上测试的。应该是缺少部分动态链接库,我研究下QT在Mac下面的部署。

    我没有改动任何nonwill兄的源码。
    nonwill兄的代码编译只需要做一个工作。把qtwebkit的模块安装到qt的目录下就可以了。

    编译环境:
    Qt 5.13.1 (x86_64-little_endian-lp64 shared (dynamic) release build
    Clang 10.0.0 (clang-1000.11.45.5) (Apple)) on "cocoa"
    OS: macOS 10.15 [darwin version 19.0.0]
    Architecture: x86_64;

    下载https://github.com/qtwebkit/qtwe ... 8-darwin-x64.tar.xz
    解压之后,拷贝到QT的路径/5.13.0/clang_64目录下
    然后就可以编译通过了。

    有关mdx中视频的要求,必须是本地视频,需要修改mdx中所有视频文件的链接。
    nonwill的Windows下面对本地视频也是这个要求。
    具体还要再测试一下。
  • TA的每日心情
    奋斗
    2019-4-14 02:12
  • 签到天数: 93 天

    [LV.6]常住居民II

    250

    主题

    2966

    回帖

    53万

    积分

    状元

    吃水不忘挖井人

    Rank: 9Rank: 9Rank: 9

    积分
    530980

    灌水大神章笑傲江湖章推广专家QQ 章

    4
     楼主| 发表于 2019-10-29 12:49:16 | 只看该作者
    nonwill 发表于 2019-10-29 12:45
    我为楼主补充一下:在mac上,应该是没有应用可以支持flash动画的,这个是乔帮主在世时第一个明确态度不支持 ...

    flash应该不用支持,支持本地视频就可以了
  • TA的每日心情
    郁闷
    2020-1-8 23:46
  • 签到天数: 83 天

    [LV.6]常住居民II

    5

    主题

    179

    回帖

    6万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    67459
    5
    发表于 2019-10-30 11:18:25 | 只看该作者
    我来尝试一下,不敢保证成功,估计需要等到下个星期开始动手了,这个星期还要加班。
    Qt 还没有支持10.15, 我手头只有10.15的机器,不知道可不可以适配成功。
  • TA的每日心情
    奋斗
    2019-4-14 02:12
  • 签到天数: 93 天

    [LV.6]常住居民II

    250

    主题

    2966

    回帖

    53万

    积分

    状元

    吃水不忘挖井人

    Rank: 9Rank: 9Rank: 9

    积分
    530980

    灌水大神章笑傲江湖章推广专家QQ 章

    6
     楼主| 发表于 2019-10-30 12:21:18 | 只看该作者
    gain_pd 发表于 2019-10-30 11:18
    我来尝试一下,不敢保证成功,估计需要等到下个星期开始动手了,这个星期还要加班。
    Qt 还没有支持10.15,  ...

    好的,期待一下。
    应该支持了吧,我的也是10.15,编译官方仓库没有问题。
  • TA的每日心情
    奋斗
    2019-4-14 02:12
  • 签到天数: 93 天

    [LV.6]常住居民II

    250

    主题

    2966

    回帖

    53万

    积分

    状元

    吃水不忘挖井人

    Rank: 9Rank: 9Rank: 9

    积分
    530980

    灌水大神章笑傲江湖章推广专家QQ 章

    7
     楼主| 发表于 2019-11-10 07:42:53 | 只看该作者
    gain_pd 发表于 2019-11-10 02:00
    来了一版。
    视频播放参见链接截图视频播放还是参考@nonwill 兄的看法
    mdx中用的是本地路径,非mdd资源文件 ...

    刚试了一下,好像不兼容最新版的macOS 10.15 系统
    可以把源码传了github上,我自己编译一个版本再试试。
  • TA的每日心情
    奋斗
    2019-4-14 02:12
  • 签到天数: 93 天

    [LV.6]常住居民II

    250

    主题

    2966

    回帖

    53万

    积分

    状元

    吃水不忘挖井人

    Rank: 9Rank: 9Rank: 9

    积分
    530980

    灌水大神章笑傲江湖章推广专家QQ 章

    8
     楼主| 发表于 2019-11-10 10:57:40 | 只看该作者
    gain_pd 发表于 2019-11-10 10:51
    我就是在10.15的机器上测试的。应该是缺少部分动态链接库,我研究下QT在Mac下面的部署。

    我没有改动任何n ...

    必须是本地视频,指的是视频不能打包到mdd吗?我记得windows版是播放mdd里的?
  • TA的每日心情
    郁闷
    2020-1-8 23:46
  • 签到天数: 83 天

    [LV.6]常住居民II

    5

    主题

    179

    回帖

    6万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    67459
    9
    发表于 2019-11-10 11:27:24 | 只看该作者
    本帖最后由 gain_pd 于 2019-11-10 11:29 编辑
    jonah_w 发表于 2019-11-10 10:57
    必须是本地视频,指的是视频不能打包到mdd吗?我记得windows版是播放mdd里的? ...

    是的。mdd里面的视频测试了无法播放。测试资源是坛子里的大英百科,欧陆词典可以播放mdd的视频。
    把大英百科里面的视频解压到本地,然后修改mdx中的视频链接之后,goldendict可以播放。
    我昨晚测试了下nonwill兄的最新Windows极速版本的goldendict,相同的资源,mdd里面也无法播放。您还有其他有视频的mdx吗?我来测试一下
  • TA的每日心情
    奋斗
    2019-4-14 02:12
  • 签到天数: 93 天

    [LV.6]常住居民II

    250

    主题

    2966

    回帖

    53万

    积分

    状元

    吃水不忘挖井人

    Rank: 9Rank: 9Rank: 9

    积分
    530980

    灌水大神章笑傲江湖章推广专家QQ 章

    10
     楼主| 发表于 2019-11-10 11:41:33 | 只看该作者
    gain_pd 发表于 2019-11-10 11:27
    是的。mdd里面的视频测试了无法播放。测试资源是坛子里的大英百科,欧陆词典可以播放mdd的视频。
    把大英百 ...

    现在没有,今天晚些时候,我做一个视频mdd测试下
  • TA的每日心情
    郁闷
    2020-1-8 23:46
  • 签到天数: 83 天

    [LV.6]常住居民II

    5

    主题

    179

    回帖

    6万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    67459
    11
    发表于 2019-11-10 12:54:02 | 只看该作者
    nonwill 发表于 2019-11-10 12:25
    视频测试尽量用 GoldenDict-Qt5.12.5-vs16.3.3极速不死版 这个版本。mingw32那个版本的qtwebkit的版本较 ...

    好的,非常感谢nonwill兄指点,我中午再测试一下。
  • TA的每日心情
    郁闷
    2020-1-8 23:46
  • 签到天数: 83 天

    [LV.6]常住居民II

    5

    主题

    179

    回帖

    6万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    67459
    12
    发表于 2019-11-10 15:59:37 | 只看该作者
    本帖最后由 gain_pd 于 2019-11-10 16:04 编辑

    发现一个问题,mdd资源里有路径影像临时目录创建,导致文件无法加载。现在解决了这个问题,顺便把Mac下的pro文件更新。这下可以直接编译播放视频,下载源码并增加qtwebkit即可。大英百科2010已经测试通过,直接播放mdd里面的视频,无需更改链接。
    https://github.com/GainSury/goldendict
    现在的bug是打开一个页面,视频会自动播放,我还在调试这个问题。另外二进制程序等我晚上研究下部署Qt程序之后放出来。

  • TA的每日心情
    奋斗
    2019-4-14 02:12
  • 签到天数: 93 天

    [LV.6]常住居民II

    250

    主题

    2966

    回帖

    53万

    积分

    状元

    吃水不忘挖井人

    Rank: 9Rank: 9Rank: 9

    积分
    530980

    灌水大神章笑傲江湖章推广专家QQ 章

    13
     楼主| 发表于 2019-11-10 18:34:34 | 只看该作者
    gain_pd 发表于 2019-11-10 15:59
    发现一个问题,mdd资源里有路径影像临时目录创建,导致文件无法加载。现在解决了这个问题,顺便把Mac下的pr ...

    好!太棒了 我吃完饭试下
  • TA的每日心情
    郁闷
    2020-1-8 23:46
  • 签到天数: 83 天

    [LV.6]常住居民II

    5

    主题

    179

    回帖

    6万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    67459
    14
    发表于 2019-11-10 21:43:13 | 只看该作者
    nonwill 发表于 2019-11-10 21:05
    这个问题在windows上也是影响临时目录中的子目录创建的,pro文件应该是不需要修改的(原有已经添加了三个 ...

    pro文件还是有影响的。
    第209行 mac的库链接搜索路径-L$${PWD}/maclibs/lib才被添加,所以之前的添加的-llzo2 -lz -lbz2 无法被找到,应此需要在这行之后添加。不然不能编译通过,报这三个库无法被找到的链接错误。
  • TA的每日心情
    郁闷
    2020-1-8 23:46
  • 签到天数: 83 天

    [LV.6]常住居民II

    5

    主题

    179

    回帖

    6万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    67459
    15
    发表于 2019-11-10 22:49:50 | 只看该作者
    jonah_w 发表于 2019-11-10 18:34
    好!太棒了 我吃完饭试下

    最新编译版本:链接:https://pan.baidu.com/s/1IbvCsHX88sA-csYIks7S4g  密码:ntss可能有bug,一个词条内的所有视频自动播放
    可以试试这个能用吗?
  • TA的每日心情
    郁闷
    2020-1-8 23:46
  • 签到天数: 83 天

    [LV.6]常住居民II

    5

    主题

    179

    回帖

    6万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    67459
    16
    发表于 2019-11-10 22:52:06 | 只看该作者
    本帖最后由 gain_pd 于 2019-11-10 23:00 编辑
    nonwill 发表于 2019-11-10 22:30
    这个现象是有些怪异----可以写个简单用例测试一下看是否是平台特有的问题,mac上的工具链我不熟悉,gd官方 ...

    这是-L和-l的前后顺序问题
    https://stackoverflow.com/questi ... e-gnu-linker-matter
    mac版本的库搜索链接应该写在那三个库之前,现在是之后,所以找不到了,如果避免维护的话,pro文件里面mac的库搜索路径应该放在在那三个库之前。
  • TA的每日心情
    奋斗
    2019-4-14 02:12
  • 签到天数: 93 天

    [LV.6]常住居民II

    250

    主题

    2966

    回帖

    53万

    积分

    状元

    吃水不忘挖井人

    Rank: 9Rank: 9Rank: 9

    积分
    530980

    灌水大神章笑傲江湖章推广专家QQ 章

    17
     楼主| 发表于 2019-11-11 02:40:25 | 只看该作者
    gain_pd 发表于 2019-11-10 22:49
    最新编译版本:链接:https://pan.baidu.com/s/1IbvCsHX88sA-csYIks7S4g  密码:ntss可能有bug,一个词条内 ...

    试了一下大英百科的视频,有几个问题:
    1.
    自动播放视频的时候,没有画面
    2.
    然后改了下mdx源码以后,可以调出画面来了,但好像自动播放会影响使用,因为有些词条下有多个视频会同时播放,声音都混在一起了
    3.好像不可以暂停和继续
    4.进度条拖动一下,鼠标焦点就一直在进度条上了,动鼠标进度条被拖动

    明天试试本地编译一个再试试
  • TA的每日心情
    郁闷
    2020-1-8 23:46
  • 签到天数: 83 天

    [LV.6]常住居民II

    5

    主题

    179

    回帖

    6万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    67459
    18
    发表于 2019-11-11 07:43:06 | 只看该作者
    本帖最后由 gain_pd 于 2019-11-11 07:45 编辑
    jonah_w 发表于 2019-11-11 02:40
    试了一下大英百科的视频,有几个问题:
    1.
    自动播放视频的时候,没有画面

    3,我可以暂停和继续。
    4. 现在是动过进度条之后需要暂停和播放才能继续播放
    晚上回来调试一下。自动播放的问题不知道加上autoplay="0"可不可以解决
  • TA的每日心情
    奋斗
    2019-4-14 02:12
  • 签到天数: 93 天

    [LV.6]常住居民II

    250

    主题

    2966

    回帖

    53万

    积分

    状元

    吃水不忘挖井人

    Rank: 9Rank: 9Rank: 9

    积分
    530980

    灌水大神章笑傲江湖章推广专家QQ 章

    19
     楼主| 发表于 2019-11-11 08:12:44 | 只看该作者
    gain_pd 发表于 2019-11-11 07:43
    3,我可以暂停和继续。
    4. 现在是动过进度条之后需要暂停和播放才能继续播放
    晚上回来调试一下。自动播放 ...

    我设置autoplay 好像没有效果。
    另外刚编译了一下,好像报错了:

    不知道应该怎么改下代码还是我用的qt版本太低
  • TA的每日心情
    郁闷
    2020-1-8 23:46
  • 签到天数: 83 天

    [LV.6]常住居民II

    5

    主题

    179

    回帖

    6万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    67459
    20
    发表于 2019-11-11 08:33:38 | 只看该作者
    jonah_w 发表于 2019-11-11 08:12
    我设置autoplay 好像没有效果。
    另外刚编译了一下,好像报错了:

    忘记提交这个文件了。
    macmouseover.mm
    第124行 if(mouseMutex.tryLock(0)) 这个函数的参数去掉
    改为 if(mouseMutex.tryLock())
  • TA的每日心情
    奋斗
    2019-4-14 02:12
  • 签到天数: 93 天

    [LV.6]常住居民II

    250

    主题

    2966

    回帖

    53万

    积分

    状元

    吃水不忘挖井人

    Rank: 9Rank: 9Rank: 9

    积分
    530980

    灌水大神章笑傲江湖章推广专家QQ 章

    21
     楼主| 发表于 2019-11-11 10:25:52 | 只看该作者
    gain_pd 发表于 2019-11-11 08:33
    忘记提交这个文件了。
    macmouseover.mm
    第124行 if(mouseMutex.tryLock(0)) 这个函数的参数去掉

    嗯,刚编译成功了。编译的版本问题少多了,就只剩下每次查词会自动播放的问题了。
  • TA的每日心情
    郁闷
    2020-1-8 23:46
  • 签到天数: 83 天

    [LV.6]常住居民II

    5

    主题

    179

    回帖

    6万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    67459
    22
    发表于 2019-11-11 10:35:26 | 只看该作者
    nonwill 发表于 2019-11-11 10:27
    我的测试源码中controls是这样写的,不会自动播放,暂停和再播都没问题,至少在win平台是这样的 ...

    可以在代码里面加上检测到video标签自动添加controls标签吗?
  • TA的每日心情
    奋斗
    2019-4-14 02:12
  • 签到天数: 93 天

    [LV.6]常住居民II

    250

    主题

    2966

    回帖

    53万

    积分

    状元

    吃水不忘挖井人

    Rank: 9Rank: 9Rank: 9

    积分
    530980

    灌水大神章笑傲江湖章推广专家QQ 章

    23
     楼主| 发表于 2019-11-11 10:44:21 | 只看该作者
    nonwill 发表于 2019-11-11 10:27
    我的测试源码中controls是这样写的,不会自动播放,暂停和再播都没问题,至少在win平台是这样的 ...

    刚试了这种,还是不行,播放按钮虽然不是播放状态,也没有画面,但却有声音,点击播放按钮进度条会匹配到正在播放的位置,也说明视频的确是在播放。(只有声音,没有画面)
  • TA的每日心情
    郁闷
    2020-1-8 23:46
  • 签到天数: 83 天

    [LV.6]常住居民II

    5

    主题

    179

    回帖

    6万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    67459
    24
    发表于 2019-11-11 11:07:48 | 只看该作者
    本帖最后由 gain_pd 于 2019-11-11 11:12 编辑
    nonwill 发表于 2019-11-11 10:58
    这个是(qt)webkit的问题了----在gd的代码层面可能难以解决----html一旦组织好显示控制基本不受gd控制了 ...

    这似乎是webkit的问题https://bugs.webkit.org/show_bug.cgi?id=178693 ,之前有人在Windows下反映过类似的问题https://github.com/qtwebkit/qtwebkit/issues/610,目前被修复了。
    目前测试的版本是Qtwebkit-releases页面的最新版本QtWebKit 5.212.0 Alpha 3 ,晚上我用master分支编译的版本试试




  • TA的每日心情
    郁闷
    2020-1-8 23:46
  • 签到天数: 83 天

    [LV.6]常住居民II

    5

    主题

    179

    回帖

    6万

    积分

    状元

    Rank: 9Rank: 9Rank: 9

    积分
    67459
    25
    发表于 2019-11-11 11:25:15 | 只看该作者
    nonwill 发表于 2019-11-11 11:19
    http://download.qt.io/snapshots/ci/qtwebkit/
    最好从这个页面下载最新的代码,应该是qt官方参与的非正 ...

    好的,谢谢nonwill兄指点,收获很多