int ServePacket(STREAMING_SERVER *server, RTMP *r, RTMPPacket *packet) { int ret = 0; RTMP_Log(RTMP_LOGDEBUG, "%s, received packet type %02X, size %u bytes", __FUNCTION__, packet->m_packetType, packet->m_nBodySize); switch (packet->m_packetType) { case RTMP_PACKET_TYPE_CHUNK_SIZE: // HandleChangeChunkSize(r, packet); break; case RTMP_PACKET_TYPE_BYTES_READ_REPORT: break; case RTMP_PACKET_TYPE_CONTROL: // HandleCtrl(r, packet); break; case RTMP_PACKET_TYPE_SERVER_BW: // HandleServerBW(r, packet); break; case RTMP_PACKET_TYPE_CLIENT_BW: // HandleClientBW(r, packet); break; case RTMP_PACKET_TYPE_AUDIO: //RTMP_Log(RTMP_LOGDEBUG, "%s, received: audio %lu bytes", __FUNCTION__, packet.m_nBodySize); break; case RTMP_PACKET_TYPE_VIDEO: //RTMP_Log(RTMP_LOGDEBUG, "%s, received: video %lu bytes", __FUNCTION__, packet.m_nBodySize); break; case RTMP_PACKET_TYPE_FLEX_STREAM_SEND: break; case RTMP_PACKET_TYPE_FLEX_SHARED_OBJECT: break; case RTMP_PACKET_TYPE_FLEX_MESSAGE: { RTMP_Log(RTMP_LOGDEBUG, "%s, flex message, size %u bytes, not fully supported", __FUNCTION__, packet->m_nBodySize); //RTMP_LogHex(packet.m_body, packet.m_nBodySize); // some DEBUG code /*RTMP_LIB_AMFObject obj; int nRes = obj.Decode(packet.m_body+1, packet.m_nBodySize-1); if(nRes < 0) { RTMP_Log(RTMP_LOGERROR, "%s, error decoding AMF3 packet", __FUNCTION__); //return; } obj.Dump(); */ if (ServeInvoke(server, r, packet, 1)) RTMP_Close(r); break; } case RTMP_PACKET_TYPE_INFO: break; case RTMP_PACKET_TYPE_SHARED_OBJECT: break; case RTMP_PACKET_TYPE_INVOKE: RTMP_Log(RTMP_LOGDEBUG, "%s, received: invoke %u bytes", __FUNCTION__, packet->m_nBodySize); //RTMP_LogHex(packet.m_body, packet.m_nBodySize); if (ServeInvoke(server, r, packet, 0)) RTMP_Close(r); break; case RTMP_PACKET_TYPE_FLASH_VIDEO: break; default: RTMP_Log(RTMP_LOGDEBUG, "%s, unknown packet type received: 0x%02x", __FUNCTION__, packet->m_packetType); #ifdef _DEBUG RTMP_LogHex(RTMP_LOGDEBUG, (const uint8_t*)packet->m_body, packet->m_nBodySize); #endif } return ret; }
int ServePacket(STREAMING_SERVER *server, RTMP *r, RTMPPacket *packet) { int ret = 0; RTMP_Log(RTMP_LOGDEBUG, "%s, received packet type %02X, size %lu bytes", __FUNCTION__, packet->m_packetType, packet->m_nBodySize); switch (packet->m_packetType) { case 0x01: // chunk size // HandleChangeChunkSize(r, packet); break; case 0x03: // bytes read report break; case 0x04: // ctrl // HandleCtrl(r, packet); break; case 0x05: // server bw // HandleServerBW(r, packet); break; case 0x06: // client bw // HandleClientBW(r, packet); break; case 0x08: // audio data //RTMP_Log(RTMP_LOGDEBUG, "%s, received: audio %lu bytes", __FUNCTION__, packet.m_nBodySize); break; case 0x09: // video data //RTMP_Log(RTMP_LOGDEBUG, "%s, received: video %lu bytes", __FUNCTION__, packet.m_nBodySize); break; case 0x0F: // flex stream send break; case 0x10: // flex shared object break; case 0x11: // flex message { RTMP_Log(RTMP_LOGDEBUG, "%s, flex message, size %lu bytes, not fully supported", __FUNCTION__, packet->m_nBodySize); //RTMP_LogHex(packet.m_body, packet.m_nBodySize); // some DEBUG code /*RTMP_LIB_AMFObject obj; int nRes = obj.Decode(packet.m_body+1, packet.m_nBodySize-1); if(nRes < 0) { RTMP_Log(RTMP_LOGERROR, "%s, error decoding AMF3 packet", __FUNCTION__); //return; } obj.Dump(); */ if (ServeInvoke(server, r, packet, 1)) RTMP_Close(r); break; } case 0x12: // metadata (notify) break; case 0x13: /* shared object */ break; case 0x14: // invoke RTMP_Log(RTMP_LOGDEBUG, "%s, received: invoke %lu bytes", __FUNCTION__, packet->m_nBodySize); //RTMP_LogHex(packet.m_body, packet.m_nBodySize); if (ServeInvoke(server, r, packet, 0)) RTMP_Close(r); break; case 0x16: /* flv */ break; default: RTMP_Log(RTMP_LOGDEBUG, "%s, unknown packet type received: 0x%02x", __FUNCTION__, packet->m_packetType); #ifdef _DEBUG RTMP_LogHex(RTMP_LOGDEBUG, packet->m_body, packet->m_nBodySize); #endif } return ret; }
static void RtmpDispatchPkt(RTMP_SESSION *pSession, RTMPPacket *pPkt) { RTMP *pRtmp = pSession->prtmp; /* 处理报文 */ RTMP_Log(RTMP_LOGDEBUG, "%s, received packet type %02X, size %u bytes", __FUNCTION__, pPkt->m_packetType, pPkt->m_nBodySize); switch(pPkt->m_packetType) { case RTMP_PACKET_TYPE_CHUNK_SIZE: { break; } case RTMP_PACKET_TYPE_BYTES_READ_REPORT: { break; } case RTMP_PACKET_TYPE_CONTROL: { break; } case RTMP_PACKET_TYPE_SERVER_BW: { break; } case RTMP_PACKET_TYPE_CLIENT_BW: { break; } case RTMP_PACKET_TYPE_AUDIO: { break; } case RTMP_PACKET_TYPE_VIDEO: { break; } case RTMP_PACKET_TYPE_FLEX_STREAM_SEND: { break; } case RTMP_PACKET_TYPE_FLEX_SHARED_OBJECT: { break; } case RTMP_PACKET_TYPE_FLEX_MESSAGE: { RTMP_Log(RTMP_LOGDEBUG, "%s, flex message, size %u bytes, not fully supported", __FUNCTION__, pPkt->m_nBodySize); if (SessionInvoke(pSession, pPkt, 1)) RTMP_Close(pSession->prtmp); break; } case RTMP_PACKET_TYPE_INFO: { break; } case RTMP_PACKET_TYPE_SHARED_OBJECT: { break; } case RTMP_PACKET_TYPE_INVOKE: { RTMP_Log(RTMP_LOGDEBUG, "%s, received: invoke %u bytes", __FUNCTION__, pPkt->m_nBodySize); if (SessionInvoke(pSession, pPkt, 0)) RTMP_Close(pRtmp); break; } case RTMP_PACKET_TYPE_FLASH_VIDEO: { break; } default: { RTMP_Log(RTMP_LOGDEBUG, "%s, unknown packet type received: 0x%02x", __FUNCTION__, pPkt->m_packetType); #ifdef _DEBUG RTMP_LogHex(RTMP_LOGDEBUG, pPkt->m_body, pPkt->m_nBodySize); #endif } } RTMPPacket_Free(pPkt); RTMPPacket_Init(pPkt); }