我在6月份写了篇文章《FFMPEG基于内存的转码实例》,讲如何把视频转码后放到内存,然后通过网络发送出去。但该文章只完成了一半,即输入的数据依然是从磁盘文件中读取。在实际应用中,有很多数据是放到内存的,比如播放从服务器接收到的视频,就是在内存中的。时隔2个月,项目终于完成了,虽然在收尾阶段会花费大量时间,但也算空闲了点。于是就继续完善。
让Linux使用malloc申请更多的内存
项目遇到一个问题,程序跑着跑着就会挂掉,从多方信息分析来看,发现在设备的linux系统中,一个进程申请的内存最大只能达到1GB,而设备所用的物理内存是2GB的。我们的程序有多个进程,但主进程只有一个,里面包括几十个线程,有的线程使用了如opencv的模块,占用内存有几百兆。而之前在文章提到的H.264转AVI,也必须将转码后的AVI格式内容放在内存,由于某些原因,系统中的内存使用峰值会达到1GB。但由于我正在搞其它的bug,这个实际是同事研究出来的,我也只是再次多方面地验证了一下。还是在这里记录一下吧。
遇到一个因socket未关闭引发的文件句柄用完问题
“爱提踢斯”项目最近遇到一个问题,当FTP服务器磁盘没有空间时,设备会不断复位——这是测试人员反馈的。我们拿到log后,看到一个通信所用的文件打开失败。不断打印Too many open file,然后超时设备复位。同时我们看到数据库文件打开失败,无法写入数据。一个现象,看到好几处问题。还是从最初的表现来入手。虽然把bug指派给别人,但从时间、进度上考虑,周末还是去加班。而最后,解决了问题。根据老夫目测,是FTP的socket未关闭引起的。
遇到一个在脚本中读取文件内容占用文件句柄的小问题
一般来说,嵌入式设备的程序是上电自动运行的。设备系统启动后会自动运行某些系统级脚本(/ect/rc3.d/下的脚本),最终会运行我们自定义的脚本,在该脚本中会运行应用程序。——这就是系统自动启动的一般做法。
记最近遇到的几个小问题(字符串转整型溢出,汉字乱码,双网卡双默认IP)
这个月很少写文章,因为做着项目。说来惭愧,人当项目经理,我当项目经理,我却既像爹又像娘,似乎凡事亲力,同志们太依赖项目经理了。什么编译环境、SVN提交代码,周报提交,无一不是问过于我。我想不理这事,无奈有的领导太忙,有的开发人员太懒,而我又是“老好人”,只想项目快点结束,于是就出现这种情况了。不过,最主要还是有人推我下坑,说我以前做项目的管理能力行,所以叫我做项目经理了。我都没当过项目经理,哪来的管理能力。
FFMPEG基于内存的转码实例
前面有文章写道,尝试在FFMPEG里面直接使用FTP协议将H.264祼码流封装为AVI视频格式存储到FTP服务器上,遗憾的是以失败告终。然此事须解决,在多方考虑之后,决定使用内存临时存储,而不是写入磁盘文件,一来不必要,二来对磁盘有损耗。
FFMPEG支持内存转码的,但没有现成可用的封装得很好的接口。几经翻阅网络文章,找到了些许方法,结合自己的实验,完成既定目标。网络上暂未发现有此类应用,写出来,尽一人绵薄之力。至于经常偷窃他人成果,亦于此略聊表心意。
记一次FFMPEG转avi视频保存到ftp服务器的失败尝试
记一次由PCI BAR配置不正确引发的硬盘IO调度io_schedule阻塞的经历
H3C三层交换机划分VLAN示例
很久很久之前搞Linux端口转发时,借了一台三层交换机,我拿到手还没拆包装箱。不知道是不是因为工作上的这个原因而买的。不过后来实现的端口转发和三层交换机完全不搭边,就不了了之了。现在领导安排我查查广播风暴的事情,在同一网段里测试过了,就想在不同网段里试试,于是又借了这一台。这次是认真学习了一些配置命令,不过网上大把这类的资料,这里根据资料结合自己的实践,记录一下。