剑痴乎

  • Home
  • Category
    • 音视频
    • WebRTC
    • 编程之美
    • Linux
    • Windows
    • 生活点滴
    • 校园生活
  • Reference
    • API参考
    • 实用工具
    • 测试音视频
    • 文档
  • Message Board
  • About
C++
Web

web页面npapi插件资源管理问题

最近写的一个npapi视频插件花了一个月基本搞定了要求功能,最近一直在做测试及优化,然后就是配合前端使用。前端那边有个功能是视频播放区域窗口切换,他找我说切换后浏览器卡住了。我问了他切换是怎么实现的,他每次切换后原有的插件标签都没了,然后加载了新的插件标签。我想了下,原有插件标签没了,相当于这个npapi插件对象拥有的资源都被强行释放了,然后又加载新的插件,一个插件对象本身会占有许多资源,包括内存及显存,每次切换都会不断的释放,初始化,造成很多不必要的开销,甚至导致页面卡顿,最坏的是插件崩溃了。 这种情况下,前端写带有插件界面不能像平时那么随意了。怪不得很多公司做的视频窗口切换都是由插件完成,所有的播放窗口都在一个插件内,插件管理窗口切换,这样前端不用考虑什么内存加载释放问题,但是会导致播放界面不灵活,窗口布局都被插件写死了,限制了前端发挥。我现在做的是一个窗口对应一个插件,界面设计更灵活,有点类似自己实现了一个Html5的video标签。 既然插件不能频繁释放加载,参照线程池思想,我们就让所有的插件对象始终存在,需要时再拿出来,不需要就隐藏,不释放。那如何在页面上隐藏插件标签呢,这里面也是有很多限制条件的。比如:插件标签的父标签不能改变,每个插件本身绑定一个窗口句柄,父标签变了,相当于新窗口了,原来那个插件还是被浏览器强制释放了。所以我们要让插件标签一直存在,通过一些技巧让它不用时暂时消失。我试了下设置父标签:visibility: hidden属性也有问题存在,虽然切换不卡了,但是切换回来视频却不显示了。这问题也是棘手。我自己对前端也是不怎么熟悉,只能找资料了。后面找了很久查到可通过如下方法。 假设插件标签object,我放到一个div中,这个div是浮动的,绝对定位的,当插件要移动位置或者隐藏时,只需要计算好位置,然后把这个浮动的div移动到对应位置即可。我想浏览器内部对绝对定位的标签(脱离文档流)在界面改变后没有释放该标签窗口资源,改变位置也只是移动下该标签窗口,不受其它标签影响,不像其它标签,一改变都要重新释放创建。

2018年6月16日 0comments 1756hotness 0likes Jeff Read all
Web

基于FireBreath的npapi插件在Firefox下的调试

最近要做基于浏览器的视频播放,可以播放各种格式的流。首先为了快速出产品先做一个npapi插件,没用activex,因为IE限制了前端们的想象力与创造力,H5播放技术留在最后面做。刚开始做npapi插件用的是火狐原生api开发,比较繁琐。后面找了一个叫做firebreath的开发框架,开发的插件可以在IE,firefox以及chrome旧版本使用,提高了些开发效率,不过还是很多坑,网上资料也少。 看了一天firebreath官网文档,就开始动手搭建开发环境,搭建还是很快的,下个cmake,python,按官网教程一步步来都不会有问题。 随着播放插件越来越复杂必定少不了调试了。不过发现官网给的插件调试方法用不了。官网给的方法是直接附加到firefox进程,不过进不了断点。后来摸索了下,得附加到plugin-container.exe才可以,火狐这样做也是为了安全与稳定性,将插件与标签页进程做了隔离。附加进程操作如下图: 参考链接: 1)FireBreath:http://www.firebreath.org/

2018年5月15日 0comments 2202hotness 1likes Jeff Read all
生活点滴

对那些自称“精通c++”人的看法

工作三年了,碰到过各种层次的人,也因为一些原因看过很多人的简历。从中我发现有些人喜欢称自己精通C++,有些人在简历中除了C++,感觉没其他什么内容,有些人整天啃着C++语法,其他啥也不会。 就我自己,我从来不敢称自己精通C++,我只敢说熟悉,语言对我而言只是个工具,不懂得大不了去查。这世界上没有一个人精通C++,C++标准那么多,谁会精通,真精通的话,我觉得你一个人先写一个C++编译器给我看看。一般说精通C++的就我认识的基本都是些刚毕业的,如果工作多年还这么说基本是水平很差的,跟刚毕业的没啥区别。我刚毕业时确实比较在意C++,觉得要花大时间掌握C++语法,那时各种C++题目都很熟练,可是没多久就放弃了,因为我发现这纯粹是浪费时间,一点意义也没,实际用到的又有多少。对于语言工具能用的好就可以,更重要的是自己感兴趣,愿意钻研的领域,某个具体问题的解决,牛逼的技术都在语言之外。正是因为这样以及工作原因,我才会钻研音视频,喜欢研究一些音视频相关东西,以及一些技术背后原理。 记得有一个同事说了类似这样一句话:像我工作多年了,C++学得差不多了,你们年轻应该多花时间学习C++。当时我也只是笑了笑,只能呵呵。下面分享一个大牛在知乎上对此的看法:

2017年6月11日 0comments 2583hotness 1likes Jeff Read all
编程之美

网络字节转换到本地字节的函数模板

在做视频文件解析开发时,经常需要进行网络字节到本地字节的转换。在视频文件中,相关数据是以网络字节存储的,比如视频的宽,定义为uint_32类型,读取时我们需要转换为本地字节序才可以得到正确结果。 操作系统自带api可以帮助我们进行字节序的转换,如下所示函数与具体平台无关: [crayon-69bba9328bf9b465218316/] 我们也可以用c++函数模板实现一个,方便使用,我一般都是用自己的函数模板的: [crayon-69bba9328bfa1588251309/]

2016年5月28日 0comments 1479hotness 0likes Jeff Read all
Windows

libcef编译使用--使用VS2015

1.背景 现在好多客户端程序都内嵌浏览器,有的用于实现界面,有的用于实现一些特殊功能,比如网易云音乐,QQ客户端,微信桌面客户端等。如果要内嵌浏览器,传统的方法是加入自带的IE webbrowser activex控件,但是IE对html5标准的支持不是很好,无法完成一些最新的功能。此时webkit就是最好的选择,可是webkit是一个很复杂的工程,编译也非常麻烦。好在有人替我们完成这个工作。有个叫libcef的库,实现了对webkit的封装,我们只需要直接调用就可以了,从而往我们的程序嵌入webkit浏览器,实现我们需要的功能。上面说到的那三个软件都用到了libcef这个库,在这些程序的安装目录下我们可以看到libcef.dll,libEGL.dll等dll文件。 2.生成VS工程文件 从https://cefbuilds.com/下载预编译好的二进制包,我下载的是cef_binary_3.2526.1346.g1f86d24_windows32.7z,2526分支的32位版本。然后解压到本地,比如我的是D:\SDK\cef。虽然需要的dll以及两个lib文件已经帮我们编译好了,但此时libcef还不能直接使用,因为我们还需要libcef_dll_wrapper.lib这个文件,而这个需要我们自己编译,如果没有这个的话,我们运行里面的cefsimple: [crayon-69bba9328d9d9530967787/] 会报如下错误: [crayon-69bba9328d9df534648714/] 都是些 referenced in function _wWinMain@16的错误。 要编译libcef_dll_wrapper.lib文件,需要我们去生成VS工程文件,然后用VS打开编译。此时我们需要用到cmake软件。如下图所示打开cmake软件,设置代码目录以及工程文件生成目录: 接着点击Configure,选择编译器,我用的是默认VS2015自带的: 然后点击Generate即在cef目录下生成VS工程文件: 如下图,目录下已经生成了cef.sln解决方案文件,此时我们打开cef.sln文件 可以看到该解决方案下有5个工程: 编译libcef_dll_wrapper工程即可得到libcef_dll_wrapper.lib文件,然后我们编译运行示例工程cefclient,即可看到一个简单的浏览器,很简单吧。

2015年11月20日 12comments 62106hotness 9likes Jeff Read all
编程之美

MFC自绘带背景颜色标题栏

最近在写一个EDID文件生成器,可以根据输入的一些参数生成EDID文件,大多数字节是固定的,主要是详细时序这几个字节的计算,界面用的是MFC,不过我重绘了,因为MFC原生界面太丑了。下图是EDID生成器初步的效果: 本文主要讲怎么绘制带颜色的标题栏,就像上图的蓝色背景标题栏。 1)首先是根据向导创建一个普通对话框程序,然后修改对话框Border属性为None。 2)在void XXXXDlg::OnPaint()函数中加入如下绘制代码: [crayon-69bba932905d3396486044/] 代码中我除了绘制标题栏,还绘制了程序底部的边框。 3)响应鼠标点击标题栏消息,实现鼠标拖动。在对话框的OnLButtonDown消息中添加如下代码: [crayon-69bba932905d8580406053/] 到此就大功告成了,实现了一个蓝色背景的标题栏。在后面的文章中我还会介绍如何完善该标题栏,加入关闭,最小化按钮。

2015年6月25日 4comments 5185hotness 8likes Jeff Read all
编程之美

VC++获取本机IP地址

IP地址分内网的与外网的,通过下面的VC代码可以获取本机IP(如果连接路由器,会得到两个IP地址,一个内网(192.168.1.*)的,一个外网的)。 [crayon-69bba93291a19278612210/]

2015年6月19日 0comments 2615hotness 4likes Jeff Read all
编程之美

FLTK程序编译错误

最近在写一些小工具,打算用一个体积小,跨平台,不要求界面美观的GUI库,QT太庞大,后来在stackoverflow找到了FLTK这个库,刚好满足我的要求,话说这个GUI库写的界面确实很丑。从FLTK官网下载了1.3.3的代码,解压,打开IDE文件夹里的VisualC2010文件夹中的fltk.sln编译即可得到需要的lib文件(我用的是vs2012),没有什么难度,不明白的可以参考http://www.c-jump.com/bcc/common/Talk2/Cxx/FltkInstallVC/FltkInstallVC.html。 构建我的第一个FLTK程序时遇到了一个问题,程序报如下错误: [crayon-69bba93292448636174261/] 我想我用的是VS编译的,是windows系统啊,又不是linux系统,怎么会报这个错误,而且要用的头文件以及.lib文件我都包含了。后来上谷歌找了一段时间,在一个论坛找到了答案(虽然作者没有明确提出解决方法,但我明白了作者意思),把FL文件夹里的math.h文件移除就可以,重新编译就不会报这个错误了,这解决方法也太暴力了吧。 虽然FLTK写出来的界面很丑,不过对于小工具而言可以了,只有几百Kb的程序,能用就行,只需要简单的几个控件即可。

2015年6月16日 0comments 1833hotness 0likes Jeff Read all
12
Copyright Statement

Unauthorized reproduction or plagiarism in any form is strictly prohibited. For reprint requests, please contact via email.

Recent Comments
Mirzoemele Published at 2 months ago(01 01202613104 06 06pm26) Double blind randomised controlled trial of two to...
PedarPhago Published at 7 months ago(08 08202583109 12 12pm25) Association between selective serotonin reuptake i...
EsielTooft Published at 8 months ago(07 07202573112 29 29am25) International scientific apply guidelines for the ...
dongxuh Published at 8 months ago(07 07202573103 27 27pm25) 真心不错的博客,有机会能一起分享
南南 Published at 8 months ago(07 07202573103 15 15pm25) 写的超棒!

COPYRIGHT © 2026 jianchihu.net. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang