RTSP的消息有两大类: 请求消息(request), 回应消息(response). 请求消息:
方法 URI RTSP版本 CR LF 消息头 CR LF CR LF 消息体 CR LF其中方法包括OPTION回应中所有的命令,URI是接受方的地址,例如:rtsp://192.168.20.136. RTSP版本一般都是 RTSP/1.0. 每行后面的CR LF表示回车换行, 需要接受端有相应的解析, 最后一个消息头需要有两个CR LF(即空行)
回应消息:
RTSP版本 状态码 解释 CR LF 消息头 CR LF CR LF 消息体 CR LF例子:
S->C: RTSP/1.0 551 Option not supported CSeq: 302 Unsupported: funky-feature注:CR指的是 \r,LF指的是\n。
小结:该函数就是设计了一个算法,从创建的套接口里获取服务端的消息的一行。一行的结尾标识为’\r’ \n’或者为’\n’。而且需要为二进制数据进行特别的处理。 个人认为该算法存在效率上的不足,因为如果是’\r’ \n’结尾的话就需要调用line->erase(line->size() - 1, 1)函数将已经读取的’\r’字符删掉,而line->erase函数设计到内存拷贝,所以会影响到效率。 个人认为可以采用缓存的思想来避免’\r’字符存入。效率能提升一点是一点,整个系统那么庞大,如果每个细节都能精心地设计,量变到质变,性能会有很大的提升。