随笔分类 - UNIX &Linux
摘要:昨天要在视频转发程序里增加转码功能:就是将输入(流/文件)转码成指定格式的视频流和音频流。研究了一下,发现vlc里自带了转码功能,只不过参数设置比较麻烦。我们具体的需求是:输入:rtsp流或者udp组播数据(对设置转码参数来说,其实没有区别)输出:H264视频(644k)+mp2音频(56k),总码率700k,ts封装,使用udp转发到本地单播调用libvlc时的完整转码参数为:sendudp = "--sout=#duplicate{dst=\"transcode{venc=x264{profile=baseline},vcodec=h264,acodec=mpga,vb
阅读全文
摘要:上周,项目里需要一个视频转发工具,我用libvlc完成了一个,大致流程如下:(1)主进程监听指定端口,接收转发请求;(2)验证请求合法性后,主进程fork一个子进程,在子进程中启动vlc进行转发。但调试时发现了一个小问题:fork出子进程后,在父进程中没有调用waitpid,在子进程退出后, 父进程没有为它“收尸”。于是乎,子进程虽然退出了,但进程号在系统历仍然存在,变成了臭名昭著的“僵尸进程”。问题的根源在于:父进程没有调用waitpid来监测子进程的活动状况,关于waitpid能干什么,请搜索之。。。但是:父进程是单线程(称为监听线程),主要干一件事,那就是调用socket的recvfro
阅读全文
摘要:要做一个视频转发的小工具,使用netbeans建好工程后,需要使用其他项目中使用的一些基础类,于是使用“从文件夹中添加现有项”功能,将需要的源文件和头文件成功添加到项目中。但是在编译项目时,由于这些导入的文件没有被添加到Makefile中,没有被编译成目标文件,在连接时会报错:1 build/Debug/GNU-Linux-x86/main.o: In function `main':2 VideoTransmit/main.cpp:17: undefined reference to `CSocketUDP::CSocketUDP()'3 VideoTransmit/main
阅读全文
摘要:今天继续完成视频转发工具,使用udp监听本地的8003端口,接收用户发送的视频转发请求。程序完成了,自己写个小工具模拟数据请求,来测试程序是否正常工作。这时候,出问题了。测试步骤:(1)在虚拟机(Fecdora Core12)里运行程序(2)在主机里使用工具发送模拟请求(3)查看程序是否正常工作但是,结果是:虚拟机Fecord Core12里监听的socket一直无法接收到主机发送的udp数据包,使用lsof -i查看,程序确实打开了监听端口:[root@chu xsock]# lsof -iCOMMAND PID USER FD TYPE DEVICE SIZE/OFF...
阅读全文
摘要:在最近的项目中,要求把录制程序移植到嵌入式板卡上,原来的vlc模块无法被支持(板卡上无法安装vlc程序以及相应的库),因此要求编译一个去掉vlc模块的版本。折腾半天弄出来了,由于对makefile不熟,很多地方实现的不够理想,仅仅是能用而已。下面是步骤:(1)首先编译源代码在代码中增加编译开关(宏定义):MODULE_WITHOUT_VLC在源代码中所有涉及到vlc模块的 代码处使用该宏定义重写,确保如果定义了MODULE_WITHOUT_VLC,代码也能正常运行(只是不支持vlc模块而已)注意:宏MODULE_WITHOUT_VLC并不需要在源代码中定义,下面会做说明(2)编辑Makefil
阅读全文
摘要:昨天将项目代码放在Fedora Core8上面编译时,g++报错:xxx.c:1: 错误: 程序中有游离的‘\357’xxx:1: 错误: 程序中有游离的‘\273’xxx.c:1: 错误: 程序中有游离的‘\277’ 而之前在Fedora Core12上面编译都没问题, 于是搜索了一下,发现是文件编码的问题:这是由于该文件是以UTF-8 BOM的形式储存的,而所用的编译器不支持这种格式。http://blog.csdn.net/hunhunzi/article/details/6710410于是将相应的文件另存一下,注意不要用使用带BOM的UTF8编码即可。
阅读全文
摘要:今天在项目中查看pthread_create()函数的手册时,居然报没有该手册页:1 chu@chu-laptop/monitor-center-cs$ man pthread_create2 没有 pthread_create 的手册页条目搜索了一下,是要安装一个包:“manpages-posix-dev”1 chu@chu-laptop:monitor-center-cs$ sudo apt-get install manpages-posix-dev 安装后果然就有了posix库的相关手册页了。顺便还看到有其他的库:“manpages-zh”,猜想应该是中文手册页,果然安装后,系统命令的
阅读全文
摘要:录制项目中用到了mysql,今天在测试时发现无法远程连接mysql数据库,原来是mysql默认不允许远程连接。搜索了一下,找到了解决办法,记录在此以备日后查用。 (1)一开始我使用root用户和mysql服务器ip远程连接,直接报错:[root@chu Record]# mysql --host=192.168.110.68 --user=root --passwordEnter password: ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.110.68' (111)原来是默认情况下Mys
阅读全文
摘要:[且作笔记,日后备查]在virtualbox中安装fedora12,由于仅作编译, 通过ssh从主机中直接登录,就没必要开图形界面来浪费资源了。于是修改配置,默认不启动图形界面:#vi /etc/inittab在一行文本id: 5: initdefault: 改为id: 3: initdefault:#reboot搞定。另外,关于的我开发环境略作叙述:(1)代码是放在我的本地硬盘中,我在host机(Ubuntu)中进行使用NetBeans编辑。(2)在virtualbox中运行Fedora12(目标平台,也是我的程序最终的运行平台),通过virtualbox的“共享数据空间”功能,将代码目录映
阅读全文
摘要:受不了Ubuntu 11.10令人崩溃的操作体验,最终还是回到了10.10。重装所有的软件,发现原来经常使用的virtualbox指示器没了,使用apt-get 安装indicator-virtualbox,提示找不到软件包。搜索了一些,原来是要添加一个软件源,具体命令如下:sudo add-apt-repository ppa:michael-astrapi/ppa sudo apt-get update sudo apt-get install indicator-virtualbox搞定了。关于indicator-virtualbox,介绍如下:indicator-virtualbox是
阅读全文
摘要:在上周的测试中,录制程序继续崩溃了。废话少说,请出gdb:(1)首先查看调用堆栈,确定是在哪里崩溃的:1 (gdb) bt2 #0 0x080b33ef in COutputTS::run (this=0x9800568) at http://www.cnblogs.com/src/COutputTS.cpp:1303 #1 0x080c3192 in CThread::run (this=0x98005b0) at http://www.cnblogs.com/src/CThread.cpp:824 #2 0x080c3149 in CThread::run1 (this=0x9800...
阅读全文
摘要:录制程序有一功能:将录制的文件信息写入MySQL数据库,供BS系统查询。因此封装了一个MySQL类,进行数据库操作。主要接口为Update():执行SQL语句。现在问题来了:(一)在某个场景下,我们在向table1中insert一条记录后,需要得到得到它的ID,然后update与之匹配的另一张表table2中的记录。由于insert本身并不返回结果集,因此我们无法直接得到插入记录的ID。那该怎么办呢?之前从BS组得到的方法是:在table1中执行insert后,立即执行另一条语句:“select @@IDENTITY;”;该语句会返回最后插入的那条记录的ID,这样问题就解决了。但是,在一次co
阅读全文
摘要:新版本的录制程序终于快完工了,在添加了一个新特性“报警录制”后,就开始测试了。一开始就不顺利:程序正常运行一段时间后就会崩溃,由于程序添加了守护进程,在崩溃后会自动重启。因此测试得到的结果就是:程序运行一段时间后就自动重启,并不断持续;有时几个小时重启一次,有时甚至每分钟都重启。废话少说,开始定位问...
阅读全文
摘要:在ubuntu的nautilus窗口(对应的就是windows中的资源管理器)中打开目录,有时候想在当前窗口打开终端进行操作,如果选择菜单-》应用程序-》附件-》终端,然后再cd到该目录下,对于我这样的懒人来说,是一件非常麻烦的事。于是我就想,有没有办法通过快捷键直接在当前窗口启动终端?动手之前,先搜索一番。找到了一个脚本:1#!/bin/bash2#Thisscriptopensagnome-terminalinthedirectoryyouselect.3#DistributedunderthetermsofGNUGPLversion2orlater4#Installin~/.gnome2
阅读全文
摘要:经常需要在项目中搜索指定字符串,又不想打开ide,于是自己谢了个简单的搜索工具:搜索指定目录下所有包含指定字符串的文件。很简单:扫描指定目录下的所有文件,依次以文本方式打开所有文件,逐行读取内容进行搜索;如果包含要搜索的字符串,就输出。在输出的时候,使用ascii码对匹配的搜索串做了高亮显示。代码如...
阅读全文
摘要:最近项目中大量使用socket,代码测试时需要模拟各种输入,因此写了个小程序模拟socket输入。因为经常需要测试组播数据,所以加进了udp组播的发送和接收。主要功能:(1)支持发送、接收tcp数据;(2)支持发送、接收udp(以及组播)数据;(3)支持文件输入、输出;(4)支持反复、定时发送;(5)通过不同选项,同一程序既可作为发送端,也可作为接收端。更多详细选项,请看程序说明。代码如下:1#include<stdio.h>2#include<sys/types.h>3#include<sys/socket.h>4#include<netinet/i
阅读全文
摘要:改密码: passwd username 例如:passwd xialu 按提示输入新密码即可。 也可用usermod来修改:usermod -p password 此处的password为指定的已加密密码文件
阅读全文
摘要:这两天闲着,玩一下NB,从Shell下手,碰到点有意思的,顺便记下。 写了个简单的脚本test_2,输出用户的参数: #!/bin/sh if [ $# -lt 2 ] ; then echo "You need 2 paramerters at less!" exit 0 fi ONE="$1" TWO="$2" echo "Your paramerters are:" echo $1 e...
阅读全文

浙公网安备 33010602011771号