随笔分类 -  Linux

上一页 1 ··· 12 13 14 15 16 17 18 19 20 ··· 22 下一页
摘要:Ubuntu在只安装了一个系统的时候,grub界面默认不显示,直接进入。以前的Ubuntu版本,启动grub的时候,有一个grub loading,press ESC to get the menu的提示,所以按ESC就可以看到grub界面现在的Ubuntu没有了,现在的做法是,启动的时候按住shift键,就可以看到grub界面了。接下来就修改启动参数,加入single,然后按ctrl+x启动,就能看到一个ncurse的界面,选择drop to root prompt,就可以得到一个root的terminal然后就可以重新设置root口令了。 阅读全文
posted @ 2011-03-11 16:46 super119 阅读(3061) 评论(0) 推荐(0) 编辑
摘要:很简单:sudo apt-get install poppler-data就搞定了。 阅读全文
posted @ 2011-03-11 10:44 super119 阅读(376) 评论(0) 推荐(0) 编辑
摘要:PJSIP项目,由于pjsip不支持编译成动态库,只能编译成静态库,所以在编译基于pjsip SUA的应用程序的时候,遇到问题,如果这样写编译命令行:gcc -o xxx $@-Wall -std=c99 -g `pkg-config --cflags libpjproject``pkg-config --libs libpjproject`$^编译就会出错,链接的时候undefined reference,PJSIP库里面的函数都无法链接。但是如果这样就OK:gcc -o xxx $@-Wall -std=c99 -g $^ `pkg-config --cflags libpjproject 阅读全文
posted @ 2011-03-06 16:04 super119 阅读(601) 评论(0) 推荐(0) 编辑
摘要:需要这么干是因为srt字幕文件如果行尾有空格,MP4就显示不了字幕了。打开vim::% s/\s\+$//g:wq 阅读全文
posted @ 2011-03-01 10:29 super119 阅读(9244) 评论(0) 推荐(1) 编辑
摘要:转自:STUN在SIP中的工作原理及过程|STUN,SIP,工作原理,过程,RFC3489,NAT-中国源码网: 开放源代码&&编程STUN是RFC3489规定的一种NAT穿透方式,它采用辅助的方法探测NAT的IP和端口。毫无疑问的,它对穿越早期的NAT起了巨大的作用,并且还将继续在ANT穿透中占有一席之地。 STUN的探测过程需要有一个公网IP的STUN server,在NAT后面的UAC必须和此server配合,互相之间发送若干个UDP数据包。UDP包中包含有UAC需要了解的信息,比如NAT外网IP,PORT等等。UAC通过是否得到这个UDP包和包中的数据判断自己的NAT类 阅读全文
posted @ 2011-02-17 10:45 super119 阅读(491) 评论(0) 推荐(0) 编辑
摘要:我感觉自从我使用Linux以来,NetworkManager这个东西就没消停过。这次再次证实。我在我的Ubuntu 10.10上使用NetworkManager配置了两块网卡和ADSL,并配置了iptables,从而可以让网络内其他机器通过这台机器上网。配置完成后,发现问题,有些网站能上,有些网站就上不了,比如126,youku等。百思不得其解。后来就开始怀疑NetworkManager,因为之前使用这个东西也经常碰到奇怪的问题,不知道是我使用的不对还是这个玩意天生问题就多。所以没办法试一下:1.sudo apt-get update; sudo apt-get install pppoeco 阅读全文
posted @ 2011-01-04 23:06 super119 阅读(1878) 评论(1) 推荐(0) 编辑
摘要:GStreamer的Plugin Writer's Guide通篇都没有给出一个完整的plugin的源代码列表,也没有描述如何build和install一个plugin,针对这一点,研究了一下gstreamer plugin template,发现是一个基于autoconf, automake的project,一般情况下,直接运行autogen.sh就会自动生成configure,然后configure,接着只需要make, make install即可。make install会把生成的.so安装到/usr/local/lib/gstreamer-0.10目录下。尝试build,却发现mak 阅读全文
posted @ 2011-01-03 11:30 super119 阅读(1661) 评论(0) 推荐(0) 编辑
摘要:从gstrtpjitterbuffer.c中使用activatepush_function来看gstreamer中的激活机制有关函数gst_pad_set_activatepush_function。这个可以看gstreamer包中doc/design目录下的part-activation.txt这篇文档,这篇文档将pad active的逻辑说的还是比较清楚的。首先gstreamer core会调用pad的activate方法(如果我们调用gst_pad_set_activate_function重载了的话),在这个方法中,必须最后要调用gst_pad_activate_push和gst_pa 阅读全文
posted @ 2011-01-03 11:29 super119 阅读(1209) 评论(1) 推荐(0) 编辑
摘要:简单来讲,采样率和比特率就像是坐标轴上的横纵坐标。横坐标的采样率表示了每秒钟的采样次数。纵坐标的比特率表示了用数字量来量化模拟量的时候的精度。采样率类似于动态影像的帧数,比如电影的采样率是24赫兹,PAL制式的采样率是25赫兹,NTSC制式的采样率是30赫兹。当我们把采样到的一个个静止画面再以采样率同样的速度回放时,看到的就是连续的画面。同样的道理,把以44.1kHZ采样率记录的CD以同样的速率播放时,就能听到连续的声音。显然,这个采样率越高,听到的声音和看到的图像就越连贯。当然,人的听觉和视觉器官能分辨的采样率是有限的,基本上高于44.1kHZ采样的声音,绝大部分人已经觉察不到其中的分别了。 阅读全文
posted @ 2011-01-03 11:29 super119 阅读(6173) 评论(0) 推荐(0) 编辑
摘要:这里需要描述一下gst_pad_get_caps/gst_pad_set_getcaps_function, gst_pad_set_caps/gst_pad_set_setcaps_function这四个函数。gst_pad_get_caps函数用来返回该pad能接受的caps。这个函数的逻辑是:首先检查getcaps函数指针是否为NULL,如果不是则调用getcaps函数,这是一个函数指针,我们可以通过gst_pad_set_getcaps_function来给这个函数指针赋值,从而实现自定义的get_caps函数的逻辑。完成后函数返回;如果getcaps函数指针为NULL,则gst_pa 阅读全文
posted @ 2011-01-03 11:28 super119 阅读(1930) 评论(1) 推荐(0) 编辑
摘要:来看这个函数:gst_rtp_buffer_compare_seqnumCODE:SELECT ALLgintgst_rtp_buffer_compare_seqnum (guint16 seqnum1, guint16 seqnum2){ return (gint16) (seqnum2 - seqnum1);}就简单的一句代码,就能判断出seqnum1, seqnum2是否有wraparound的现象。关键点就在于return后面的gint16类型转换上。seqnum1, seqnum2都是guint16,也就是unsigned short,而返回值被强制转换成了gint16,也就是sig 阅读全文
posted @ 2011-01-03 11:28 super119 阅读(866) 评论(0) 推荐(0) 编辑
摘要:想让xvimagesink/ximagesink这样的element在我们指定的窗口中绘制video?简单的很:1. new一个GtkDrawingArea2. connect它的expose-event signal,e.g:// Drawing on our drawing areag_signal_connect(G_OBJECT(area), "expose-event", G_CALLBACK(expose_cb), NULL);3. 书写callback函数expose_cb,e.g:[代码]这样就OK了。expose-event是drawingarea每次重绘的时候会发出的sig 阅读全文
posted @ 2011-01-03 11:27 super119 阅读(1546) 评论(0) 推荐(0) 编辑
摘要:1. 获取duration的话,有几个途径:(1)在bus上监听GST_MESSAGE_DURATION,如果有这个消息到来,用gst_message_parse_duration就可以获得。但是往往element不会发这样的message出来 (2)用gst_query_new_duration新建一个duration query,然后用gst_element_query(pipeline, query)查询即可。这种方法较为常用。一般可以在pipeline所有element都link好了,pipeline状态是RUNNING的时候,就可以查询了。2. 获取当前播放的position,也有几 阅读全文
posted @ 2011-01-03 11:26 super119 阅读(1199) 评论(0) 推荐(0) 编辑
摘要:g_closure_marshal提供了一些常用的closure的实现,但是由于返回值和参数列表的可能性实在太多,无法穷举,所以,gobject提供了一个程序:glib-genmarshal来帮我们生成指定的closure的实现(自动生成代码)。在当前目录下创建一个文件,比如:marshal.list,包含内容如下:VOID:UINT,UINT就是返回值和参数列表。然后:glib-genmarshal --header --prefix=gst_play_marshal marshal.list这样就生成了头文件的内容,保存下来存成gstplay-marshal.h,搞定。glib-genma 阅读全文
posted @ 2011-01-03 11:26 super119 阅读(983) 评论(0) 推荐(0) 编辑
摘要:GstPipeline在从PAUSED转成PLAYING的时候,会select一个clock并计算出basetime,这两样东西都会赋给pipeline中每个element。那这个basetime每次是怎么计算的呢?原来认为这个basetime就是当前的clock time,但是后来发现不对。比如:在播放了2秒的时候PAUSE,等了3秒后再PLAY,此时如果这个basetime是当前时间的话,那就是5秒时刻,此时继续播放的话,会发现传过来的buffer中的timestamp是从第3秒开始的,不是从0秒开始的,因为上次暂停的时候是在2秒的时间点上。所以如果此时basetime是5秒的话,那么si 阅读全文
posted @ 2011-01-03 11:21 super119 阅读(1269) 评论(0) 推荐(1) 编辑
摘要:aplay -t raw -c 1 -f S16_LE -r 8000 test2.pcm-t: type raw表示是PCM-c: channel 1-f S16_LE: Signed 16bit-width Little-Endian-r: sample rate 8000PCM是最raw的音频数据,没有任何头信息。WAV文件就是PCM+头信息,头信息就是上述的声道数,sample rate这些。所以WAV文件可以直接播放,而PCM需要手动指定这些信息之后才能播放。 阅读全文
posted @ 2011-01-03 11:20 super119 阅读(3436) 评论(0) 推荐(1) 编辑
摘要:看了MP4Box的源码,后来对照代码参看了H.263的Specification,取宽高的 方法如下:1. 读前22个bit(不是byte),然后转成int,这个值应该是32(0x20)。这是H.263 stream的start code,表示这是一个H.263的stream2. 读第36-38bit,转成int,这个值就表示该263 stream的format,对应表如下:[代码]具体到宽高,这里直接引用MP4Box中的代码(变量fmt就是36-38bit表示的值):staticvoidh263_get_pic_size(GF_BitStream*bs,u32fmt,u32*w,u32*h) 阅读全文
posted @ 2011-01-03 11:18 super119 阅读(925) 评论(8) 推荐(0) 编辑
摘要:Linux可以让多个设备共享一个中断号,而且共享同一中断的中断处理程序形成一个链表,内核对每个中断处理程序都要执行,那么,没有产生中断的设备本该靠边站的,它的中断处理程序也被执行了?到底是怎么会事?实际上:共享的处理程序与非共享的处理程序在注册和运行方式上比较相似,但差异主要有以下三处:* request_irq()的参数flags必须设置SA_SHIRQ标志。* 对每个注册的中断处理程序来说,dev_id参数必须唯一。指向任一设备结构的指针就可以满足这一要求;通常会选择设备结构,因为它是唯一的,而且中断处理程序可能会用到它。不能给共享的处理程序传递NULL值。* 中断处理程序必须能够区分它的 阅读全文
posted @ 2011-01-03 11:16 super119 阅读(698) 评论(0) 推荐(0) 编辑
摘要:Linux核心幾個重要跟時間有關的名詞或變數,底下將介紹HZ、tick與jiffies。HZLinux核心每隔固定週期會發出timer interrupt (IRQ 0),HZ是用來定義每一秒有幾次timer interrupts。舉例來說,HZ為1000,代表每秒有1000次timer interrupts。HZ可在編譯核心時設定,如下所示 (以核心版本2.6.20-15為例):adrian@adrian-desktop:~$ cd /usr/src/linuxadrian@adrian-desktop:/usr/src/linux$ make menuconfigProcessor typ 阅读全文
posted @ 2011-01-03 11:16 super119 阅读(838) 评论(0) 推荐(0) 编辑

上一页 1 ··· 12 13 14 15 16 17 18 19 20 ··· 22 下一页