RTSP连接服务器和从服务器接收数据的处理流程
2011-12-27 17:50
579 查看
RTSP连接服务器是否成功,以及是否从服务器接收到实际播放的数据,主要是判断两个linux select函数的执行结果。
1.连接服务器的处理过程
2.是否接收到服务器发送的播放数据的处理
2.1 在ARTSPConnection::onCompleteConnection成功连接后,发送检查接收数据的event
2.2 void ARTSPConnection::onMessageReceived(const sp<AMessage> &msg) {
case kWhatReceiveResponse:
onReceiveResponse();
break;
继续调用---------->
2.3
继续调用……
2.3.1 bool ARTSPConnection::receiveRTSPReponse() {
--->
2.3.1.1 bool ARTSPConnection::receiveLine(AString *line) {
--->
2.3.1.1.1 status_t ARTSPConnection::receive(void *data, size_t size) { // 每次读一个字符
--->
2.3.1.1.1.1 ssize_t n = recv(mSocket, (uint8_t *)data + offset, size - offset, 0); // 从TCP连接的另一端接收数据
--->
2.3.1.2 sp<ABuffer> ARTSPConnection::receiveBinaryData()
--->
2.3.1.2.1 status_t ARTSPConnection::receive(void *data, size_t size) { // 每次读3个字符
--->
recv()
2.3.1.2.2 status_t ARTSPConnection::receive(void *data, size_t size) { // 每次读buffer->size()个字符
--->
recv()
--->
2.3.1.3 new ARTSPResponse
--->
2.3.1.4 receiveLine()
--->
2.3.1.5 recv() // while (numBytesRead < contentLength)
--->
2.3.1.6 函数返回
return isRequest
? handleServerRequest(response)
: notifyResponseListener(response);
附:
SDP: Session Description Protocol
[RFC4566]
http://www.ietf.org/rfc/rfc4566.txt
1.连接服务器的处理过程
ARTSPConnection::onConnect(const sp<AMessage> &msg) int err = ::connect( mSocket, (const struct sockaddr *)&remote, sizeof(remote)); LOGE("%s L%d err = %d", __FUNCTION__, __LINE__, err); if (err < 0) { if (errno == EINPROGRESS) { // 正在连接中 sp<AMessage> msg = new AMessage(kWhatCompleteConnection, id()); msg->setMessage("reply", reply); msg->setInt32("connection-id", mConnectionID); msg->post();调用---------->
void ARTSPConnection::onMessageReceived(const sp<AMessage> &msg) { case kWhatCompleteConnection: onCompleteConnection(msg);调用---------->
ARTSPConnection::onCompleteConnection int res = select(mSocket + 1, NULL, &ws, NULL, &tv); CHECK_GE(res, 0); if (res == 0) { // Timed out. Not yet connected. LOGE("%s L%d -ECONNABORTED", __FUNCTION__, __LINE__); msg->post(); // 循环执行此函数检查是否connected return; }
2.是否接收到服务器发送的播放数据的处理
2.1 在ARTSPConnection::onCompleteConnection成功连接后,发送检查接收数据的event
void ARTSPConnection::postReceiveReponseEvent() { if (mReceiveResponseEventPending) { return; } sp<AMessage> msg = new AMessage(kWhatReceiveResponse, id()); msg->post(); mReceiveResponseEventPending = true; }调用---------->
2.2 void ARTSPConnection::onMessageReceived(const sp<AMessage> &msg) {
case kWhatReceiveResponse:
onReceiveResponse();
break;
继续调用---------->
2.3
void ARTSPConnection::onReceiveResponse() { int res = select(mSocket + 1, &rs, NULL, NULL, &tv); // LOGE("%s L%d select res = %d", __FUNCTION__, __LINE__, res); CHECK_GE(res, 0); if (res == 1) { MakeSocketBlocking(mSocket, true); bool success = receiveRTSPReponse(); // 2.3.1 MakeSocketBlocking(mSocket, false); LOGE("%s L%d select ==== success = %d", __FUNCTION__, __LINE__, success); if (!success) { // Something horrible, irreparable has happened. flushPendingRequests(); LOGE("%s L%d return ", __FUNCTION__, __LINE__); return; } } postReceiveReponseEvent(); // 循环执行此函数 }
继续调用……
2.3.1 bool ARTSPConnection::receiveRTSPReponse() {
--->
2.3.1.1 bool ARTSPConnection::receiveLine(AString *line) {
--->
2.3.1.1.1 status_t ARTSPConnection::receive(void *data, size_t size) { // 每次读一个字符
--->
2.3.1.1.1.1 ssize_t n = recv(mSocket, (uint8_t *)data + offset, size - offset, 0); // 从TCP连接的另一端接收数据
--->
2.3.1.2 sp<ABuffer> ARTSPConnection::receiveBinaryData()
--->
2.3.1.2.1 status_t ARTSPConnection::receive(void *data, size_t size) { // 每次读3个字符
--->
recv()
2.3.1.2.2 status_t ARTSPConnection::receive(void *data, size_t size) { // 每次读buffer->size()个字符
--->
recv()
--->
2.3.1.3 new ARTSPResponse
--->
2.3.1.4 receiveLine()
--->
2.3.1.5 recv() // while (numBytesRead < contentLength)
--->
2.3.1.6 函数返回
return isRequest
? handleServerRequest(response)
: notifyResponseListener(response);
附:
SDP: Session Description Protocol
[RFC4566]
http://www.ietf.org/rfc/rfc4566.txt
相关文章推荐
- android RTSP连接服务器和从服务器接收数据的处理流程
- AJAX建立和服务器连接,接收服务器技术处理服务器返回的数据
- AJAX建立和服务器连接,接收服务器技术处理服务器返回的数据
- RTSP服务器处理客户端点播的基本流程
- PHP POST接收处理 IOS上传NSData图片数据,上传图片到服务器
- 关于客户端上传图片和文字,服务器对上传的数据的接收和图片压缩处理
- live555 RTSP服务器建立及消息处理流程
- [转]RTSP服务器处理客户端点播的基本流程
- MQTT连接服务器发送和接收数据
- RTSP服务器处理客户端点播的基本流程
- live555从RTSP服务器读取数据到使用接收到的数据流程分析
- live555 接收客户端连接及rtsp交互---网络连接处理及RTSP连接模块
- iOS开发之仿微博视频边下边播之自定义AVPlayer播放器, 边下边播解剖。视频处理流程,建立连接-请求数据-统筹数据-解码数据-视频呈现
- live555 接收客户端连接及rtsp交互---网络连接处理及RTSP连接模块 .
- 服务器怎样处理连接超时和数据拼接
- live555 RTSP服务器建立及消息处理流程
- VLC通过rtsp请求服务器,服务器接收rtp数据并转发
- Telnet服务器接收字符处理流程
- live555从RTSP服务器读取数据到使用接收到的数据流程分析
- 服务器使用环形缓冲区处理接收数据