深刻理解Live555源码,掌握这把RTSP,RTP的瑞士军刀

我无意评价Live555的源码是否优雅易懂,但对于我这种C++设计模式应用不熟的IT老兵,还是很难直接通过阅读源码深刻清晰,一目了然的理解其中的调用逻辑。Live555中关于RTSP的Session,SubSession的概念,以及FramedSource和Sink的抽象都很不错的。但对于其任务单步调用机制,以及如何读取一帧数据及时发出一帧数据的全部逻辑, 真不容易得到清晰的处理逻辑。实践出真知,笔者本文就介绍一种通过运行时堆栈信息迅速理解关键代码和关键逻辑的方法。

先来观察本文尾部的GDB打印的堆栈信息,是笔者在实际开发中在Live555中扩展了mp4文件格式的支持,凡是ffmpeg_server目录下的的都是我的私有源码独立实现,不要刻意追究源码,本文教的是方法。该堆栈是Live555服务器接收到PLAY请求后,发送第1帧数据时的状态。
1.查看堆栈第27层到第0层堆栈,首先我们关注的是getNextFrame函数,该函数是FramedSource的public函数,提供给所有派生类构造层层回调逻辑的函数,通过传入几个回调函数和回调指针。该函数在第3层堆栈,第10层堆栈,第12层堆栈有调用到。[......]

阅读全文

CentOS 6.5手动安装3个节点的ceph集群(通过rbd块设备访问)

阅读本文前,需要熟悉ceph基本架构,以及基本的网元,什么是monitor,mds,osd,rbd等知识
建议先阅读:

http://www.ibm.com/developerworks/cn/linux/l-ceph/

http://www.infoq.com/cn/news/2014/01/ceph-overview

http://ceph.com/docs/master/start/quick-ceph-deploy/

http://www.alidata.org/archives/1589

http://ceph.com/docs/master/start/quick-rbd/

http://www.jamescoyle.net/how-to/1244-create-a-3-node-ceph-storage-cluster

本文的目的是,通过手动配置安装一个带有: 1个monitor + 2个osd的rbd ceph集群,无mds节点,因此不支持cephFS。
个人的心得是,用ceph-deploy工具自动安装会产生很多莫名其妙的问题,无法迅速定位问题,而手动安装会加深[......]

阅读全文

网络编程中的C10K问题总结

第一件秘密武器:epoll/IOCP/kqueue新模型
  
   传统的web服务器采用同步socket处理,即每一线程服务于一个客户(apache就是这样),或者是使用传统的select/poll模型。在连接数小的情况,性能也不会很差,但随着连接数的上升,性能会直线下降,超过一定数量时,会导致服务器无法提供服务。这就是著名的C10K问题。现代化的web服务器都采用效率更高的模型,linux下面是epoll,windows下面是IOCP,bsd系统的是kqueue. kangle新版也采用这种模型,连接数上升,性能只是会下降一点,基本上很稳定的提供服务。
  
  第二件秘密武器: 非阻塞socket
  
   即使采用了新模型也能更好的处理服务了,但为什么还要非阻塞socket呢?我们知道,对于发送数据(调用send),大多数的情况下是不会阻塞的,因为数据是直接放到socket的缓冲里面,只有缓冲满了的情况下会阻塞。问题就是我们已经使用了新模型可以检测到该socket能发的时候才发啊?和阻塞有什么关系呢?这就是关键了,因为新模型只能保证发送一次数据不会阻塞,你无法检测一次发送多条数据,这个[......]

阅读全文

移植top命令到hi3531嵌入式平台

1. 下载软件包
ftp://ftp.gnu.org/gnu/ncurses/ncurses-5.7.tar.gz

http://procps.sourceforge.net/procps-3.2.8.tar.gz

2. 编译ncurses-5.7
./configure CC=arm-hisiv200-linux-gcc –host arm-linux –target=arm-linux –enable-widec –with-shared –prefix=/home/hzb/disk2/ncurses-install

make
make install

3.编译procps
export DESTDIR=/home/hzb/disk2/top-install/
export CC=arm-hisiv200-linux-gcc
export TERMINFO=/usr/share/terminfo
export TERM=vt102
修改Makefile文件,保证依赖的ncurses库的头文件目录和lib目录与您的ncurses安装目录一致:
我的ncurse[......]

阅读全文

Windows下的调试工具应用总结

笔者做Windows开发也很多年了, 由于一直做一些小型工具类开发, 对软件的健壮性,测试技巧显得很不足。
最近在一个大型项目中遇到一些问题:
1. 程序无症状异常退出,不报错
2. 内存访问越界导致乱报错

借助以下2个Windows SDK中带的Debug Tool,终于彻底解决了问题。
1. Application Verifier
解决内存越界很有帮助
当你打开这个工具,添加你的程序进行检测,然后在VS2010中按F5调试,遇到内存问题就会抛出异常,提示你哪一行出错了,很好用。

2. Global Flags
对于调试内存问题也还可以,不过要注意正确使用,这个工具的里的一些注册表项是影响操作系统的。
建议只使用Image File这个Tab页面,其他Tab页面不要随意修改。

Live555通过SDP文本信息实现对RTP的接收

笔者最近因为工做中需要用到此功能,特把实现方法分享给有兴趣的网友。
我的方法来自Live555官方论坛最权威的方案,如下:
[Live-devel] Once again, SDP support for Live555 & interaction with FFMpeg
1.First, create a “MediaSession” object, by calling
“MediaSession::createNew()”, with the SDP description (string) as
parameter.

2.Then, go through each of this object’s ‘subsessions’ (in this case,
there’ll be just one, for “video”), and call
“MediaSubsession::initiate()” on it.

3.Then, you can create an appropriate ‘sink’ object (e.g.,
encapsulating y[......]

阅读全文

Live555用做RTSPClient时,利用RTP时间戳进行音视频同步的解决方案(必须有RTCP支持才可行)

先看来自Live555官网的2个常见问题
问题1:Why do most RTP sessions use separate streams for audio and video? How can a receiving client synchronize these streams?
回答:Sending audio and video in separate RTP streams provides a great deal of flexibility. For example, this makes it possible for a player to receive only the audio stream, but not video (or vice-versa). It would even be possible to have one computer receive and play audio, and a separate computer receive and play video.

These audio and video streams are sync[......]

阅读全文

湖南装饰公司一些投诉信息收集

湖南苹果装饰设计有欺骗消费者行为:

http://www.315online.com/plus/ts_view.php?aid=98057


苹果装饰装修质量差 房子无法验收:http://315.voc.com.cn/question/view/69406.html


网友怒斥苹果装修问题多 称“抽屉带暗器:http://315.voc.com.cn/note/view/5219.html

【投诉】长沙最烂的装饰公司—苹果装饰:http://www.cstgw.com/tieba/tie.asp?id=123334

慢慢点评所谓的10大装修公司:

http://changsha.365azw.com/act-84985.html


乐家装修质量差:http://315.nen.com.cn/ctrlout/Contxt.aspx?id=1462

实创装饰被投诉低价套餐多陷阱 质量受质疑:http://weifang.dzwww.com/wfxwn/315wh/201403/t20140316_9828237.htm

实创装修,让我悔不当初!:http:[......]

阅读全文

捐助三棵杏软件

如果您想捐助些许人民币,支持三棵杏软件的发展,您可以通过以下方式捐款:
1. 通过支付宝转账,三棵杏软件支付宝账户:zibin.hu@aliyun.com,具体操作方式请参考支付宝转账帮助连接:为他人账户充值的操作流程

2. 添加微信号: zhibin_mark,发送微信红包, 留下名号。

捐款后请留下您的尊姓大名和邮箱,我们将会把您的大名记入捐献者名单中,感谢您的慷慨捐助!邮箱:huzhibin2000@qq.com

捐助人列表:
永遠の詩 2016-11-17 捐助 101元

鄙人所掌握音视频流媒体关键技术

1.RTSP双路H264视频流+1音频流保存为TS文件,
2.RTSP单路H264或Mjpeg视频流+1音频流 保存为TS文件, 同时支持10路以上码流录制
3.熟练ffmpeg编解码编程,可深入源码为我所用。
4.利用VLC的libvcl库,定制视频播放器,支持双路视频窗口同时显示在一大一小窗口,大小窗口可动态切换,播放的视频文件格式与VLC基本一样多。
5.利用开源live555实现流媒体服务器定制,除默认支持的格式外,还支持mp4等文件格式的扩张,支持中文路径名
6.为Darwin Streaming Server扩张TS文件格式支持
7.利用portaudio采集音频流,利用libvidcap或者libvidcapture-master捕获视频,录制为mp4或TS文件
8.利用portaudio采集音频流编码为AAC,利用libvidcap或者libvidcapture-master捕获视频编码为H264,把实时音视频注入到DarwinStreamingServer中
9.利用ffmpeg为TS文件生成m3u8文件,利用ngnix轻松搭建HLS点播服务器
10. 利用linux下的[......]

阅读全文