自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

OSSRS

https://github.com/ossrs

  • 博客(291)
  • 资源 (30)
  • 收藏
  • 关注

原创 Refine! Refine! Refine!

不会调试就不会写代码,不会Refine就不可能写出好代码!Refine之前:#ifndef RTMP_LOG_H#define RTMP_LOG_H#include #include #include using namespace std;#include #include #define ccrtmp_memset(str, n) memset(str, n

2013-01-05 16:11:57 1302

原创 linux的errno

/**g++ error_test.cpp -g -O0 -o error_test./error_test 9*/#include #include #include #include int main(int argc, char** argv){ if(argc <= 1){ printf("Usage: %s \nFor example:\n

2012-12-29 22:40:14 875

翻译 Linus Torvalds:用户程序被破坏永远是Kernel的问题!

http://www.csdn.net/article/2012-12-25/2813136-linus-says-Mauro-shut-upLinus Torvalds:用户程序被破坏永远是Kernel的问题!发表于2小时前| 499次阅读| 来源CSDN| 4 条评论| 作者王然LinusLinux摘要:一直以“大嘴”著称的Linux之父——

2012-12-25 13:12:42 1767

原创 zmq: transport bridging, the pub-sub forward proxy

/*g++ pub-sub-bridge-publisher.cpp -lzmq -g -O0 -o objs/pub-sub-bridge-publisher*/#include #include #include #include #include #include int main(int argc, char** argv){ void* context = zm

2012-12-23 12:33:57 1614

原创 zmq: reqester-replyer router-dealer pattern.

/**g++ req-rep-router-dealer-requester.cpp -lzmq -g -O0 -o objs/req-rep-router-dealer-requester*/#include #include #include #include #include int main(int argc, char** argv){ void* context

2012-12-23 12:03:32 1720

原创 zmq: request-reply multiple clients to multiple server, brute force way

/**g++ req-res-N2M-brute-force-server.cpp -lzmq -g -O0 -o objs/req-res-N2M-brute-force-server*/#include #include #include #include #include #include int main(int argc, char** argv){ void

2012-12-23 10:53:59 1367

原创 zmq: dynamic discovery problem

/**g++ pub-sub-dynamic-discover-publisher.cpp -lzmq -g -O0 -o objs/pub-sub-dynamic-discover-publisher*/#include #include #include #include #include #include int main(int argc, char** argv){

2012-12-23 10:16:12 1694

原创 四个梦中的解决方案

梦中想到了几个靠谱的方案:1. Edge直播推流:直接使用代理方式即可,不需要做缓存。2. Edge点播方案:没有cache时使用代理方式,并发起一个cache请求,由cache进程完成后改为本地点播方式。3. 服务器不能同时使用两套架构,ST和ZeroMQ不能同时用,他们的方案不一样。换言之,只能用ST。4. 客户端应提供js方式的as接口,譬如js实现的NetConnectio

2012-12-23 08:49:42 1170

原创 zmq: basic patterns Request-Reply, Publisher-Subscriber, Denvilator-worker-sink.

#include#include /*g++ req-rep-server.cpp -lzmq -g -O0 -o objs/req-rep-server*/int main(int argc, char** argv){ void* context = zmq_ctx_new(); void* responder = zmq_socket(context, ZMQ_

2012-12-22 13:50:23 1258

转载 程序员如何做出“不难看”的设计

今天学了下色彩,这篇文章说的很对,特别是色彩使用,用HSB代替RGB。对比下面两个图:哪个看着舒服?前面的图是RGB选的颜色,后面的是用HSB调出来的。摘要:程序员在写代码的时候往往只注重功能的实现和性能的提升,忽视了外观和易用性,其实很多时候只要注意一些基本的规则,就可以大幅度提高产品的观感。经常看到程序员展示自己做的东西,有一些是创业项目

2012-12-12 18:09:31 1013

原创 linux加载指定目录的so文件

例如,有个so在/tmp/libs/libzmq.so.3:[winlin@dev6 libs]$ ls /tmp/libs/ -lhtotal 2.5Mlrwxrwxrwx 1 winlin winlin 15 Dec 12 12:58 libzmq.so -> libzmq.so.3.0.0lrwxrwxrwx 1 winlin winlin 15 Dec 12 12:58

2012-12-12 13:12:05 8183

转载 Multithreaded Magic with ØMQ

http://zeromq.wdfiles.com/local--files/whitepapers%3Amultithreading-magic/imatix-multithreaded-magic.pdfMultithreadedMagic with ØMQFast multicore applications inany language with no painA

2012-12-09 13:38:03 4949

转载 Solving 11 Likely Problems In Your Multithreaded Code

http://msdn.microsoft.com/en-us/magazine/cc817398.aspxConcurrency HazardsSolving 11 Likely Problems In Your Multithreaded CodeJoe DuffyConcurrency is everywhere. Se

2012-12-09 13:22:36 3541

翻译 Internet Application (IA) architecture:网络服务器架构

以下节选自:http://state-threads.sourceforge.net/ ,描述了常见网络架构,翻译在后面。2. Existing Architectures    There are a few different architectures that are commonly used by IAs. These include the Multi-Process, Mu

2012-11-30 10:09:00 214

翻译 网络服务器模型(Internet Application Architectures)

异步非阻塞socket,在读写client时可能会EAGAIN,读不全或者写不完,这时候就需要保存状态,下次能读或能写时候继续从这个状态开始工作。但较为复杂的逻辑会导致状态很多,基本上每个包成为一个状态,譬如RTMP握手部分:1. Client send C0C12. Server send S0S1S23. Client send C2若用状态模型,必须用两个状态:C0C1和

2012-11-28 16:28:55 238

原创 64位整型和32位整型,表示微妙级别的时间

若使用64位整型和32位整型,能表示微妙级别的时间多长呢?#define __STDC_FORMAT_MACROS#include #include #include #include #include using namespace std;int main(int argc, char** argv){ if(true){ u_int64_t

2012-11-18 10:49:37 4411

原创 Mp4格式分析:Adobe的sample1_1500kbps.f4v文件格式之三:mp4 to rtmp packets

上篇文章讲了解析mp4的帧序列,这篇文章讲读取帧的时间戳和类型,以及打包成rtmp packet。RTMP/FLV结构mp4的mdat的video/audio数据,需要加上5个字节的头,打上时间戳后才能以rtmp包发送出去,rtmp包和flv的格式是一样的。所以flv的包可以直接读取tag的data后发送,而mp4的数据需要在前面加5个字节的头后才能作为data发送出去。下图是fl

2012-11-18 09:01:03 3556

原创 Mp4格式分析:Adobe的sample1_1500kbps.f4v文件格式之二:moov分析

MOOV的stbl(SampleTable)包含了关于Sample(Audio/Video)如何组织的。每个audio/video track box都有个stbl,描述了chunk和sample的对应关系。stbl的结构stbl的结构如下:Mp4把mdat(存放媒体数据的box)分为Chunk,每个Chunk包含Sample,Sample即为视频的帧或音频数据。m

2012-11-16 18:50:34 3463

原创 Mp4格式分析:Adobe的sample1_1500kbps.f4v文件格式之一,文件结构

F4v是MP4的子集,由adobe定义。网上资料大多关于mp4的box,对于整体结构,特别是chunk-sample(video/audio)的关系说得很模糊。分几篇文章来说明mp4文件结构。第一篇关于mp4的整体结构,mp4的box结构请参考其他文章。mp4典型的结构如下图,由三个box组成:Adobe的sample文件,sample1_1500kbps.f4v的结构

2012-11-16 17:55:11 3968

原创 自我介绍

自我介绍:2007年毕业于中南大学信息学院。2006年出版《ASP.net程序员成长攻略》。立志成为CTO,大型复杂系统软件方向。2010年设计和实现基于插件的浪弯流媒体flash播放器。2011年基于ffmpeg的python-gearman转码集群。2012年负责组建蓝汛高负载高性能服务器团队。2013.1公司年会评为蓝汛2012年度优秀员工最佳新人奖。2013

2012-11-15 15:05:07 2127 3

转载 开源日志:关于GO语言的资料汇总

Rob Pike谈Google Go:并发,Type System,内存管理和GC概要     Rob Pike谈Google Go,内容涉及:无类OOP编程、Go的接口、采用Goroutines和Channels的并发特性,以及Go中帮助缩短GC间歇的一些特性。 个人简介     Rob Pike是Google的首席工程师。最近,他参与开发了Go语言。在此之前,Rob在贝尔实

2012-11-08 09:13:04 3143

翻译 开源日志:Linus Torvalds’s Lessons on Software Development Management

网上找到了linus的访谈,但是翻译过来的明显是机器翻译,所以我尽力而为的翻译。Linus Torvalds’s Lessons on Software Development Management    If anyone knows the joys and sorrows of managing software development projects, it would be

2012-11-06 17:50:08 1529

原创 开源日志:关于IDE/源代码编辑

做c/c++开发,windows下的IDE是Microsoft visual studio;linux下也有很多,编译和调试环境主要是gcc/g++/gdb,基于它的IDE有很多。我其实是在windows下写源代码,linux开启samba共享,直接用beyond compare同步到共享目录,然后用make/gdb调试。Source Insightsource insight用得好的

2012-11-03 10:15:25 2161

原创 开源软件日志

于老师是个了不起的CTO,他给了我很多建议,有一条进入了我的心中:”现在这个阶段,代码写得够多了,就要尽量少写代码,多看多想“。我也不知道看什么,看看开源软件吧,现在开源的世界很大,看看有哪些优秀的开源软件吧,对比一下,写个日志。每周末找时间看看。

2012-11-03 09:45:30 1259

原创 linux c获取本机网卡ip地址

获取本机网卡绑定的IPv4地址。int GetLoalIP(vector& local_addr){ int ret = ErrorCode::Success; local_addr.clear(); ifaddrs* ifap; if(getifaddrs(&ifap) == -1){ return ErrorCode::Syste

2012-10-10 19:14:56 1862

原创 linux社区让程序员幸福

linux程序员是幸福的,特别是现代linux程序员。是的,是有很多不幸的程序员,称为”苦逼程序员”。可这不是程序员这个职业的错,每个职业都有苦逼的人。从工作性质上来讲,程序员这个职业提供了更多幸福的可能。职业的幸福感来源于是否人是否觉得这个职业幸福,较少的挫败感、无奈、失落。我觉得做linux程序员最大的益处,是这个社区有生命力,不断的完善和提供了机会和可能来减少苦力,从语言和开

2012-09-13 11:44:46 1198

原创 IPhone4S自定义铃声

IPhone不越狱无法使用黑名单功能,但可以制作一个无声的铃声,把黑名单电话设置为静音的铃声,就不用管它的打扰了。但是试了一下,好麻烦,大多是铃声制作好了,但是无法同步铃声,搞了很久终于搞出来了!详细记录IPhone4S如何自定义铃声。第一步:iTunes安装在PC上安装iTunes。用USB连接IPhone4S到电脑。在PC上运行iTunes。第二步:授权

2012-09-13 01:49:36 2659

原创 [MEMO] bash常用命令实例

操作某个目录下的子目录:统计某个目录所有子目录有多少行代码:(cd src; files=`ls`; for file in $files; do echo "stat dir$file"; find $file -name "*.*pp"|xargs wc -l|grep"total"; done) 取文件名/扩展名/路径之类:取路径的文件名:path="/h

2012-09-06 17:02:22 1547

原创 给程序猿和程序媛

邮箱:chengli.yang at chinacache.com (防止垃圾邮件,把at替换成@)网址:www.chinacache.com

2012-09-02 22:36:36 281

原创 研发招聘通告

邮箱:chengli.yang at chinacache.com (防止垃圾邮件,把at替换成@)网址:www.chinacache.com

2012-09-02 11:31:58 278

原创 软件研发招聘通告

邮箱:winterserver@126.com 公司:http://www.chinacache.com/

2012-09-01 13:36:43 220

原创 epoll_wait的timeout的误差

epoll_wait(timeout)会有一定的误差,一般是1/1000。CentOS release 5.5 (Final)Linux CCN-YZ-1-3n1 2.6.37-1 #2 SMP Fri Feb 25 14:50:02 CST 2011 x86_64 x86_64 x86_64 GNU/Linux/**build:g++ epoll-wait-devia

2012-08-23 11:41:22 4729

原创 强大的grep

从海量日志找到自己要的数据,grep工作得很好。1. 假设只关注warn和fatal日志,实际上程序还会打印出trace日志,可以用grep过滤:server 1990 false 21010 | egrep "(\[warn\])|(\[fatal\])" > error.log 2>&1 &2. 假设现在有3000个client连接,需要找出delay比较严重的client

2012-08-22 16:25:08 1052

原创 一个refine/refactor的例子

我觉得refine比refactor的幅度大,refactor主要是等价替换,而refine有时候直接寻找更好的方案。Server在管理Client的BufferTime,即决定什么时候应该发包的这部分逻辑,最初是这么写的:u_int32_t Connection::PerformIO(){ u_int32_t ret = PErrorCode::Success;

2012-08-21 13:05:07 1788

原创 关于软件测试的看法

我是少数自发去做过一段时间测试的研发,所以经常有朋友问我一些问题:如何做自动化测试?如何提高测试的精准度?如何提高测试的速度?告诉我如何测试?某某公司是如何做测试的?而且很神奇的是,这些问题往往不会在最初的产品研发阶段提出来,而是当产品发布,客户反馈出bug时,才会问这些”重要“的问题。为什么在后期才会关注这些问题?因为测试喜欢被当作替罪羊:如果研发尽力了,产品设计尽力了,

2012-08-13 18:25:28 1228 1

原创 使用原型——不要做躺在炸弹上的勇士

我们只能对我们熟知的东西编程,熟知必须要知道和了解。而知识是无限扩展的未知体,了解更多也意味着更多的未知。所以需要软件工程,需要design和arch,需要高级程序员和架构师,需要项目经理,需要软件团队,需要软件方法。当然,最需要的其实是限定问题的范围。譬如需求分析和产品计划,就是将问题简化,不必要的功能千万不要做,不做超前的计划,因为那是未知的知识的边缘。简单,一定要简单,只有简单的东西

2012-08-10 14:05:53 2506

原创 总结c++内存错误的典型情况

最近遇到了c++几张内存错误的几种典型情况:1. 拷贝构造函数导致重复释放:http://blog.csdn.net/winlinvip/article/details/76638622. 内存越界导致错误:这个在http://blog.csdn.net/winlinvip/article/details/7822762 提到过。3. 非虚析构函数导致内存泄漏:http://blog.

2012-08-09 10:48:27 1439

原创 任何时候都应初始化变量

指针不初始化,直接释放会导致内存错误,这个都很明白,变量的初始化,就没有那么的挑剔了,有时候初始化,有时候不。原因是指针若不初始化,基本上就玩完,变量很大程度上不会出问题。不过它隐藏的危险比指针更可怕:会导致程序莫名其妙的怪异行为。考虑如下代码:bool all_sent_out;if(!mfarm->SendMessage(&all_sent_out)){ exit(-

2012-08-08 14:40:24 1291

原创 异步Socket(非阻塞模式)的应用

异步Socket(非阻塞模式)的应用若Socket是同步模式(即阻塞模式):1. send(1024)需要等1024个字节发完了才会返回(或者socket被关闭了)。这使得server在和低速的client通信时被阻塞,所以高性能server要使用非阻塞方式。2. recv(1024)不会等1024个字节,但必须要有数据才行,否则会被阻塞。所以阻塞的recv通常需要判断是否有数

2012-08-08 13:05:41 2933

原创 socket效率到底如何

两台服务器用千兆交换机连接,带宽为1000Mbps,socket的效率到底如何?若server尽量快向client写数据,client收到数据后就丢弃,是否能占满千兆带宽?测试发现和每次发送的包大小有关系,TCP包为1000bits(125字节)以上就能占满带宽:因此,若client足够多而且都在请求数据,但是带宽上不去,就是服务器程序的问题了。协议本身会降低带宽,使用rtmp

2012-08-07 18:21:38 7192

Effective Go (中文版).pdf

Effective Go (中文版) .

2015-11-11

nginx-rtmp

nginx-rtmp

2014-01-01

H.264-AVC-ISO_IEC_14496-15.pdf

H.264-AVC-ISO_IEC_14496-15.pdf

2013-11-24

nginx-rtmp build script

build nginx rtmp base one nginx1.5

2013-11-14

OOAD booch 3rd edition

OOAD booch 3rd edition

2013-10-14

Effective.STL

Effective.STL Effective.STL

2013-03-22

android桌面小组件最简实例

android桌面小组件最简实例,最少代码。

2013-01-06

android桌面小组件

android桌面小组件官网实例 android桌面小组件

2013-01-06

Pattern.Oriented.Software.Architecture.Volume.2

Pattern.Oriented.Software.Architecture.Volume.2

2012-11-29

ISO_IEC_14496-1

ISO_IEC_14496-1

2012-11-18

ISO_IEC_14496-3

ISO_IEC_14496-3

2012-11-18

ISO_IEC_14496-10

ISO_IEC_14496-10

2012-11-17

f4v-moov

f4v-moov

2012-11-16

ISO_IEC_14496-15

ISO_IEC_14496-15

2012-11-16

Node.js开发指南

Node.js开发指南, about the node.js

2012-11-05

mp4 file format引用文档

mp4 file format引用文档 mp4 file format是 ISO_IEC_14496-14,引用了“ ISO_IEC_14496-12”文档。

2012-11-04

原版 mp4 file format

mp4-file-format ISO/IEC 14496-14

2012-11-04

ISO_IEC_14496-14_mp4-file-format

ISO_IEC_14496-14_mp4-file-format

2012-11-04

mp4 file format

mp4 file format, ISO_IEC_14496-14

2012-11-04

amf3_spec_121207

adobe amf3_spec_121207 format.

2012-10-29

amf0_spec_121207

adobe amf0_spec_121207 for amf0 format.

2012-10-29

video_file_format_spec_v10_1

video_file_format_spec_v10_1

2012-10-29

rtmp_specification_1.0

rtmp_specification_1.0

2012-10-29

The.Cpp.Programming.Language.Special.Edition

The.Cpp.Programming.Language.Special.Edition

2012-10-29

gperftools-2.0.tar.gz

gperftools-2.0.tar.gz

2012-08-04

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除