2012年9月30日
摘要: STL的string很强大,用起来也感觉很舒服,这段时间在代码中涉及到了用string存取二进制数据的问题,这里记录一下,以供以后参考。首先提一下STL中string的参考资料:http://www.cplusplus.com/reference/string/string/ ,不懂的朋友可以看下。在数据传输中,二进制数据的buffer一般用系统预设的大数组进行存储,而不是STL的string等,比如:const int max_length = 1024 * 1024;unsigned char data[max_length];因为二进制数据中可能会包含0x00(即:'\0' 阅读全文
posted @ 2012-09-30 23:20 Mike_Zhang 阅读(5920) 评论(0) 推荐(0) 编辑
  2012年9月24日
摘要: 这段时间涉及到RTSP代理的问题,感觉VLC做这方面的demo比较好,这里总结下,也方便我以后查阅。环境:DarwinStreamingServer 6.0.3 + VLC 2.0.3我之前的一篇文章(http://www.cnblogs.com/MikeZhang/archive/2012/09/09/vlcStreamingServer20120909.html )中介绍过怎样用vlc搭建简单流媒体服务器,其实这里也只是把sample1.avi替换成rtsp链接罢了,本文中只以RSTP的方式示例。界面操作方式这里主要介绍下服务器的搭建,客户端就不介绍了,不懂的朋友参考我这篇文章:http: 阅读全文
posted @ 2012-09-24 00:19 Mike_Zhang 阅读(5453) 评论(3) 推荐(1) 编辑
  2012年9月22日
摘要: 用过python的朋友应该知道,python的string中有个replace函数,其功能是实现字符串的替换,默认情况下是替换所有,如果加入参数的话会根据设定的个数进行替换,比如下面的例子:>>> import string>>> str1 = "ab1ab2ab3ab4">>> print string.replace(str1,"ab","cd")cd1cd2cd3cd4>>> print string.replace(str1,"ab", 阅读全文
posted @ 2012-09-22 22:44 Mike_Zhang 阅读(7755) 评论(9) 推荐(1) 编辑
  2012年9月16日
摘要: 通常情况下rtsp协议中数据传输的实现是UDP,因工作需要,想让rtsp的数据传输部分用TCP实现。DarwinStreamingServer服务器能自适应客户端发起的数据传输请求是用TCP方式,还是用UDP方式,这里唯一需要解决的是客户端协议的发起问题,而vlc支持RTSP over TCP的方式。剩下的问题就好办了,让vlc以TCP的方式发起连接即可。DSS的安装配置我就不介绍了,不懂的朋友网上查下。方式一:TCP传输媒体数据我之前的文章(http://www.cnblogs.com/MikeZhang/archive/2012/09/09/vlcStreamingServer201209 阅读全文
posted @ 2012-09-16 23:05 Mike_Zhang 阅读(18509) 评论(0) 推荐(4) 编辑
摘要: 周末了,也该把上周工作中用到的雕虫小技整理下,写成博客,也方便我以后查阅。最近需要用ffmpeg进行视频转码,考虑到ffmpeg这个工具本身支持多线程,而服务器也是多核的,想最大程度发挥服务器的计算能力。显然不能用单线程了,但是线程并不是越多越好,需要找到个平衡点。这就需要用time命令进行计时,并将该屏幕的输出重定向到文件,以便后期进行分析。ffmpeg编码的介绍网上有很多,我这里也有些示例(http://www.cnblogs.com/MikeZhang/archive/2012/07/17/videoCodec.html 中的“三、视频编码工具 ”中有介绍)。今天主要介绍下ffmpeg的 阅读全文
posted @ 2012-09-16 11:30 Mike_Zhang 阅读(14369) 评论(12) 推荐(1) 编辑
  2012年9月9日
摘要: 这段时间用到了流媒体数据传输的TCP和UDP方式,感觉vlc可以做这方面的demo,这里总结下,也方便我以后查阅。 简介 VLC主页:http://www.videolan.org VLC不仅仅是个播放器,也可以作为流媒体服务器使用。这个网上有相关的资料,我就不多说了。 声明下本文用的VLC版本:2 阅读全文
posted @ 2012-09-09 12:17 Mike_Zhang 阅读(89435) 评论(21) 推荐(20) 编辑
  2012年9月7日
摘要: linux下写服务端程序免不了用到命令行参数,这里我总结下C语言、bash脚本、python和go语言中的使用方法,也方便我以后查阅。这里我主要用的是getopt这个函数,首先看看c语言中的定义。头文件:#include<unistd.h>函数定义:int getopt(int argc,char * const argv[ ],const char * optstring); extern char *optarg; extern int optind, opterr, optopt;说明: getopt函数是用来分析命令行参数的,参数argc和argv是由main()传递的参数 阅读全文
posted @ 2012-09-07 00:45 Mike_Zhang 阅读(6282) 评论(0) 推荐(3) 编辑
  2012年9月3日
摘要: 服务器端配置1、安装openvpnrpm -ivh http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpmyum install openvpn -y当然也可以从这个页面下载:http://openvpn.net/index.php/download.html 2、配置服务器2.1 初始化服务端cd /etc/openvpn/cp /usr/share/doc/openvpn-2.2.2/sample-config-files/server.conf .mkdir -p easy 阅读全文
posted @ 2012-09-03 23:33 Mike_Zhang 阅读(1650) 评论(1) 推荐(1) 编辑
  2012年8月30日
摘要: 这几天用到了raw socket,用python写了些demo程序,这里记录下,也方便我以后查阅。 首先我们看一个简单的sniffer程序: 这里直接用raw socket接收数据,直接print操作。这个就几行代码,也没什么好解释的了,不懂的google下。 得到IP数据包后,接下来的工作就是对I 阅读全文
posted @ 2012-08-30 00:31 Mike_Zhang 阅读(8161) 评论(15) 推荐(2) 编辑
  2012年8月23日
摘要: 之前用bash实现过(http://www.cnblogs.com/MikeZhang/archive/2012/08/22/linesCountBash20120822.html ),不过那个不能在windows下使用,所以就写了个python版,也方便我以后使用……这里就不多介绍了,不懂的google下。实现代码#!/usr/bin/python''' File : count.py Author : Mike E-Mail : Mike_Zhang@live.com'''import sys,osextens = [".c&quo 阅读全文
posted @ 2012-08-23 21:46 Mike_Zhang 阅读(2886) 评论(7) 推荐(0) 编辑
摘要: 用python遍历文件夹很方便,在go的世界里,我也需要这样的功能。找了找文档,里面有这个功能(具体参考这里:http://golang.org/pkg/path/filepath/ )……好,不废话了,我也想早点睡,直接上代码。代码如下:/*File : getFilelist.goAuthor : MikeE-Mail : Mike_Zhang@live.com*/package mainimport ( "path/filepath" "os" "fmt" "flag")func getFilelist(pa 阅读全文
posted @ 2012-08-23 01:08 Mike_Zhang 阅读(8194) 评论(3) 推荐(0) 编辑
  2012年8月22日
摘要: 获取单个文件行数文件:test1.sh行数:20方法一awk '{print NR}' test1.sh|tail -n1如图所示:方法二awk 'END{print NR}' test1.sh如图所示:方法三grep -n "" test1.sh|awk -F: '{print '}|tail -n1如图所示:方法四sed -n '$=' test1.sh如图所示:方法五wc -l test1.sh如图所示:方法六#cat test1.sh |wc -l如图所示:获取特定目录所有文件的行数代码如下:#!/bi 阅读全文
posted @ 2012-08-22 21:34 Mike_Zhang 阅读(4073) 评论(5) 推荐(1) 编辑
摘要: 编写bash脚本,首先在文件的第一行加入如下代码:#! /bin/bash比如文件test1.sh的完整代码:#! /bin/bashecho "Just a test!"执行如下指令:chmod +x test1.sh && ./test1.sh即可看到效果。一、变量相关1、输入变量read var2、输出变量echo $vardemo代码如下:#! /bin/bashread varecho $var二、判断相关1、逻辑判断 逻辑卷标表示意思1.关于档案与目录的侦测逻辑卷标!-f常用!侦测『档案』是否存在 eg: if [ -f filename ]-d 阅读全文
posted @ 2012-08-22 00:25 Mike_Zhang 阅读(805) 评论(0) 推荐(0) 编辑
  2012年8月16日
摘要: Reactor模式是处理并发I/O比较常见的一种模式,用于同步I/O,中心思想是将所有要处理的I/O事件注册到一个中心I/O多路复用器上,同时主线程阻塞在多路复用器上;一旦有I/O事件到来或是准备就绪(区别在于多路复用器是边沿触发还是水平触发),多路复用器返回并将相应I/O事件分发到对应的处理器中。 Reactor是一种事件驱动机制,和普通函数调用的不同之处在于:应用程序不是主动的调用某个API完成处理,而是恰恰相反,Reactor逆置了事件处理流程,应用程序需要提供相应的接口并注册到Reactor上,如果相应的事件发生,Reactor将主动调用应用程序注册的接口,这些接口又称为“回调函... 阅读全文
posted @ 2012-08-16 00:08 Mike_Zhang 阅读(4163) 评论(0) 推荐(0) 编辑
  2012年8月13日
摘要: 一、并发的定义 在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但是任一个时刻点上只有一个程序在处理机上运行。并发环境下,由于程序的封闭性被打破,出现了新的特点: 二、和并行的区别与联系 并发性(Concurrence):指两个或两个以上 阅读全文
posted @ 2012-08-13 22:54 Mike_Zhang 阅读(1357) 评论(0) 推荐(0) 编辑