编译CEF, 让其支持音视频播放

因为项目需要,需要让CEF支持播放h.264和mp3视频,但从CEF官网上下载得到的并不支持, 需要自己进行重新编译;在经常大量的搜索后发现, 没有人经常性的编译CEF,有的只是之前的比较老的版本,所以决定自己编译。下面展示成果:

在决定要自己进行编译后,真的是一脸茫然,不知道该如何下手,在花了大量的时间,阅读了大量的材料后,把我的经验写下来,让后来者能少走弯路。

开始

在CEF的官方仓库上有关于如何进行编译的WIKI, 当前的地址是这里,有做了详细的说明。

编译CEF的过程可以手动进行,也有自动化的编译脚本,作为一个只要结果,不要过程的人,我选择了自动化编译 。但在进行自动化编译前,需要把编译系统搭建好,windows下编译的要求:

需要windows 7 以上的系统(我选择了windows server 2016数据中心版), Visual Studio 2017 以上,安装windows SDK 10.0.18362 版本 (千万别要安装其他版本,我就是浪费了好几个小时的时间),Ninja( 这个就不用我们安装,自动化工具会自动安装);

硬件要求:最少8G内存(推荐32G以上),至少90G以上的剩余硬盘空间,要有足够快的网速(100Mbps以上), 足够快的CPU(2.4Ghz 16线程),最好是SSD。

这个要求太高了, 我自己没这么好的电脑,而且只要编译一次,最多3、4天时间,我决定购买阿里云服务器(建议买香港的服务器,因为你知道的一些原因,国内很多文件下载不下来), 本来想用DigitalOcean的,因为没有流量费,还便宜, 但看了下来, 他们不提供windows系统,徒耐何?

等系统购买好后,在document目录下创建一个cef文件夹,先下载安装python(3点几版本就ok, 记得安装的时候要勾上把python加入到系统环境变量), 从这里下载自动化编译脚本,如下放置,并在该目录下创建一个files文件夹,用于存放之后的文件

然后打开cmd, 运行以下命令:

C:\Users\Administrator\Documents\cef>python automate-git.py --download-dir=C:\Users\Administrator\Documents\cef\files --branch=4044 --no-debug-build

其中–download-dir表示用哪个文件夹来存储下载的文件, –brand表示要编译的哪一个cef的分支,这个编号可以从这里获取

然后等待脚本下载各种工具(包括git, Ninja)和源码(chroium源码非常大, 十多个G, 这个是下载时间最长的), 之后的目录如下:

上面的out_打头的文件夹是最后编译生成的

在这之前如果你没有安装好visual studio 2019(文档要求2017以上,我选择了2019), 等源码下载完成后编译时会报错,不用怕, 这个时候安装它,安装完成之后,要修改几个文件,修改(建议安装Notepad++来修改,好用)这几个文件的目的是把音视频播放的功能加进去:

第一个文件:C:\Users\Administrator\Documents\cef\files\chromium\src\third_party\ffmpeg\chromium\scripts\build_ffmpeg.py

找到 configure_flags['Chrome'] 修改成以下内容:

configure_flags['Chrome'].extend([
'--enable-decoder=aac,h264,mp3,mpeg4,amrnb,amrwb,flv',
'--enable-demuxer=aac,mp3,mov,avi,amr,flv',
'--enable-parser=aac,h264,mpegaudio,mpeg4video,h263',
])

第二个要修改的文件是一个头文件

C:\Users\Administrator\Documents\cef\files\chromium\src\third_party\ffmpeg\chromium\config\Chrome\win\ia32\config.h

我这里修改的是32位的目录(ia32), 如果你是要编译64位的, 也要把x64的一起修改了

要第4行的注释去掉,修改下面这样:

define FFMPEG_CONFIGURATION "--disable-everything --disable-all --disable-doc --disable-htmlpages --disable-manpages --disable-podpages --disable-txtpages --disable-static --enable-avcodec --enable-avformat --enable-avutil --enable-fft --enable-rdft --enable-static --enable-libopus --disable-debug --disable-bzlib --disable-error-resilience --disable-iconv --disable-lzo --disable-network --disable-schannel --disable-sdl2 --disable-symver --disable-xlib --disable-zlib --disable-securetransport --disable-faan --disable-alsa --disable-autodetect --enable-decoder='vorbis,libopus,flac' --enable-decoder='pcm_u8,pcm_s16le,pcm_s24le,pcm_s32le,pcm_f32le,mp3' --enable-decoder='pcm_s16be,pcm_s24be,pcm_mulaw,pcm_alaw' --enable-demuxer='ogg,matroska,wav,flac,mp3,mov' --enable-parser='opus,vorbis,flac,mpegaudio,vp9' --extra-cflags=-I/usr/local/google/home/jrummell/chromium/src/third_party/opus/src/include --disable-linux-perf --x86asmexe=nasm --optflags='\"-O2\"' --enable-decoder='theora,vp8' --enable-parser='vp3,vp8' --toolchain=msvc --extra-cflags=-I/usr/local/google/home/jrummell/chromium/src/third_party/ffmpeg/chromium/include/win --enable-cross-compile --cc=clang-cl --ld=lld-link --nm=llvm-nm --ar=llvm-ar --extra-cflags=-O2 --extra-cflags=-m32 --extra-cflags=-imsvc/usr/local/google/home/jrummell/chromium/src/third_party/ffmpeg/../depot_tools/win_toolchain/vs_files/9ff60e43ba91947baca460d0ca3b1b980c3a2c23/win_sdk/Include/10.0.18362.0/um --extra-cflags=-imsvc/usr/local/google/home/jrummell/chromium/src/third_party/ffmpeg/../depot_tools/win_toolchain/vs_files/9ff60e43ba91947baca460d0ca3b1b980c3a2c23/win_sdk/Include/10.0.18362.0/shared --extra-cflags=-imsvc/usr/local/google/home/jrummell/chromium/src/third_party/ffmpeg/../depot_tools/win_toolchain/vs_files/9ff60e43ba91947baca460d0ca3b1b980c3a2c23/win_sdk/Include/10.0.18362.0/winrt --extra-cflags=-imsvc/usr/local/google/home/jrummell/chromium/src/third_party/ffmpeg/../depot_tools/win_toolchain/vs_files/9ff60e43ba91947baca460d0ca3b1b980c3a2c23/win_sdk/Include/10.0.18362.0/ucrt --extra-cflags=-imsvc/usr/local/google/home/jrummell/chromium/src/third_party/ffmpeg/../depot_tools/win_toolchain/vs_files/9ff60e43ba91947baca460d0ca3b1b980c3a2c23/VC/Tools/MSVC/14.23.28105/include --extra-cflags=-imsvc/usr/local/google/home/jrummell/chromium/src/third_party/ffmpeg/../depot_tools/win_toolchain/vs_files/9ff60e43ba91947baca460d0ca3b1b980c3a2c23/VC/Tools/MSVC/14.23.28105/atlmfc/include --extra-ldflags='-libpath:/usr/local/google/home/jrummell/chromium/src/third_party/depot_tools/win_toolchain/vs_files/9ff60e43ba91947baca460d0ca3b1b980c3a2c23/VC/Tools/MSVC/14.23.28105/atlmfc/lib/x86' --extra-ldflags='-libpath:/usr/local/google/home/jrummell/chromium/src/third_party/depot_tools/win_toolchain/vs_files/9ff60e43ba91947baca460d0ca3b1b980c3a2c23/win_sdk/Lib/10.0.18362.0/ucrt/x86' --extra-ldflags='-libpath:/usr/local/google/home/jrummell/chromium/src/third_party/depot_tools/win_toolchain/vs_files/9ff60e43ba91947baca460d0ca3b1b980c3a2c23/win_sdk/Lib/10.0.18362.0/um/x86' --extra-ldflags='-libpath:/usr/local/google/home/jrummell/chromium/src/third_party/depot_tools/win_toolchain/vs_files/9ff60e43ba91947baca460d0ca3b1b980c3a2c23/VC/Tools/MSVC/14.23.28105/lib/x86' --enable-decoder='aac,h264' --enable-demuxer=aac --enable-parser='aac,h264' -enable-decoder=’rv10,rv20,rv30,rv40,cook,h263,h263i,mpeg4,msmpeg4v1,msmpeg4v2,msmpeg4v3,amrnb,amrwb,ac3,flv’ -enable-demuxer=’rm,mpegvideo,avi,avisynth,h263,aac,amr,ac3,flv,mpegts,mpegtsraw’ -enable-parser=’mpegvideo,rv30,rv40,h263,mpeg4video,ac3′"

修改config.h文件

然后修改最后一个文件:

C:\Users\Administrator\Documents\cef\files\out_master\Debug_GN_x86\args.gn

在文件的末尾加上两行

proprietary_codecs=true
ffmpeg_branding="Chrome"

然后再次执行编译命令:

C:\Users\Administrator\Documents\cef>python automate-git.py --download-dir=C:\Users\Administrator\Documents\cef\files --branch=4044 --no-debug-build

然后坐着等吧, 如果一切顺利,几个小时后就可以拿到编译的文件了, 最后的libcef.dll比没有视频的大了好几M。

这也是我第一次体验,一个代码的编译要花5、6个小时的,之前我写delphi, 写go, 那都是秒级的。

最后,如果你不想自己也走一次这个过程(实在是时间长, 还不便宜), 我附上我的成果:

点这里下载:cef_binary_81.3.10+gb223419+chromium-81.0.4044.138_windows32.zip

对了,我们公司招人, 如有兴趣,联系我-

链接: https://pan.baidu.com/s/1VVQ2SANZ28VdW0cv6aWFfw 密码: h73a

关于如何从头打造自己的产品

最近一直在观察,发现好多朋友从公司出来创业后,不管做什么, 都慢慢的偏向做产品这一方向来,而做产品千头万绪,各种事情纠结,甚至是先有鸡还是先有蛋的问题,让人混乱和理不清;而我从毕业开始一直都是在做产品, 到现在做了10年了, 这十年有得有失;从在上家公司成功打造出两款产品,现在一直在持续盈利,到现在创业3年,公司从2人到现在的30多人,自己积累了不少经验和教训;希望可以把我的这些经验教训写下来, 帮助有需要的朋友,希望能带给你们收获。

具体我将从这几个方面分享我的经验:

  1. 如何选择做什么产品?
  2. 如何快速试验产品是否可行?
  3. 如何推广产品?
  4. 如何打造核心竞争力?
  5. 如何提高销售?
  6. 如何做好团队激励?

我将围绕上面几个主题做我的分享,先在这里打个卡

决定打造自己人生的算法和系统

最近看了见识和原则这两本书, 收获很多, 虽然现在因为各种原因还没有打原则这本书看完,其中现在对我感触最深的就是要打造一个自己的算法系统,让自己养成这个习惯,不断的推动自己前进。回顾自己之前的生活,其实在创业之前是目标明确有确定的生活规律或者说是算法;早七晚七,然后从21点开始, 一直完善系统到晚上23点,然后睡觉,早5起床,早七上班。

自从开始创业后,到现在,已经4年了,前一两年因为事情多,杂,逐渐变得没有规律,一直在加班和去加班的路上,一直忙工作上的事情,忽略了生活 和自身的提高,4年里, 没有看什么书, 没有写什么日志,没有什么心得,感觉就是消失的4年,现在回想起来坡为悔恨,现在是时候回归自我。

回归自我先给自己设置一个作息规律先,前一段时间的计划是, 9点上班, 18点忙完工作,然后看一个小时书到19点, 再静坐一些回想总结一下到20点,回家吃饭,执行了一周发现执行不下去了,究其原因,一是下班时间不是固定,有的时候一件事情拖到19点还没有完成,2是家里有小孩子,需要回家照顾,3是20点回家后, 父母等自己吃饭, 吃完饭都快21点了, 这样子下来,晚吃饭又导致自己身体肥胖。

这段时间审视自己的身材,胖了好多,一个人连自己的身材都管不好, 还能管好什么?

计划赶不上变化,但自身算法还是要建立,之前的不适合,先做一个简单修改,后按具体情况逐渐调整完善

初步算法

上述算法自2020年06月2号起开始实行, 本次更新时间为2020年06月01号 23:59分

京东战略

2018 年京东来到了“至暗时刻”,内外问题的集中爆发将京东推上了风口浪尖,士气一度非常低下。但这也正是自我认知、去芜存菁的契机。我们没有时间哭泣,唯有沉着、冷静、埋头苦干才能走出困境。集团迅速成立了战略决策委员会(SDC)、战略执行委员会(SEC)、HR 委员会(HRC)、财务委员会(FC)、技术委员会(TC)。并且用了一年多的时间按照战略、组织、机制、人才、文化、业务六条线进行了梳理。面向新的环境,提出了 Bigboss 管理体系。今天,无论是集团战略还是各个业务条线战略变得逐渐清晰、明了、聚焦;组织按照积木化组织进行打造,重点是协同和创新;机制层面围绕决策机制、激励机制与淘汰机制展开;人才层面按照京东未来需要的 Bigboss 人才,提出了新时期京东用人标准,淘汰了不符合要求的 10% 以上高管;文化上逐步重新梳理了公司新的定位,新版使命和新的价值观;业务上全面授权给业务领导人,并且逐步达成有质量增长的共识。

决策、执行、HR、财务、技术;BigBoss

技术对于前端客户体验、对后端供应链效率、以及对一线员工福祉的提升,能起到多么大的作用了。

捡芝麻捡得再勤劳,也捡不出西瓜的重量

一个西瓜的重量是芝麻的两万多倍,因此,捡芝麻捡得再勤劳,也捡不出西瓜的重量。

方向很重要, 确认重点也很重要

一个人在工作中也常常容易捡芝麻,丢西瓜。那些人习惯于做简单、重复且价值又低的工作, 因为那种工作不需要太动脑筋, 不会遇到 非常大的困难, 但是, 人一旦习惯于这种工作,真正有创造性的工作就做不来了

对于我自己,经常性的花时间在写一些代码,研究一些小技术点, 是不是也是一种捡芝麻,丢西瓜的行为。

要常思考, 少做事, 甚至不做事;把事情分给别人, 安排给下属做。

当我们跳出一般人的思维定式,重新审视人生时就会发现, 可以不做的事情实在太多。接下来,就是下决心少做事情,然后把几件该做的事情做好就行了。

庄子讲, “吾生也有涯, 而知也无涯”, 不仅学习如此, 做事更是如此。 人生成功的秘诀在于做减法,而做减法的关键在于能够跳出一般人的思维方式,找到那些其实无关紧要的事情,然后下决心把那些事情放弃掉。