Lines Matching full:packet
130 static void HandleChangeChunkSize(RTMP *r, const RTMPPacket *packet);
131 static void HandleAudio(RTMP *r, const RTMPPacket *packet);
132 static void HandleVideo(RTMP *r, const RTMPPacket *packet);
133 static void HandleCtrl(RTMP *r, const RTMPPacket *packet);
134 static void HandleServerBW(RTMP *r, const RTMPPacket *packet);
135 static void HandleClientBW(RTMP *r, const RTMPPacket *packet);
216 …"RTMP PACKET: packet type: 0x%02x. channel: 0x%02x. info 1: %d info 2: %d. Body size: %u. body: 0x… in RTMPPacket_Dump()
1072 char packet[] = { in SocksNegotiate() local
1081 WriteN(r, packet, sizeof packet); in SocksNegotiate()
1083 if (ReadN(r, packet, 8) != 8) in SocksNegotiate()
1086 if (packet[0] == 0 && packet[1] == 90) in SocksNegotiate()
1092 RTMP_Log(RTMP_LOGERROR, "%s, SOCKS returned error code %d", __FUNCTION__, packet[1]); in SocksNegotiate()
1101 RTMPPacket packet = { 0 }; in RTMP_ConnectStream() local
1111 while (!r->m_bPlaying && RTMP_IsConnected(r) && RTMP_ReadPacket(r, &packet)) in RTMP_ConnectStream()
1113 if (RTMPPacket_IsReady(&packet)) in RTMP_ConnectStream()
1115 if (!packet.m_nBodySize) in RTMP_ConnectStream()
1117 if ((packet.m_packetType == RTMP_PACKET_TYPE_AUDIO) || in RTMP_ConnectStream()
1118 (packet.m_packetType == RTMP_PACKET_TYPE_VIDEO) || in RTMP_ConnectStream()
1119 (packet.m_packetType == RTMP_PACKET_TYPE_INFO)) in RTMP_ConnectStream()
1121 RTMP_Log(RTMP_LOGWARNING, "Received FLV packet before play()! Ignoring."); in RTMP_ConnectStream()
1122 RTMPPacket_Free(&packet); in RTMP_ConnectStream()
1126 RTMP_ClientPacket(r, &packet); in RTMP_ConnectStream()
1127 RTMPPacket_Free(&packet); in RTMP_ConnectStream()
1179 RTMP_GetNextMediaPacket(RTMP *r, RTMPPacket *packet) in RTMP_GetNextMediaPacket() argument
1184 && RTMP_ReadPacket(r, packet)) in RTMP_GetNextMediaPacket()
1186 if (!RTMPPacket_IsReady(packet) || !packet->m_nBodySize) in RTMP_GetNextMediaPacket()
1191 bHasMediaPacket = RTMP_ClientPacket(r, packet); in RTMP_GetNextMediaPacket()
1195 RTMPPacket_Free(packet); in RTMP_GetNextMediaPacket()
1199 if (packet->m_nTimeStamp <= r->m_mediaStamp) in RTMP_GetNextMediaPacket()
1205 packet->m_packetType, packet->m_nBodySize, in RTMP_GetNextMediaPacket()
1206 packet->m_nTimeStamp, packet->m_hasAbsTimestamp, in RTMP_GetNextMediaPacket()
1209 RTMPPacket_Free(packet); in RTMP_GetNextMediaPacket()
1226 RTMP_ClientPacket(RTMP *r, RTMPPacket *packet) in RTMP_ClientPacket() argument
1229 switch (packet->m_packetType) in RTMP_ClientPacket()
1233 HandleChangeChunkSize(r, packet); in RTMP_ClientPacket()
1243 HandleCtrl(r, packet); in RTMP_ClientPacket()
1248 HandleServerBW(r, packet); in RTMP_ClientPacket()
1253 HandleClientBW(r, packet); in RTMP_ClientPacket()
1258 … /*RTMP_Log(RTMP_LOGDEBUG, "%s, received: audio %lu bytes", __FUNCTION__, packet.m_nBodySize); */ in RTMP_ClientPacket()
1259 HandleAudio(r, packet); in RTMP_ClientPacket()
1262 r->m_mediaChannel = packet->m_nChannel; in RTMP_ClientPacket()
1264 r->m_mediaStamp = packet->m_nTimeStamp; in RTMP_ClientPacket()
1269 … /*RTMP_Log(RTMP_LOGDEBUG, "%s, received: video %lu bytes", __FUNCTION__, packet.m_nBodySize); */ in RTMP_ClientPacket()
1270 HandleVideo(r, packet); in RTMP_ClientPacket()
1273 r->m_mediaChannel = packet->m_nChannel; in RTMP_ClientPacket()
1275 r->m_mediaStamp = packet->m_nTimeStamp; in RTMP_ClientPacket()
1282 __FUNCTION__, packet->m_nBodySize); in RTMP_ClientPacket()
1289 __FUNCTION__, packet->m_nBodySize); in RTMP_ClientPacket()
1297 __FUNCTION__, packet->m_nBodySize); in RTMP_ClientPacket()
1298 /*RTMP_LogHex(packet.m_body, packet.m_nBodySize); */ in RTMP_ClientPacket()
1303 int nRes = obj.Decode(packet.m_body+1, packet.m_nBodySize-1); in RTMP_ClientPacket()
1305 RTMP_Log(RTMP_LOGERROR, "%s, error decoding AMF3 packet", __FUNCTION__); in RTMP_ClientPacket()
1312 if (HandleInvoke(r, packet->m_body + 1, packet->m_nBodySize - 1) == 1) in RTMP_ClientPacket()
1319 packet->m_nBodySize); in RTMP_ClientPacket()
1320 if (HandleMetadata(r, packet->m_body, packet->m_nBodySize)) in RTMP_ClientPacket()
1332 packet->m_nBodySize); in RTMP_ClientPacket()
1333 /*RTMP_LogHex(packet.m_body, packet.m_nBodySize); */ in RTMP_ClientPacket()
1335 if (HandleInvoke(r, packet->m_body, packet->m_nBodySize) == 1) in RTMP_ClientPacket()
1343 uint32_t nTimeStamp = packet->m_nTimeStamp; in RTMP_ClientPacket()
1345 while (pos + 11 < packet->m_nBodySize) in RTMP_ClientPacket()
1347 …uint32_t dataSize = AMF_DecodeInt24(packet->m_body + pos + 1); /* size without header (11) and pre… in RTMP_ClientPacket()
1349 if (pos + 11 + dataSize + 4 > packet->m_nBodySize) in RTMP_ClientPacket()
1354 if (packet->m_body[pos] == 0x12) in RTMP_ClientPacket()
1356 HandleMetadata(r, packet->m_body + pos + 11, dataSize); in RTMP_ClientPacket()
1358 else if (packet->m_body[pos] == 8 || packet->m_body[pos] == 9) in RTMP_ClientPacket()
1360 nTimeStamp = AMF_DecodeInt24(packet->m_body + pos + 4); in RTMP_ClientPacket()
1361 nTimeStamp |= (packet->m_body[pos + 7] << 24); in RTMP_ClientPacket()
1369 …/*RTMP_Log(RTMP_LOGDEBUG, "%s, received: FLV tag(s) %lu bytes", __FUNCTION__, packet.m_nBodySize);… in RTMP_ClientPacket()
1374 RTMP_Log(RTMP_LOGDEBUG, "%s, unknown packet type received: 0x%02x", __FUNCTION__, in RTMP_ClientPacket()
1375 packet->m_packetType); in RTMP_ClientPacket()
1377 RTMP_LogHex(RTMP_LOGDEBUG, packet->m_body, packet->m_nBodySize); in RTMP_ClientPacket()
1581 RTMPPacket packet; in SendConnectPacket() local
1588 packet.m_nChannel = 0x03; /* control channel (invoke) */ in SendConnectPacket()
1589 packet.m_headerType = RTMP_PACKET_SIZE_LARGE; in SendConnectPacket()
1590 packet.m_packetType = RTMP_PACKET_TYPE_INVOKE; in SendConnectPacket()
1591 packet.m_nTimeStamp = 0; in SendConnectPacket()
1592 packet.m_nInfoField2 = 0; in SendConnectPacket()
1593 packet.m_hasAbsTimestamp = 0; in SendConnectPacket()
1594 packet.m_body = pbuf + RTMP_MAX_HEADER_SIZE; in SendConnectPacket()
1596 enc = packet.m_body; in SendConnectPacket()
1684 packet.m_nBodySize = enc - packet.m_body; in SendConnectPacket()
1686 return RTMP_SendPacket(r, &packet, TRUE); in SendConnectPacket()
1695 RTMPPacket packet;
1699 packet.m_nChannel = 0x03; /* control channel (invoke) */
1700 packet.m_headerType = RTMP_PACKET_SIZE_MEDIUM;
1701 packet.m_packetType = RTMP_PACKET_TYPE_INVOKE;
1702 packet.m_nTimeStamp = 0;
1703 packet.m_nInfoField2 = 0;
1704 packet.m_hasAbsTimestamp = 0;
1705 packet.m_body = pbuf + RTMP_MAX_HEADER_SIZE;
1707 enc = packet.m_body;
1716 packet.m_nBodySize = enc - packet.m_body;
1718 return RTMP_SendPacket(r, &packet, TRUE);
1727 RTMPPacket packet; in RTMP_SendCreateStream() local
1731 packet.m_nChannel = 0x03; /* control channel (invoke) */ in RTMP_SendCreateStream()
1732 packet.m_headerType = RTMP_PACKET_SIZE_MEDIUM; in RTMP_SendCreateStream()
1733 packet.m_packetType = RTMP_PACKET_TYPE_INVOKE; in RTMP_SendCreateStream()
1734 packet.m_nTimeStamp = 0; in RTMP_SendCreateStream()
1735 packet.m_nInfoField2 = 0; in RTMP_SendCreateStream()
1736 packet.m_hasAbsTimestamp = 0; in RTMP_SendCreateStream()
1737 packet.m_body = pbuf + RTMP_MAX_HEADER_SIZE; in RTMP_SendCreateStream()
1739 enc = packet.m_body; in RTMP_SendCreateStream()
1744 packet.m_nBodySize = enc - packet.m_body; in RTMP_SendCreateStream()
1746 return RTMP_SendPacket(r, &packet, TRUE); in RTMP_SendCreateStream()
1754 RTMPPacket packet; in SendFCSubscribe() local
1757 packet.m_nChannel = 0x03; /* control channel (invoke) */ in SendFCSubscribe()
1758 packet.m_headerType = RTMP_PACKET_SIZE_MEDIUM; in SendFCSubscribe()
1759 packet.m_packetType = RTMP_PACKET_TYPE_INVOKE; in SendFCSubscribe()
1760 packet.m_nTimeStamp = 0; in SendFCSubscribe()
1761 packet.m_nInfoField2 = 0; in SendFCSubscribe()
1762 packet.m_hasAbsTimestamp = 0; in SendFCSubscribe()
1763 packet.m_body = pbuf + RTMP_MAX_HEADER_SIZE; in SendFCSubscribe()
1766 enc = packet.m_body; in SendFCSubscribe()
1775 packet.m_nBodySize = enc - packet.m_body; in SendFCSubscribe()
1777 return RTMP_SendPacket(r, &packet, TRUE); in SendFCSubscribe()
1786 RTMPPacket packet; in SendUsherToken() local
1789 packet.m_nChannel = 0x03; /* control channel (invoke) */ in SendUsherToken()
1790 packet.m_headerType = RTMP_PACKET_SIZE_MEDIUM; in SendUsherToken()
1791 packet.m_packetType = RTMP_PACKET_TYPE_INVOKE; in SendUsherToken()
1792 packet.m_nTimeStamp = 0; in SendUsherToken()
1793 packet.m_nInfoField2 = 0; in SendUsherToken()
1794 packet.m_hasAbsTimestamp = 0; in SendUsherToken()
1795 packet.m_body = pbuf + RTMP_MAX_HEADER_SIZE; in SendUsherToken()
1798 enc = packet.m_body; in SendUsherToken()
1807 packet.m_nBodySize = enc - packet.m_body; in SendUsherToken()
1809 return RTMP_SendPacket(r, &packet, FALSE); in SendUsherToken()
1818 RTMPPacket packet; in SendReleaseStream() local
1822 packet.m_nChannel = 0x03; /* control channel (invoke) */ in SendReleaseStream()
1823 packet.m_headerType = RTMP_PACKET_SIZE_MEDIUM; in SendReleaseStream()
1824 packet.m_packetType = RTMP_PACKET_TYPE_INVOKE; in SendReleaseStream()
1825 packet.m_nTimeStamp = 0; in SendReleaseStream()
1826 packet.m_nInfoField2 = 0; in SendReleaseStream()
1827 packet.m_hasAbsTimestamp = 0; in SendReleaseStream()
1828 packet.m_body = pbuf + RTMP_MAX_HEADER_SIZE; in SendReleaseStream()
1830 enc = packet.m_body; in SendReleaseStream()
1838 packet.m_nBodySize = enc - packet.m_body; in SendReleaseStream()
1840 return RTMP_SendPacket(r, &packet, FALSE); in SendReleaseStream()
1848 RTMPPacket packet; in SendFCPublish() local
1852 packet.m_nChannel = 0x03; /* control channel (invoke) */ in SendFCPublish()
1853 packet.m_headerType = RTMP_PACKET_SIZE_MEDIUM; in SendFCPublish()
1854 packet.m_packetType = RTMP_PACKET_TYPE_INVOKE; in SendFCPublish()
1855 packet.m_nTimeStamp = 0; in SendFCPublish()
1856 packet.m_nInfoField2 = 0; in SendFCPublish()
1857 packet.m_hasAbsTimestamp = 0; in SendFCPublish()
1858 packet.m_body = pbuf + RTMP_MAX_HEADER_SIZE; in SendFCPublish()
1860 enc = packet.m_body; in SendFCPublish()
1868 packet.m_nBodySize = enc - packet.m_body; in SendFCPublish()
1870 return RTMP_SendPacket(r, &packet, FALSE); in SendFCPublish()
1878 RTMPPacket packet; in SendFCUnpublish() local
1882 packet.m_nChannel = 0x03; /* control channel (invoke) */ in SendFCUnpublish()
1883 packet.m_headerType = RTMP_PACKET_SIZE_MEDIUM; in SendFCUnpublish()
1884 packet.m_packetType = RTMP_PACKET_TYPE_INVOKE; in SendFCUnpublish()
1885 packet.m_nTimeStamp = 0; in SendFCUnpublish()
1886 packet.m_nInfoField2 = 0; in SendFCUnpublish()
1887 packet.m_hasAbsTimestamp = 0; in SendFCUnpublish()
1888 packet.m_body = pbuf + RTMP_MAX_HEADER_SIZE; in SendFCUnpublish()
1890 enc = packet.m_body; in SendFCUnpublish()
1898 packet.m_nBodySize = enc - packet.m_body; in SendFCUnpublish()
1900 return RTMP_SendPacket(r, &packet, FALSE); in SendFCUnpublish()
1910 RTMPPacket packet; in SendPublish() local
1914 packet.m_nChannel = 0x04; /* source channel (invoke) */ in SendPublish()
1915 packet.m_headerType = RTMP_PACKET_SIZE_LARGE; in SendPublish()
1916 packet.m_packetType = RTMP_PACKET_TYPE_INVOKE; in SendPublish()
1917 packet.m_nTimeStamp = 0; in SendPublish()
1918 packet.m_nInfoField2 = r->m_stream_id; in SendPublish()
1919 packet.m_hasAbsTimestamp = 0; in SendPublish()
1920 packet.m_body = pbuf + RTMP_MAX_HEADER_SIZE; in SendPublish()
1922 enc = packet.m_body; in SendPublish()
1935 packet.m_nBodySize = enc - packet.m_body; in SendPublish()
1937 return RTMP_SendPacket(r, &packet, TRUE); in SendPublish()
1945 RTMPPacket packet; in SendDeleteStream() local
1949 packet.m_nChannel = 0x03; /* control channel (invoke) */ in SendDeleteStream()
1950 packet.m_headerType = RTMP_PACKET_SIZE_MEDIUM; in SendDeleteStream()
1951 packet.m_packetType = RTMP_PACKET_TYPE_INVOKE; in SendDeleteStream()
1952 packet.m_nTimeStamp = 0; in SendDeleteStream()
1953 packet.m_nInfoField2 = 0; in SendDeleteStream()
1954 packet.m_hasAbsTimestamp = 0; in SendDeleteStream()
1955 packet.m_body = pbuf + RTMP_MAX_HEADER_SIZE; in SendDeleteStream()
1957 enc = packet.m_body; in SendDeleteStream()
1963 packet.m_nBodySize = enc - packet.m_body; in SendDeleteStream()
1966 return RTMP_SendPacket(r, &packet, FALSE); in SendDeleteStream()
1974 RTMPPacket packet; in RTMP_SendPause() local
1978 packet.m_nChannel = 0x08; /* video channel */ in RTMP_SendPause()
1979 packet.m_headerType = RTMP_PACKET_SIZE_MEDIUM; in RTMP_SendPause()
1980 packet.m_packetType = RTMP_PACKET_TYPE_INVOKE; in RTMP_SendPause()
1981 packet.m_nTimeStamp = 0; in RTMP_SendPause()
1982 packet.m_nInfoField2 = 0; in RTMP_SendPause()
1983 packet.m_hasAbsTimestamp = 0; in RTMP_SendPause()
1984 packet.m_body = pbuf + RTMP_MAX_HEADER_SIZE; in RTMP_SendPause()
1986 enc = packet.m_body; in RTMP_SendPause()
1993 packet.m_nBodySize = enc - packet.m_body; in RTMP_SendPause()
1996 return RTMP_SendPacket(r, &packet, TRUE); in RTMP_SendPause()
2012 RTMPPacket packet; in RTMP_SendSeek() local
2016 packet.m_nChannel = 0x08; /* video channel */ in RTMP_SendSeek()
2017 packet.m_headerType = RTMP_PACKET_SIZE_MEDIUM; in RTMP_SendSeek()
2018 packet.m_packetType = RTMP_PACKET_TYPE_INVOKE; in RTMP_SendSeek()
2019 packet.m_nTimeStamp = 0; in RTMP_SendSeek()
2020 packet.m_nInfoField2 = 0; in RTMP_SendSeek()
2021 packet.m_hasAbsTimestamp = 0; in RTMP_SendSeek()
2022 packet.m_body = pbuf + RTMP_MAX_HEADER_SIZE; in RTMP_SendSeek()
2024 enc = packet.m_body; in RTMP_SendSeek()
2030 packet.m_nBodySize = enc - packet.m_body; in RTMP_SendSeek()
2035 return RTMP_SendPacket(r, &packet, TRUE); in RTMP_SendSeek()
2041 RTMPPacket packet; in RTMP_SendServerBW() local
2044 packet.m_nChannel = 0x02; /* control channel (invoke) */ in RTMP_SendServerBW()
2045 packet.m_headerType = RTMP_PACKET_SIZE_LARGE; in RTMP_SendServerBW()
2046 packet.m_packetType = RTMP_PACKET_TYPE_SERVER_BW; in RTMP_SendServerBW()
2047 packet.m_nTimeStamp = 0; in RTMP_SendServerBW()
2048 packet.m_nInfoField2 = 0; in RTMP_SendServerBW()
2049 packet.m_hasAbsTimestamp = 0; in RTMP_SendServerBW()
2050 packet.m_body = pbuf + RTMP_MAX_HEADER_SIZE; in RTMP_SendServerBW()
2052 packet.m_nBodySize = 4; in RTMP_SendServerBW()
2054 AMF_EncodeInt32(packet.m_body, pend, r->m_nServerBW); in RTMP_SendServerBW()
2055 return RTMP_SendPacket(r, &packet, FALSE); in RTMP_SendServerBW()
2061 RTMPPacket packet; in RTMP_SendClientBW() local
2064 packet.m_nChannel = 0x02; /* control channel (invoke) */ in RTMP_SendClientBW()
2065 packet.m_headerType = RTMP_PACKET_SIZE_LARGE; in RTMP_SendClientBW()
2066 packet.m_packetType = RTMP_PACKET_TYPE_CLIENT_BW; in RTMP_SendClientBW()
2067 packet.m_nTimeStamp = 0; in RTMP_SendClientBW()
2068 packet.m_nInfoField2 = 0; in RTMP_SendClientBW()
2069 packet.m_hasAbsTimestamp = 0; in RTMP_SendClientBW()
2070 packet.m_body = pbuf + RTMP_MAX_HEADER_SIZE; in RTMP_SendClientBW()
2072 packet.m_nBodySize = 5; in RTMP_SendClientBW()
2074 AMF_EncodeInt32(packet.m_body, pend, r->m_nClientBW); in RTMP_SendClientBW()
2075 packet.m_body[4] = r->m_nClientBW2; in RTMP_SendClientBW()
2076 return RTMP_SendPacket(r, &packet, FALSE); in RTMP_SendClientBW()
2082 RTMPPacket packet; in SendBytesReceived() local
2085 packet.m_nChannel = 0x02; /* control channel (invoke) */ in SendBytesReceived()
2086 packet.m_headerType = RTMP_PACKET_SIZE_MEDIUM; in SendBytesReceived()
2087 packet.m_packetType = RTMP_PACKET_TYPE_BYTES_READ_REPORT; in SendBytesReceived()
2088 packet.m_nTimeStamp = 0; in SendBytesReceived()
2089 packet.m_nInfoField2 = 0; in SendBytesReceived()
2090 packet.m_hasAbsTimestamp = 0; in SendBytesReceived()
2091 packet.m_body = pbuf + RTMP_MAX_HEADER_SIZE; in SendBytesReceived()
2093 packet.m_nBodySize = 4; in SendBytesReceived()
2095 AMF_EncodeInt32(packet.m_body, pend, r->m_nBytesIn); /* hard coded for now */ in SendBytesReceived()
2099 return RTMP_SendPacket(r, &packet, FALSE); in SendBytesReceived()
2107 RTMPPacket packet; in SendCheckBW() local
2111 packet.m_nChannel = 0x03; /* control channel (invoke) */ in SendCheckBW()
2112 packet.m_headerType = RTMP_PACKET_SIZE_LARGE; in SendCheckBW()
2113 packet.m_packetType = RTMP_PACKET_TYPE_INVOKE; in SendCheckBW()
2114 packet.m_nTimeStamp = 0; /* RTMP_GetTime(); */ in SendCheckBW()
2115 packet.m_nInfoField2 = 0; in SendCheckBW()
2116 packet.m_hasAbsTimestamp = 0; in SendCheckBW()
2117 packet.m_body = pbuf + RTMP_MAX_HEADER_SIZE; in SendCheckBW()
2119 enc = packet.m_body; in SendCheckBW()
2124 packet.m_nBodySize = enc - packet.m_body; in SendCheckBW()
2127 return RTMP_SendPacket(r, &packet, FALSE); in SendCheckBW()
2135 RTMPPacket packet; in SendCheckBWResult() local
2139 packet.m_nChannel = 0x03; /* control channel (invoke) */ in SendCheckBWResult()
2140 packet.m_headerType = RTMP_PACKET_SIZE_MEDIUM; in SendCheckBWResult()
2141 packet.m_packetType = RTMP_PACKET_TYPE_INVOKE; in SendCheckBWResult()
2142 packet.m_nTimeStamp = 0x16 * r->m_nBWCheckCounter; /* temp inc value. till we figure it out. */ in SendCheckBWResult()
2143 packet.m_nInfoField2 = 0; in SendCheckBWResult()
2144 packet.m_hasAbsTimestamp = 0; in SendCheckBWResult()
2145 packet.m_body = pbuf + RTMP_MAX_HEADER_SIZE; in SendCheckBWResult()
2147 enc = packet.m_body; in SendCheckBWResult()
2153 packet.m_nBodySize = enc - packet.m_body; in SendCheckBWResult()
2155 return RTMP_SendPacket(r, &packet, FALSE); in SendCheckBWResult()
2164 RTMPPacket packet; in SendPong() local
2168 packet.m_nChannel = 0x03; /* control channel (invoke) */ in SendPong()
2169 packet.m_headerType = RTMP_PACKET_SIZE_MEDIUM; in SendPong()
2170 packet.m_packetType = RTMP_PACKET_TYPE_INVOKE; in SendPong()
2171 packet.m_nTimeStamp = 0x16 * r->m_nBWCheckCounter; /* temp inc value. till we figure it out. */ in SendPong()
2172 packet.m_nInfoField2 = 0; in SendPong()
2173 packet.m_hasAbsTimestamp = 0; in SendPong()
2174 packet.m_body = pbuf + RTMP_MAX_HEADER_SIZE; in SendPong()
2176 enc = packet.m_body; in SendPong()
2181 packet.m_nBodySize = enc - packet.m_body; in SendPong()
2183 return RTMP_SendPacket(r, &packet, FALSE); in SendPong()
2191 RTMPPacket packet; in SendPlay() local
2195 packet.m_nChannel = 0x08; /* we make 8 our stream channel */ in SendPlay()
2196 packet.m_headerType = RTMP_PACKET_SIZE_LARGE; in SendPlay()
2197 packet.m_packetType = RTMP_PACKET_TYPE_INVOKE; in SendPlay()
2198 packet.m_nTimeStamp = 0; in SendPlay()
2199 packet.m_nInfoField2 = r->m_stream_id; /*0x01000000; */ in SendPlay()
2200 packet.m_hasAbsTimestamp = 0; in SendPlay()
2201 packet.m_body = pbuf + RTMP_MAX_HEADER_SIZE; in SendPlay()
2203 enc = packet.m_body; in SendPlay()
2248 packet.m_nBodySize = enc - packet.m_body; in SendPlay()
2250 return RTMP_SendPacket(r, &packet, TRUE); in SendPlay()
2259 RTMPPacket packet; in SendPlaylist() local
2263 packet.m_nChannel = 0x08; /* we make 8 our stream channel */ in SendPlaylist()
2264 packet.m_headerType = RTMP_PACKET_SIZE_LARGE; in SendPlaylist()
2265 packet.m_packetType = RTMP_PACKET_TYPE_INVOKE; in SendPlaylist()
2266 packet.m_nTimeStamp = 0; in SendPlaylist()
2267 packet.m_nInfoField2 = r->m_stream_id; /*0x01000000; */ in SendPlaylist()
2268 packet.m_hasAbsTimestamp = 0; in SendPlaylist()
2269 packet.m_body = pbuf + RTMP_MAX_HEADER_SIZE; in SendPlaylist()
2271 enc = packet.m_body; in SendPlaylist()
2289 packet.m_nBodySize = enc - packet.m_body; in SendPlaylist()
2291 return RTMP_SendPacket(r, &packet, TRUE); in SendPlaylist()
2297 RTMPPacket packet; in SendSecureTokenResponse() local
2301 packet.m_nChannel = 0x03; /* control channel (invoke) */ in SendSecureTokenResponse()
2302 packet.m_headerType = RTMP_PACKET_SIZE_MEDIUM; in SendSecureTokenResponse()
2303 packet.m_packetType = RTMP_PACKET_TYPE_INVOKE; in SendSecureTokenResponse()
2304 packet.m_nTimeStamp = 0; in SendSecureTokenResponse()
2305 packet.m_nInfoField2 = 0; in SendSecureTokenResponse()
2306 packet.m_hasAbsTimestamp = 0; in SendSecureTokenResponse()
2307 packet.m_body = pbuf + RTMP_MAX_HEADER_SIZE; in SendSecureTokenResponse()
2309 enc = packet.m_body; in SendSecureTokenResponse()
2317 packet.m_nBodySize = enc - packet.m_body; in SendSecureTokenResponse()
2319 return RTMP_SendPacket(r, &packet, FALSE); in SendSecureTokenResponse()
2327 …packet is 0x4 and contains two mandatory parameters and two optional parameters. The first paramet…
2329 …his Ping tells client to re-calibrate the clock with the timestamp of the next packet server sends.
2341 RTMPPacket packet; in RTMP_SendCtrl() local
2348 packet.m_nChannel = 0x02; /* control channel (ping) */ in RTMP_SendCtrl()
2349 packet.m_headerType = RTMP_PACKET_SIZE_MEDIUM; in RTMP_SendCtrl()
2350 packet.m_packetType = RTMP_PACKET_TYPE_CONTROL; in RTMP_SendCtrl()
2351 packet.m_nTimeStamp = 0; /* RTMP_GetTime(); */ in RTMP_SendCtrl()
2352 packet.m_nInfoField2 = 0; in RTMP_SendCtrl()
2353 packet.m_hasAbsTimestamp = 0; in RTMP_SendCtrl()
2354 packet.m_body = pbuf + RTMP_MAX_HEADER_SIZE; in RTMP_SendCtrl()
2363 packet.m_nBodySize = nSize; in RTMP_SendCtrl()
2365 buf = packet.m_body; in RTMP_SendCtrl()
2373 RTMP_LogHex(RTMP_LOGDEBUG, (uint8_t *)packet.m_body, packet.m_nBodySize); in RTMP_SendCtrl()
2389 return RTMP_SendPacket(r, &packet, FALSE); in RTMP_SendCtrl()
2920 RTMP_Log(RTMP_LOGWARNING, "%s, Sanity failed. no string method in invoke packet", in HandleInvoke()
2928 RTMP_Log(RTMP_LOGERROR, "%s, error decoding invoke packet", __FUNCTION__); in HandleInvoke()
3315 RTMP_Log(RTMP_LOGERROR, "%s, error decoding meta data packet", __FUNCTION__); in HandleMetadata()
3345 HandleChangeChunkSize(RTMP *r, const RTMPPacket *packet) in HandleChangeChunkSize() argument
3347 if (packet->m_nBodySize >= 4) in HandleChangeChunkSize()
3349 r->m_inChunkSize = AMF_DecodeInt32(packet->m_body); in HandleChangeChunkSize()
3356 HandleAudio(RTMP *r, const RTMPPacket *packet) in HandleAudio() argument
3361 HandleVideo(RTMP *r, const RTMPPacket *packet) in HandleVideo() argument
3366 HandleCtrl(RTMP *r, const RTMPPacket *packet) in HandleCtrl() argument
3370 if (packet->m_body && packet->m_nBodySize >= 2) in HandleCtrl()
3371 nType = AMF_DecodeInt16(packet->m_body); in HandleCtrl()
3373 packet->m_nBodySize); in HandleCtrl()
3374 /*RTMP_LogHex(packet.m_body, packet.m_nBodySize); */ in HandleCtrl()
3376 if (packet->m_nBodySize >= 6) in HandleCtrl()
3381 tmp = AMF_DecodeInt32(packet->m_body + 2); in HandleCtrl()
3386 tmp = AMF_DecodeInt32(packet->m_body + 2); in HandleCtrl()
3393 tmp = AMF_DecodeInt32(packet->m_body + 2); in HandleCtrl()
3398 tmp = AMF_DecodeInt32(packet->m_body + 2); in HandleCtrl()
3403 tmp = AMF_DecodeInt32(packet->m_body + 2); in HandleCtrl()
3445 tmp = AMF_DecodeInt32(packet->m_body + 2); in HandleCtrl()
3464 tmp = AMF_DecodeInt32(packet->m_body + 2); in HandleCtrl()
3469 tmp = AMF_DecodeInt32(packet->m_body + 2); in HandleCtrl()
3479 if (packet->m_nBodySize > 2 && packet->m_body[2] > 0x01) in HandleCtrl()
3483 __FUNCTION__, packet->m_body[2]); in HandleCtrl()
3486 /*RTMP_LogHex(packet.m_body, packet.m_nBodySize); */ in HandleCtrl()
3508 HandleServerBW(RTMP *r, const RTMPPacket *packet) in HandleServerBW() argument
3510 r->m_nServerBW = AMF_DecodeInt32(packet->m_body); in HandleServerBW()
3515 HandleClientBW(RTMP *r, const RTMPPacket *packet) in HandleClientBW() argument
3517 r->m_nClientBW = AMF_DecodeInt32(packet->m_body); in HandleClientBW()
3518 if (packet->m_nBodySize > 4) in HandleClientBW()
3519 r->m_nClientBW2 = packet->m_body[4]; in HandleClientBW()
3550 RTMP_ReadPacket(RTMP *r, RTMPPacket *packet) in RTMP_ReadPacket() argument
3562 RTMP_Log(RTMP_LOGERROR, "%s, failed to read RTMP packet header", __FUNCTION__); in RTMP_ReadPacket()
3566 packet->m_headerType = (hbuf[0] & 0xc0) >> 6; in RTMP_ReadPacket()
3567 packet->m_nChannel = (hbuf[0] & 0x3f); in RTMP_ReadPacket()
3569 if (packet->m_nChannel == 0) in RTMP_ReadPacket()
3573 RTMP_Log(RTMP_LOGERROR, "%s, failed to read RTMP packet header 2nd byte", in RTMP_ReadPacket()
3577 packet->m_nChannel = hbuf[1]; in RTMP_ReadPacket()
3578 packet->m_nChannel += 64; in RTMP_ReadPacket()
3581 else if (packet->m_nChannel == 1) in RTMP_ReadPacket()
3586 RTMP_Log(RTMP_LOGERROR, "%s, failed to read RTMP packet header 3nd byte", in RTMP_ReadPacket()
3591 packet->m_nChannel = tmp + 64; in RTMP_ReadPacket()
3592 RTMP_Log(RTMP_LOGDEBUG, "%s, m_nChannel: %0x", __FUNCTION__, packet->m_nChannel); in RTMP_ReadPacket()
3596 nSize = packetSize[packet->m_headerType]; in RTMP_ReadPacket()
3598 if (packet->m_nChannel >= r->m_channelsAllocatedIn) in RTMP_ReadPacket()
3600 int n = packet->m_nChannel + 10; in RTMP_ReadPacket()
3619 packet->m_hasAbsTimestamp = TRUE; in RTMP_ReadPacket()
3623 if (r->m_vecChannelsIn[packet->m_nChannel]) in RTMP_ReadPacket()
3624 memcpy(packet, r->m_vecChannelsIn[packet->m_nChannel], in RTMP_ReadPacket()
3632 RTMP_Log(RTMP_LOGERROR, "%s, failed to read RTMP packet header. type: %x", in RTMP_ReadPacket()
3641 packet->m_nTimeStamp = AMF_DecodeInt24(header); in RTMP_ReadPacket()
3643 … RTMP packet chunk on channel %x, headersz %i, timestamp %i, abs timestamp %i", __FUNCTION__, pack… in RTMP_ReadPacket()
3647 packet->m_nBodySize = AMF_DecodeInt24(header + 3); in RTMP_ReadPacket()
3648 packet->m_nBytesRead = 0; in RTMP_ReadPacket()
3652 packet->m_packetType = header[6]; in RTMP_ReadPacket()
3655 packet->m_nInfoField2 = DecodeInt32LE(header + 7); in RTMP_ReadPacket()
3660 extendedTimestamp = packet->m_nTimeStamp == 0xffffff; in RTMP_ReadPacket()
3669 packet->m_nTimeStamp = AMF_DecodeInt32(header + nSize); in RTMP_ReadPacket()
3675 if (packet->m_nBodySize > 0 && packet->m_body == NULL) in RTMP_ReadPacket()
3677 if (!RTMPPacket_Alloc(packet, packet->m_nBodySize)) in RTMP_ReadPacket()
3679 RTMP_Log(RTMP_LOGDEBUG, "%s, failed to allocate packet", __FUNCTION__); in RTMP_ReadPacket()
3683 packet->m_headerType = (hbuf[0] & 0xc0) >> 6; in RTMP_ReadPacket()
3686 nToRead = packet->m_nBodySize - packet->m_nBytesRead; in RTMP_ReadPacket()
3692 if (packet->m_chunk) in RTMP_ReadPacket()
3694 packet->m_chunk->c_headerSize = hSize; in RTMP_ReadPacket()
3695 memcpy(packet->m_chunk->c_header, hbuf, hSize); in RTMP_ReadPacket()
3696 packet->m_chunk->c_chunk = packet->m_body + packet->m_nBytesRead; in RTMP_ReadPacket()
3697 packet->m_chunk->c_chunkSize = nChunk; in RTMP_ReadPacket()
3700 if (ReadN(r, packet->m_body + packet->m_nBytesRead, nChunk) != nChunk) in RTMP_ReadPacket()
3702 RTMP_Log(RTMP_LOGERROR, "%s, failed to read RTMP packet body. len: %u", in RTMP_ReadPacket()
3703 __FUNCTION__, packet->m_nBodySize); in RTMP_ReadPacket()
3707 RTMP_LogHexString(RTMP_LOGDEBUG2, (uint8_t *)packet->m_body + packet->m_nBytesRead, nChunk); in RTMP_ReadPacket()
3709 packet->m_nBytesRead += nChunk; in RTMP_ReadPacket()
3711 /* keep the packet as ref for other packets on this channel */ in RTMP_ReadPacket()
3712 if (!r->m_vecChannelsIn[packet->m_nChannel]) in RTMP_ReadPacket()
3713 r->m_vecChannelsIn[packet->m_nChannel] = malloc(sizeof(RTMPPacket)); in RTMP_ReadPacket()
3714 memcpy(r->m_vecChannelsIn[packet->m_nChannel], packet, sizeof(RTMPPacket)); in RTMP_ReadPacket()
3717 r->m_vecChannelsIn[packet->m_nChannel]->m_nTimeStamp = 0xffffff; in RTMP_ReadPacket()
3720 if (RTMPPacket_IsReady(packet)) in RTMP_ReadPacket()
3722 /* make packet's timestamp absolute */ in RTMP_ReadPacket()
3723 if (!packet->m_hasAbsTimestamp) in RTMP_ReadPacket()
3724 …packet->m_nTimeStamp += r->m_channelTimestamp[packet->m_nChannel]; /* timestamps seem to be always… in RTMP_ReadPacket()
3726 r->m_channelTimestamp[packet->m_nChannel] = packet->m_nTimeStamp; in RTMP_ReadPacket()
3728 …/* reset the data from the stored packet. we keep the header since we may use it later if a new pa… in RTMP_ReadPacket()
3729 /* arrives and requests to re-use some info (small packet header) */ in RTMP_ReadPacket()
3730 r->m_vecChannelsIn[packet->m_nChannel]->m_body = NULL; in RTMP_ReadPacket()
3731 r->m_vecChannelsIn[packet->m_nChannel]->m_nBytesRead = 0; in RTMP_ReadPacket()
3732 …r->m_vecChannelsIn[packet->m_nChannel]->m_hasAbsTimestamp = FALSE; /* can only be false if we reus… in RTMP_ReadPacket()
3736 packet->m_body = NULL; /* so it won't be erased on free */ in RTMP_ReadPacket()
3896 RTMP_SendPacket(RTMP *r, RTMPPacket *packet, int queue) in RTMP_SendPacket() argument
3908 if (packet->m_nChannel >= r->m_channelsAllocatedOut) in RTMP_SendPacket()
3910 int n = packet->m_nChannel + 10; in RTMP_SendPacket()
3923 prevPacket = r->m_vecChannelsOut[packet->m_nChannel]; in RTMP_SendPacket()
3924 if (prevPacket && packet->m_headerType != RTMP_PACKET_SIZE_LARGE) in RTMP_SendPacket()
3926 /* compress a bit by using the prev packet's attributes */ in RTMP_SendPacket()
3927 if (prevPacket->m_nBodySize == packet->m_nBodySize in RTMP_SendPacket()
3928 && prevPacket->m_packetType == packet->m_packetType in RTMP_SendPacket()
3929 && packet->m_headerType == RTMP_PACKET_SIZE_MEDIUM) in RTMP_SendPacket()
3930 packet->m_headerType = RTMP_PACKET_SIZE_SMALL; in RTMP_SendPacket()
3932 if (prevPacket->m_nTimeStamp == packet->m_nTimeStamp in RTMP_SendPacket()
3933 && packet->m_headerType == RTMP_PACKET_SIZE_SMALL) in RTMP_SendPacket()
3934 packet->m_headerType = RTMP_PACKET_SIZE_MINIMUM; in RTMP_SendPacket()
3938 if (packet->m_headerType > 3) /* sanity */ in RTMP_SendPacket()
3941 (unsigned char)packet->m_headerType); in RTMP_SendPacket()
3945 nSize = packetSize[packet->m_headerType]; in RTMP_SendPacket()
3947 t = packet->m_nTimeStamp - last; in RTMP_SendPacket()
3949 if (packet->m_body) in RTMP_SendPacket()
3951 header = packet->m_body - nSize; in RTMP_SendPacket()
3952 hend = packet->m_body; in RTMP_SendPacket()
3960 if (packet->m_nChannel > 319) in RTMP_SendPacket()
3962 else if (packet->m_nChannel > 63) in RTMP_SendPacket()
3978 c = packet->m_headerType << 6; in RTMP_SendPacket()
3982 c |= packet->m_nChannel; in RTMP_SendPacket()
3993 int tmp = packet->m_nChannel - 64; in RTMP_SendPacket()
4006 hptr = AMF_EncodeInt24(hptr, hend, packet->m_nBodySize); in RTMP_SendPacket()
4007 *hptr++ = packet->m_packetType; in RTMP_SendPacket()
4011 hptr += EncodeInt32LE(hptr, packet->m_nInfoField2); in RTMP_SendPacket()
4016 nSize = packet->m_nBodySize; in RTMP_SendPacket()
4017 buffer = packet->m_body; in RTMP_SendPacket()
4076 int tmp = packet->m_nChannel - 64; in RTMP_SendPacket()
4098 if (packet->m_packetType == RTMP_PACKET_TYPE_INVOKE) in RTMP_SendPacket()
4102 ptr = packet->m_body + 1; in RTMP_SendPacket()
4114 if (!r->m_vecChannelsOut[packet->m_nChannel]) in RTMP_SendPacket()
4115 r->m_vecChannelsOut[packet->m_nChannel] = malloc(sizeof(RTMPPacket)); in RTMP_SendPacket()
4116 memcpy(r->m_vecChannelsOut[packet->m_nChannel], packet, sizeof(RTMPPacket)); in RTMP_SendPacket()
4498 /* Read from the stream until we get a media packet.
4500 * packets, 0 if ignorable error, >0 if there is a media packet
4507 RTMPPacket packet = { 0 }; in Read_1_Packet() local
4514 rtnGetNextMediaPacket = RTMP_GetNextMediaPacket(r, &packet); in Read_1_Packet()
4517 char *packetBody = packet.m_body; in Read_1_Packet()
4518 unsigned int nPacketLen = packet.m_nBodySize; in Read_1_Packet()
4532 r->m_read.dataType |= (((packet.m_packetType == RTMP_PACKET_TYPE_AUDIO) << 2) | in Read_1_Packet()
4533 (packet.m_packetType == RTMP_PACKET_TYPE_VIDEO)); in Read_1_Packet()
4535 if (packet.m_packetType == RTMP_PACKET_TYPE_VIDEO && nPacketLen <= 5) in Read_1_Packet()
4537 RTMP_Log(RTMP_LOGDEBUG, "ignoring too small video packet: size: %d", in Read_1_Packet()
4542 if (packet.m_packetType == RTMP_PACKET_TYPE_AUDIO && nPacketLen <= 1) in Read_1_Packet()
4544 RTMP_Log(RTMP_LOGDEBUG, "ignoring too small audio packet: size: %d", in Read_1_Packet()
4557 packet.m_packetType, nPacketLen, packet.m_nTimeStamp, in Read_1_Packet()
4558 packet.m_hasAbsTimestamp); in Read_1_Packet()
4559 if (packet.m_packetType == RTMP_PACKET_TYPE_VIDEO) in Read_1_Packet()
4566 if (packet.m_nTimeStamp == 0) in Read_1_Packet()
4569 && packet.m_packetType == RTMP_PACKET_TYPE_INFO) in Read_1_Packet()
4603 if (packet.m_packetType == r->m_read.initialFrameType in Read_1_Packet()
4606 /* we don't compare the sizes since the packet can in Read_1_Packet()
4626 * keyframe as an extra video packet it is also included in Read_1_Packet()
4630 if (packet.m_packetType == RTMP_PACKET_TYPE_FLASH_VIDEO) in Read_1_Packet()
4648 "keyframe search: FLV Packet: type %02X, dataSize: %d, timeStamp: %d ms", in Read_1_Packet()
4675 /* skip this packet? in Read_1_Packet()
4681 "Non skipable packet since it doesn't end with chunk, stream corrupt!"); in Read_1_Packet()
4704 "First packet does not contain keyframe, all " in Read_1_Packet()
4721 if (packet.m_nTimeStamp > 0 in Read_1_Packet()
4742 packet.m_packetType != RTMP_PACKET_TYPE_FLASH_VIDEO) in Read_1_Packet()
4755 packet.m_packetType == RTMP_PACKET_TYPE_FLASH_VIDEO) in Read_1_Packet()
4774 packet.m_packetType != RTMP_PACKET_TYPE_FLASH_VIDEO) in Read_1_Packet()
4779 if (packet.m_nTimeStamp == 0) in Read_1_Packet()
4792 /* calculate packet size and allocate slop buffer if necessary */ in Read_1_Packet()
4794 ((packet.m_packetType == RTMP_PACKET_TYPE_AUDIO in Read_1_Packet()
4795 || packet.m_packetType == RTMP_PACKET_TYPE_VIDEO in Read_1_Packet()
4796 || packet.m_packetType == RTMP_PACKET_TYPE_INFO) ? 11 : 0) + in Read_1_Packet()
4797 (packet.m_packetType != RTMP_PACKET_TYPE_FLASH_VIDEO ? 4 : 0); in Read_1_Packet()
4819 /* use to return timestamp of last processed packet */ in Read_1_Packet()
4822 * construct 11 byte header then add rtmp packet's data */ in Read_1_Packet()
4823 if (packet.m_packetType == RTMP_PACKET_TYPE_AUDIO in Read_1_Packet()
4824 || packet.m_packetType == RTMP_PACKET_TYPE_VIDEO in Read_1_Packet()
4825 || packet.m_packetType == RTMP_PACKET_TYPE_INFO) in Read_1_Packet()
4827 nTimeStamp = r->m_read.nResumeTS + packet.m_nTimeStamp; in Read_1_Packet()
4830 *ptr = packet.m_packetType; in Read_1_Packet()
4835 if(packet.m_packetType == RTMP_PACKET_TYPE_VIDEO) { in Read_1_Packet()
4865 if (packet.m_packetType == RTMP_PACKET_TYPE_FLASH_VIDEO) in Read_1_Packet()
4873 delta = packet.m_nTimeStamp - nTimeStamp + r->m_read.nResumeTS; in Read_1_Packet()
4919 "FLV Packet: type %02X, dataSize: %lu, tagSize: %lu, timeStamp: %lu ms", in Read_1_Packet()
4943 if (packet.m_packetType != RTMP_PACKET_TYPE_FLASH_VIDEO) in Read_1_Packet()
4953 …%02X, size: %d, pktTS: %dms, TS: %dms, bLiveStream: %d", packet.m_packetType, nPacketLen, packet.m… in Read_1_Packet()
4954 r->m_read.timestamp = (r->Link.lFlags & RTMP_LF_LIVE) ? packet.m_nTimeStamp : nTimeStamp; in Read_1_Packet()
4961 RTMPPacket_Free(&packet); in Read_1_Packet()
5145 RTMP_Log(RTMP_LOGDEBUG, "%s, failed to allocate packet", __FUNCTION__); in RTMP_Write()