写网络视频监视器中的总结 (一)

转:http://blog.csdn.net/smking/article/details/7373787

以下是为了了解自己这段时间的学习情况,而进行的总结, 目的是为了完成从某服务器得到数据,在iOS设备上进行解析,并完成实时播放的目的。

其中,使用到 ffmpeg, GCDAsyncSocket, wireShark工具


1. 首先需要实现在本地播放视频文件,这里指的是h264格式的视频格式。需要采用到ffmpeg来进行解析播放,具体如何配置ffmpeg,我在前面的文章中已经提到。


2. 通过GCDAsyncSocket来连接服务器,并通过wireShark来查看其中传递的命令是否正确。

遇到两个问题:

a. 心跳的问题, 

在用GCDAsyncSocket与服务器连接时,通常对于用Socket方式的服务器,由于Socket的连接会比较耗资源,所以服务器一般都会要求客户端在一定时期内进行心跳检测,以让服务器知道客户端已经断开连接,从而回收这个Socket资源,以供其它Socket使用。而这个心跳命令,是每个服务器都会自己定义自己的心跳格式。我遇到这个问题的征状是,建立完成GCDAsyncSocket连接后,约2分钟, GCDAsyncSocket的delegate会收到方法, 

说是,连接被远端断开,

failed because Error 
Domain=GCDAsyncSocketErrorDomain Code=7 "Socket closed by remote peer" 
UserInfo=0x7f85d8d1dd50 {NSLocalizedDescription=Socket closed by 
remote peer} 

方法“- (void)socketDidDisconnect:(GCDAsyncSocket *)sock withError:(NSError *)err”被调用,这个可以说明其实就是因为心跳没有连接好,以致于服务器认为客户端已经断开了连接,

认识到这个原因后,通过wireShark来分析正常的客户端应该发送什么样的数据,然后再看看自己的客户端发送的什么数据,比对后,很容易找到问题,拼出服务器期望的数据后,心跳的这个问题

b. 在连接的过程上,

if (![_controlSocketconnectToHost:SOCKET_HOSTonPort:SOCKET_CONTROL_PORTerror:&control_error])

调用正常,返回值正常,但很快就收到方法通知

ocketDidDisconnect:0x834d5d0 withError: Error Domain=NSPOSIXErrorDomain Code=61 "Connection refused" UserInfo=0x6c3f5c0 {NSLocalizedFailureReason=Error in connect() function, NSLocalizedDescription=Connection refused}

2012-03-20 14:46:21.795 CameraSeek[945:f803] socket Disconnected


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值