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

以下是为了了解自己这段时间的学习情况,而进行的总结, 目的是为了完成从某服务器得到数据,在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

结果又纠结了半天, 后来才发现,因为我回家里进行了调试,改动了 SOCKET_HOST 这个IP值,以致于在建立这个Socket时,出错。 真是个呆子啊

未完待续...


你可能感兴趣的:(function,网络,socket,服务器,domain,工具)