2009年9月17日星期四

ffmpeg的使用,及发送媒体流的一些简单介绍

在以前的文章谈过对ffmpeg的编译。这里谈谈ffmpeg的最简单的使用。

ffmpeg使用语法:

ffmpeg [[options][`-i' input_file]]... {[options] output_file}...

最简单的使用:ffmpeg –i test_mp4.mp4 test_mpg.mpg (将输入的mp4容器格式的文件转换成mpg格式文件)

我在做一些机器人控制实验时常常会得到很多的jpg格式的文件,将这些文件改成连续的名称,例如test_jpg00001, test_jpg00002等等,然后可以通过ffmpeg生成一个视频文件,这会很方便演示,例如:
  ffmpeg -r 15 -b 1800 -i test_jpg00%03d.jpg test_mp4.mp4 (这里,-r 代表fps 设置帧频;–b 代表bitrate 设置比特率; test_jpg00%03d.jpg中%03d代表最后三位数字)

做实验时,直接通过摄像头可以得到raw picture(也就是YUV或RGB文件),这时也可以通过ffmpeg将它们转换成mpg或任意容器格式。例如:ffmpeg -s 320*240 -i test_yuv.yuv test_mpg.mpg (这里请注意在写入输入文件之前,必须给ffmpeg传入帧大小,也就是通过 –s 来设置帧大小)。当然了,你也可以将例如mpg格式的文件转换成YUV文件,即,ffmpeg -i test_mpg.mpg test_yuv.yuv。
 

除了转换格式ffmpeg还可以做更多的事,例如发送媒体流,通过rtp协议,可以输入以下的命令:

ffmpeg -fflags +genpts -re -i test.mpg -vcodec copy -an -f rtp rtp://127.0.0.1:10000 -vn -acodec copy -f rtp rtp://127.0.0.1:20000 -newaudio

其中,-re 代表本地帧频读数据;-an 代表不使能音频纪录;127.0.0.1也就是本地回环地址,我们常常使用它来测试本机的网络配置,通过PING127.0.0.1来检测本机的网卡和IP协议;当然我们还可以使用它来代替SERVER的IP地址,这样程序就可以在同一台机器上运行,所有的SERVER的资源就可以装在本机,我们程序就可以运行。

使用ffmpeg发送了媒体流后,我们可以在写字板里写一个SDP文件(附注:文件的后缀也是.sdp),例如:

v=0
  o=- 0 0 IN IPV4 127.0.0.1
  t=0 0
  s=No Name 
  a=tool:libavformat 52.23.1
  m=video 10000 RTP/AVP 32
  c=IN IP4 127.0.0.1
  b=AS:104857
  m=audio 20000 RTP/AVP 14
  c=IN IP4 127.0.0.1
  b=AS:64

然后通过vlc就打开这个sdp文件,就可以播放我们发送的媒体流了。

#####    #####

谈到了媒体流的发送,我想继续延伸聊聊:我们也可以使用以前介绍过的LIVE555.COM提供的LIVE555 Media Server,来发送媒体流,很简单:可以直接下载live555MediaServer.exe,然后输入: “live555MediaServer 你的文件”,例如live555MediaServer D:\test.mpg。媒体流就发送了。然后可以使用vlc来播放,vlc rtsp://本机IP/文件名(附注:在Window里通过ipconfig可以看本机IP), 例如 vlc rtsp://131.***.**.101/D:\test.mpg。

结语:播放媒体流使用vlc或一些其他的工具就在GUI里可以简单的执行了,这篇文章最后一部分是希望给读者提供一些思路,例如使用ffmpeg,LIVE555发送,并使用不同的发送方式和接受方式。

2009年9月2日星期三

最常用的Notepad++的快捷键

如果Notepad++是程序员的一个生产工具,那么快捷键的使用就可以提高生产效率,记住一些快捷键是挺有用的:-)。

http://notepad-plus.sourceforge.net/uk/shortcuts.php这上面有完整的快捷键表格,但是很多都记不住,因为很少用。除了Ctrl-C,Ctrl-X,Ctrl-V,Ctrl-Y,Ctrl-A,Ctrl-F,Ctrl-S,Ctrl-O,Ctrl-N,Ctrl-W,Ctrl-Tab,Ctrl-P,Alt-F4这些基本的,也许有些简单的比较有用的快捷键,你可能有兴趣知道。

Ctrl-H 打开Find / Replace 对话框
Ctrl-D 复制当前行
Ctrl-L 删除当前行
Ctrl-T 上下行交换
F3 找下一个
Shift-F3 找上一个
Ctrl-Shift-F 在文件中找
Ctrl-F2 触发书签
F2 到前一个书签
Shift-F2 到下一个书签
F5 打开run对话框
Ctrl-Space 打开CallTip列表框
Tab (selection of several lines) 加入Space
Shift-Tab (selection of several lines) 移除Space
F11 全屏
Alt-0 折叠全部
Alt-Shift-0 展开全部
Ctrl-U 变为小写
Ctrl-Shift-U 变为大写
Ctrl-Q 块注释/消除注释

使用ModelSim做simulation一些小问题的简单解决方法

使用ModelSim做模拟常常会遇到一些小问题,常常没有很在意但是常常又发生:-),这里谈谈遇到以下几个小问题的解决方法。

1.遇到类似以下的问题:

# ** Error: /homes/ethernet/eth_spram_256x32.v(151): Module 'RAMB4_S8' is not defined.
  # **Error: /homes/ethernet/xilinx_dist_ram_16x32.v(20): Module 'RAM16X1D' is not defined.

解决方法:进入Simulation Properties: Libraries --> 在Search Libraries中加入unisim(如果是要做 UNISIM-based RTL simulation)
如下图所示:

SearchLibraries_Modelsim

2.遇到类似以下的问题:

# ** Fatal: (vsim-3693) The minimum time resolution limit (10ps) in the Verilog source is smaller than the one chosen for SystemC or VHDL units in the design. Use the vsim -t option to specify the desired resolution.
#    Time: 0 ns  Iteration: 0  Instance: /sample_tb File: /homes/sample_tb.vhd Line: UNKNOWN
# FATAL ERROR while loading design

解决方法:改变Simulation Properties: Libraries --> 在Search Libraries中加入unisim(如果是要做 UNISIM-based RTL simulation)
如下图所示:也是进入Simulation Properties,然后如下图所示,改变Resolution。

Simulation_Properties_ModelSim

3.遇到类似以下的问题:

# ** Error: (vsim-3601) Iteration limit reached at time 0 ps.

# ** Note: (vsim-3602) Delays were truncated during elaboration of the design.

解决方法:进入Simulation -> Runtime Options,然后改变Iteration Limit,将它改成例如5000。如下图所示:

RuntimeOptions_Modelsim

2009年8月30日星期日

如何使用USB盘安装Windows 7

前面的文章提到了,我的新的台式机没有安装光驱,我是从U盘上装Windows 7的,从U盘上装系统相当快,20分钟就搞定了。其实很简单,就是做一个bootable的U盘(这个U盘至少4G的),可以使用UltraISO之类工具或者使用微软自带的DISKPART工具,然后将Windows 7的文件拷入U盘,最后在BIOS里改成从U盘启动,就可以开始安装了。

废话不多说,直接推荐http://www.intowindows.com/里的傻瓜教程,这大概是我看到的最好的教程:How To: Install Windows 7/Vista From USB Drive,绝对简单,只需照着它的说明步步操作就行了。

也许你有兴趣了解更多,还可以延伸阅读,请看以下两篇文章

2009年8月29日星期六

华硕M3N78-VM主板+AMD Athlon II X2 245, 在Windows 7 频繁死机解决方法

我的新电脑使用的是M3N78-VM主板+AMD Athlon II X2 245,在使用Windows 7有时候会无故死机,屏幕在真彩32bit下有时会闪烁。本来还以为是软件问题,重新下载安装了Windows 7的32位版本,但是还是会出现无故死机。

解决方法是:先看看你的BIOS版本,在Windows开始菜单中在”search programs and files”栏中输入msinfo32,然后回车,就可以看到系统信息。我的BIOS的版本是1009,实在太旧了。下载一个最新的bios。然后再下载一个ASUS Update 7.15.13,这个软件可以非常方便地flash你的BIOS,在windows下,比使用Afodos BIOS update tool容易多了。flash完毕,自动重启电脑,然后点击F2进入系统就OK了,问题解决啦。

看看: 1303 BIOS的说明: ”Resolve system may fail to resume from S3 mode while AMD Athlon IIX2 240/245/250 is used. “ 这正是问题所在。

2009年8月24日星期一

新电脑+Windows 7

上周四在www.hoh.de定了一些配置,在德国装机比国内贵一些大概百分之10到25:

1 ASUS TA-B22 schwarz/silber 27,90 EUR
2 XILENCE Lüfter 80x80x25 (XPF80.R) 2,84 EUR
3 Corsair XMS2 KIT 2048MB PC2-6400U DDR2-800 CL4 29,90 EUR
4 Samsung SpinPoint F1 500GB SATA II 16MB (HD502IJ) 44,90 EUR
5 ASUS M3N78-VM, GeForce 8200 (90-MIB5B0-G0EAY00Z) 54,90 EUR
6 AMD Athlon II X2 245 2x2.90GHz AM3 Box 56,50 EUR
7 be quiet Pure Power 350W ATX 2.3 (BN104) 35,90 EUR
比较低端,但是所有的配置都是名牌的,哈哈,因为不玩pc游戏,工作时都是远程登入学校的机器,所以对自己的机器机能要求不高,只要配置平衡,稳定,关键是安静,最好和笔记本一样安静所以选择了be quiet的电源。没有加dvd因为很少用,装windows是可以使用usb,dvd的意义不是很大,2G的内存加上板载的GeForce 8200显卡几乎可以适应所有工作,AMD Athlon 245的性价比相对比较高。252欧并加上13欧的邮费,一天就到了,DHL很不错。显示器我已经有了半年前买的,大概250欧,显示器和机器一样贵,LGM227WD在saturn专门为玩wii买的,接口很丰富,可以接wii的色差端子,:-( 但是wii已经很久没玩了,还可以当电视使用。
半个多小时,机器就装好了,华硕的机箱做工很好, be quiet Pure电源很安静,因为使用了集成显卡,整机的发热很小,所以,我关掉机箱的后风扇,单独买的一个风扇也没有装上。 使用了5年半的sony PCG-582M笔记本,终于可以完美退休了。

学校可以下载正版的Windows 7 Ultimate (大部分德国的大学学生和工作人员(Studierende und wissenschaftliche Mitarbeiter)都可以免费下载不同的微软的产品("Kostenloser Download verschiedener Microsoft-Produkte"))

哈哈直接从WinXP升级到Win 7还真的有点儿不习惯,但是用了一会儿就会发现,Win 7真是实在太好了,用户体验超级好,连自带的画图板都变得挺漂亮了office2007风格的,呵呵。以下是Windows 7对我的新电脑的评分,看起来还过得去,呵呵。

dd

装完Windows 7还要对设定做一些适合我使用习惯的微调。我一直都是从家里登入学校的机子,用学校的机子工作,工作软件都在那里,所以VPN, Remote Desktop, NOMachine对我来说很重要,所以首先装它们。

1. 我想让这台新配的电脑作为主机,然后允许多用户同时可以远程登录这台机,但是Window 7的原始设定只允许只同一个时间只能一个用户登入,这就要进行一些设定(可以google: Enable Multiple Concurrent Remote Desktop windows 7 或 enable concurrent user sessions on Windows 7 RTM你应该就会找到你要的答案),也可以参考这里。 下载THIS DOWNLOAD,解压它,然后再它的文件夹里找到,install文件,然后单击它,按鼠标右键,然后点击Run As Administrator。然后就可以啦。

2. 下载一个ASUS PC Probe II 1.04.75 for Windows 7 and Vista来查看主板和CPU工作状态,例如电压,温度等等。

3. 建立VPN在Windows 7:

  1. 先打开Control Panel 然后打开 Network and Sharing Center.
  2. 点击Set up a new connection or network.
  3. 选择 Connect to a workplace 然后点击 Next.
  4. 选择使用 my internet connection (VPN).
  5. 输入你想连接的IP地址或计算机名和你的连接名称.
  6. 输入User name 和 password.

设定完成了。

要使用VPN,单击Network Internet access 图标在桌面右下角。然后点击 VPN Connection-->Connection. 就可以了。

4.建立远程登入到别的计算机,微软键+R,进入run,然后输入MSTSC... 原来和XP一样,不多说了。

5. 我最喜欢使用google chrome, 但是目前在Windows 7(64bit)下正确运行要做一些调整。下载Chrome并安装后,选中Chrome图标,单击鼠标右键,选择Properties,在Target里最后加入“–in-process-plugins”,

例如:C:\Users\abcd\AppData\Local\Google\Chrome\Application\chrome.exe –in-process-plugins

这就可以啦。

6. 一切都搞定了,但是我发现,我的显示器在支持32bit下的1920*1080的分辨率,屏幕会闪烁,然而在16bit下的1920*1080的分辨率,不会闪烁。这是nividia显卡驱动和Windows 7 64 bit 的兼容问题,这需要下一个2009.07.21才刚发布的Windows 7 64-bit的GeForce/ION Driver Release 190, 190.38版本的驱动。下载并,安装它,问题就解决了。

2009年6月28日星期日

想写一个好的GUI请看看MS的软件,想写一个更好的GUI请看看游戏的界面

最近用Qt写了一个机器人的控制程序的GUI(图形用户界面),为了设计好这个GUI,专门仔细读了Joel Spolsky写的"UserInterface Design for Programmer",读完后受益匪浅,然后写了一个GUI,自觉得还不错,但是导师仅仅看了一眼就说,这个GUI设计还不好,他说"想写一个好的GUI看看MS的软件,写一个更好的GUI看看游戏的界面,你去看看例如魔兽争霸的界面,体会一下,然后就知道你的GUI的问题了,这个周末你可以试着体验几个游戏,呵呵。"
我已经很久没有玩PC游戏,今天回味了几个老游戏,观察了它们的界面,好的游戏的界面在简洁度,易用性和用户的交互体验上甚至连色彩的搭配都相当值得学习。哇,我才发现我设计的GUI其实还不够简洁,最大的缺点是使用者无法得到真正的交互体验,而机器人控制程序的使用的交互体验恰恰是非常重要的,使用这个程序控制真实机器人就要像玩PC游戏一样有一种操纵感,甚至要有一种临场感。

2009年5月29日星期五

脑图(Mind Map),时间管理(GTD)

几乎每天都要和导师讨论问题,通常我们会拿起笔和纸,开始关于问题的分析,试着在纸上构建一幅图景,把所有的要点都过一遍,把大的问题分成很多小的问题,对于这些小的问题常常使用各个击破的方法,先解决一些一些头绪的问题对他们进行讨论分析,对于没有头绪的问题可以找找书或google一下。对于比较复杂的问题,如果只是用纸和笔进行分析,绝对是低效的,使用一些工具画一个脑图绝对会大大提高效率。可以下载FreeMind(它是开源的),也可以使用在线工具Mindomo(它也是免费的,用flash做的,相当酷!),当然MS Visio也可以做脑图,Visio2003简单教程在这里,如果使用2007版,和2003版template 的位置有点不一样,可以通过file-->new-->business-->Brainstroming diagram找到它。

通过脑图还可以获得一个Project的全景图,这很有用,通过我的一些实践,我发现使用它可以得到很大的生产力的提高,可以进行工作的计划和对一些问题的解决方法进选择,并获得和掌握大量信息,还可以分析关于这个Project我们缺失的知识和必须要掌握的技能。

 

刚刚读完一本书,关于时间管理(GTD:Getting Things Done),书名是《小强升职记》,可以在这里部分章节在线阅读,这本书很值得一读,里面提到了例如“我们现在遇到最多的就是‘网络时间黑洞’... ...”,“让别人拿着时钟工作吧,你带着指南针!”等等很精妙的关于时间管理思考和方法。

2009年5月20日星期三

推荐Chrome Experiment

作为一个Chrome的忠实用户,Chrome真的非常好用,废话不多说,快去体验一下Chrome Experiment吧。你会发现用JavaScript也可以完成很多Adobe Flash的特性。感受一下Chrome对JavaScript超高的执行效率吧。

2009年5月9日星期六

SDL SGE库加入TrueType功能

关于SGE库我已经在以前的日志里介绍过了。如果我们的SGE需要有TrueType 功能,简单地说就是可以在sdl surface上写入文字,还需要加入freetype这个库进行build。

The TrueType functions uses the FreeType library (v2.x). SGE的build需要freetype-2.1.10,否则不会正确build,会有一些错误。因为SGE需要譬如头文件.../freetype/nternal/ftobjs.h,而新版的freetype则不会有这个头文件。 进入http://mirrors.zerg.biz/nongnu/freetype/ 就可以找到freetype-2.1.10 ,可参考freetype-2.1.10/docs/INSTALL.UNX的帮助。

使用msys进入freetype目录依次输入

      ./configure [options]

      make

      make install           (as root)

然后就会生成正确的.a静态库文件。

使用msys需要注意一些点:

1.需要build的project的路径中不能有空格,譬如C:/Documents and Settings,否则无法识别路径。

2.cd /C/ 进入C盘,要使用反斜杠。

现在build 新的SGE库with TrueType functions。使用同样的方法,加入freetype的include路径和已经编译好的lib。

大功告成。

现在可以使用新的SGE库 with TrueType functions功能。譬如:

写一个几个字到屏幕上:

sge_TTFont *font;

/*注意要将font.ttf文件放入project的目录里*/

font=sge_TTF_OpenFont("font.ttf", 50);

/* Drawstext on screen */

sge_tt_textout(drawScreen, font, "my first SGE text", 50,100, 0,0,255, 0,0,0, 120);

还有一点要注意:因为在build SGE时要对其源文件进行一些改变。当其他project要使用已经被build的SGE的库时候不能使用SGE原始的头文件,而是要使用改变过的头文件。因为include里的.h文件,必须和参与生成dll的文件相同。不然link这个dll则会产生错误。

 

########

补充,如果要使用VS2005或以后的版本进行编译的话。

在以下网址可以下载到SGE的项目文档,然后建立VC项目。

http://www.digitalfanatics.org/cal/sge/index.html

Download SGE project files for MS Visual C/C++

 

FreeType library (v2.x).请在到以下网址下载Binaries。

http://gnuwin32.sourceforge.net/packages/freetype.htm

• Binaries
Zip
然后在将freetpye.lib加入项目的Additional Dependencies。

在sge_config.h中将注释掉这行#define _SGE_NOTTF。

这样我们的sge_config.h将如下。

/* SGE Config header (generated automatically) */

#define SGE_VER 030809

#define _SGE_C_AND_CPP

//#define _SGE_HAVE_IMG

//#define _SGE_NOTTF

接下来设定基本完成就可以进行编译了。