Lines Matching defs:pkt

160 static int handle_chunk_size(URLContext *s, RTMPPacket *pkt);
161 static int handle_window_ack_size(URLContext *s, RTMPPacket *pkt);
162 static int handle_set_peer_bw(URLContext *s, RTMPPacket *pkt);
194 static int find_tracked_method(URLContext *s, RTMPPacket *pkt, int offset,
203 bytestream2_init(&gbc, pkt->data + offset, pkt->size - offset);
230 static int rtmp_send_packet(RTMPContext *rt, RTMPPacket *pkt, int track)
234 if (pkt->type == RTMP_PT_INVOKE && track) {
240 bytestream2_init(&gbc, pkt->data, pkt->size);
251 ret = ff_rtmp_packet_write(rt->stream, pkt, rt->out_chunk_size,
254 ff_rtmp_packet_destroy(pkt);
323 RTMPPacket pkt;
327 if ((ret = ff_rtmp_packet_create(&pkt, RTMP_SYSTEM_CHANNEL, RTMP_PT_INVOKE,
331 p = pkt.data;
393 ff_rtmp_packet_destroy(&pkt);
404 pkt.size = p - pkt.data;
406 return rtmp_send_packet(rt, &pkt, 1);
414 RTMPPacket pkt = { 0 };
426 if ((ret = ff_rtmp_packet_read(rt->stream, &pkt, rt->in_chunk_size,
430 ff_rtmp_packet_dump(s, &pkt);
432 if (pkt.type == RTMP_PT_CHUNK_SIZE) {
433 if ((ret = handle_chunk_size(s, &pkt)) < 0) {
434 ff_rtmp_packet_destroy(&pkt);
437 } else if (pkt.type == RTMP_CTRL_ABORT_MESSAGE) {
439 ff_rtmp_packet_destroy(&pkt);
441 } else if (pkt.type == RTMP_PT_BYTES_READ) {
443 } else if (pkt.type == RTMP_PT_WINDOW_ACK_SIZE) {
444 if ((ret = handle_window_ack_size(s, &pkt)) < 0) {
445 ff_rtmp_packet_destroy(&pkt);
448 } else if (pkt.type == RTMP_PT_SET_PEER_BW) {
449 if ((ret = handle_set_peer_bw(s, &pkt)) < 0) {
450 ff_rtmp_packet_destroy(&pkt);
453 } else if (pkt.type == RTMP_PT_INVOKE) {
457 av_log(s, AV_LOG_ERROR, "Unknown control message type (%d)\n", pkt.type);
459 ff_rtmp_packet_destroy(&pkt);
462 cp = pkt.data;
463 bytestream2_init(&gbc, cp, pkt.size);
466 ff_rtmp_packet_destroy(&pkt);
471 ff_rtmp_packet_destroy(&pkt);
486 ff_rtmp_packet_destroy(&pkt);
489 if ((ret = ff_rtmp_packet_create(&pkt, RTMP_NETWORK_CHANNEL,
492 p = pkt.data;
496 pkt.size = p - pkt.data;
497 ret = ff_rtmp_packet_write(rt->stream, &pkt, rt->out_chunk_size,
499 ff_rtmp_packet_destroy(&pkt);
503 if ((ret = ff_rtmp_packet_create(&pkt, RTMP_NETWORK_CHANNEL,
506 p = pkt.data;
511 pkt.size = p - pkt.data;
512 ret = ff_rtmp_packet_write(rt->stream, &pkt, rt->out_chunk_size,
514 ff_rtmp_packet_destroy(&pkt);
519 if ((ret = ff_rtmp_packet_create(&pkt, RTMP_NETWORK_CHANNEL,
523 p = pkt.data;
526 ret = ff_rtmp_packet_write(rt->stream, &pkt, rt->out_chunk_size,
528 ff_rtmp_packet_destroy(&pkt);
533 if ((ret = ff_rtmp_packet_create(&pkt, RTMP_NETWORK_CHANNEL,
537 p = pkt.data;
539 ret = ff_rtmp_packet_write(rt->stream, &pkt, rt->out_chunk_size,
541 ff_rtmp_packet_destroy(&pkt);
546 if ((ret = ff_rtmp_packet_create(&pkt, RTMP_SYSTEM_CHANNEL,
551 p = pkt.data;
573 pkt.size = p - pkt.data;
574 ret = ff_rtmp_packet_write(rt->stream, &pkt, rt->out_chunk_size,
576 ff_rtmp_packet_destroy(&pkt);
580 if ((ret = ff_rtmp_packet_create(&pkt, RTMP_SYSTEM_CHANNEL,
583 p = pkt.data;
588 pkt.size = p - pkt.data;
589 ret = ff_rtmp_packet_write(rt->stream, &pkt, rt->out_chunk_size,
591 ff_rtmp_packet_destroy(&pkt);
602 RTMPPacket pkt;
606 if ((ret = ff_rtmp_packet_create(&pkt, RTMP_SYSTEM_CHANNEL, RTMP_PT_INVOKE,
611 p = pkt.data;
617 return rtmp_send_packet(rt, &pkt, 1);
626 RTMPPacket pkt;
630 if ((ret = ff_rtmp_packet_create(&pkt, RTMP_SYSTEM_CHANNEL, RTMP_PT_INVOKE,
635 p = pkt.data;
641 return rtmp_send_packet(rt, &pkt, 1);
650 RTMPPacket pkt;
654 if ((ret = ff_rtmp_packet_create(&pkt, RTMP_SYSTEM_CHANNEL, RTMP_PT_INVOKE,
659 p = pkt.data;
665 return rtmp_send_packet(rt, &pkt, 0);
674 RTMPPacket pkt;
680 if ((ret = ff_rtmp_packet_create(&pkt, RTMP_SYSTEM_CHANNEL, RTMP_PT_INVOKE,
684 p = pkt.data;
689 return rtmp_send_packet(rt, &pkt, 1);
699 RTMPPacket pkt;
705 if ((ret = ff_rtmp_packet_create(&pkt, RTMP_SYSTEM_CHANNEL, RTMP_PT_INVOKE,
709 p = pkt.data;
715 return rtmp_send_packet(rt, &pkt, 0);
725 RTMPPacket pkt;
729 if ((ret = ff_rtmp_packet_create(&pkt, RTMP_SOURCE_CHANNEL, RTMP_PT_INVOKE,
733 p = pkt.data;
739 return rtmp_send_packet(rt, &pkt, 1);
747 RTMPPacket pkt;
751 if ((ret = ff_rtmp_packet_create(&pkt, RTMP_NETWORK_CHANNEL, RTMP_PT_USER_CONTROL,
755 p = pkt.data;
760 return rtmp_send_packet(rt, &pkt, 0);
769 RTMPPacket pkt;
775 if ((ret = ff_rtmp_packet_create(&pkt, RTMP_SOURCE_CHANNEL, RTMP_PT_INVOKE,
779 pkt.extra = rt->stream_id;
781 p = pkt.data;
788 return rtmp_send_packet(rt, &pkt, 1);
793 RTMPPacket pkt;
800 if ((ret = ff_rtmp_packet_create(&pkt, 3, RTMP_PT_INVOKE, 0, 26)) < 0)
803 pkt.extra = rt->stream_id;
805 p = pkt.data;
811 return rtmp_send_packet(rt, &pkt, 1);
819 RTMPPacket pkt;
826 if ((ret = ff_rtmp_packet_create(&pkt, 3, RTMP_PT_INVOKE, 0, 29)) < 0)
829 pkt.extra = rt->stream_id;
831 p = pkt.data;
838 return rtmp_send_packet(rt, &pkt, 1);
846 RTMPPacket pkt;
852 if ((ret = ff_rtmp_packet_create(&pkt, RTMP_SOURCE_CHANNEL, RTMP_PT_INVOKE,
856 pkt.extra = rt->stream_id;
858 p = pkt.data;
865 return rtmp_send_packet(rt, &pkt, 1);
873 RTMPPacket pkt;
883 if ((ret = ff_rtmp_packet_create(&pkt, RTMP_NETWORK_CHANNEL,RTMP_PT_USER_CONTROL,
887 p = pkt.data;
891 return rtmp_send_packet(rt, &pkt, 0);
899 RTMPPacket pkt;
904 if ((ret = ff_rtmp_packet_create(&pkt, RTMP_NETWORK_CHANNEL, RTMP_PT_USER_CONTROL,
908 p = pkt.data;
912 return rtmp_send_packet(rt, &pkt, 0);
920 RTMPPacket pkt;
924 if ((ret = ff_rtmp_packet_create(&pkt, RTMP_NETWORK_CHANNEL, RTMP_PT_WINDOW_ACK_SIZE,
928 p = pkt.data;
931 return rtmp_send_packet(rt, &pkt, 0);
939 RTMPPacket pkt;
943 if ((ret = ff_rtmp_packet_create(&pkt, RTMP_SYSTEM_CHANNEL, RTMP_PT_INVOKE,
947 p = pkt.data;
952 return rtmp_send_packet(rt, &pkt, 1);
960 RTMPPacket pkt;
964 if ((ret = ff_rtmp_packet_create(&pkt, RTMP_NETWORK_CHANNEL, RTMP_PT_BYTES_READ,
968 p = pkt.data;
971 return rtmp_send_packet(rt, &pkt, 0);
977 RTMPPacket pkt;
981 if ((ret = ff_rtmp_packet_create(&pkt, RTMP_SYSTEM_CHANNEL, RTMP_PT_INVOKE,
985 p = pkt.data;
991 return rtmp_send_packet(rt, &pkt, 1);
1494 static int handle_chunk_size(URLContext *s, RTMPPacket *pkt)
1499 if (pkt->size < 4) {
1502 pkt->size);
1509 if ((ret = ff_rtmp_packet_write(rt->stream, pkt, rt->out_chunk_size,
1512 rt->out_chunk_size = AV_RB32(pkt->data);
1515 rt->in_chunk_size = AV_RB32(pkt->data);
1527 static int handle_user_control(URLContext *s, RTMPPacket *pkt)
1532 if (pkt->size < 2) {
1534 pkt->size);
1538 t = AV_RB16(pkt->data);
1540 if ((ret = gen_pong(s, rt, pkt)) < 0)
1554 static int handle_set_peer_bw(URLContext *s, RTMPPacket *pkt)
1558 if (pkt->size < 4) {
1561 pkt->size);
1569 rt->max_sent_unacked = AV_RB32(pkt->data);
1581 static int handle_window_ack_size(URLContext *s, RTMPPacket *pkt)
1585 if (pkt->size < 4) {
1588 pkt->size);
1592 rt->receive_report_size = AV_RB32(pkt->data);
1794 static int handle_invoke_error(URLContext *s, RTMPPacket *pkt)
1797 const uint8_t *data_end = pkt->data + pkt->size;
1803 if ((ret = find_tracked_method(s, pkt, 9, &tracked_method)) < 0)
1806 if (!ff_amf_get_field_value(pkt->data + 9, data_end,
1859 static int write_status(URLContext *s, RTMPPacket *pkt,
1875 spkt.extra = pkt->extra;
1901 static int send_invoke_response(URLContext *s, RTMPPacket *pkt)
1909 const uint8_t *p = pkt->data;
1915 bytestream2_init(&gbc, p, pkt->size);
1973 return write_status(s, pkt, "NetStream.Publish.Start",
1980 return write_status(s, pkt, "NetStream.Play.Start",
2019 static int read_number_result(RTMPPacket *pkt, double *number)
2027 bytestream2_init(&gbc, pkt->data, pkt->size);
2049 static int handle_invoke_result(URLContext *s, RTMPPacket *pkt)
2055 if ((ret = find_tracked_method(s, pkt, 10, &tracked_method)) < 0)
2091 if (read_number_result(pkt, &stream_id)) {
2111 if (read_number_result(pkt, &rt->duration)) {
2121 static int handle_invoke_status(URLContext *s, RTMPPacket *pkt)
2124 const uint8_t *data_end = pkt->data + pkt->size;
2125 const uint8_t *ptr = pkt->data + RTMP_HEADER;
2158 static int handle_invoke(URLContext *s, RTMPPacket *pkt)
2164 if (ff_amf_match_string(pkt->data, pkt->size, "_error")) {
2165 if ((ret = handle_invoke_error(s, pkt)) < 0)
2167 } else if (ff_amf_match_string(pkt->data, pkt->size, "_result")) {
2168 if ((ret = handle_invoke_result(s, pkt)) < 0)
2170 } else if (ff_amf_match_string(pkt->data, pkt->size, "onStatus")) {
2171 if ((ret = handle_invoke_status(s, pkt)) < 0)
2173 } else if (ff_amf_match_string(pkt->data, pkt->size, "onBWDone")) {
2176 } else if (ff_amf_match_string(pkt->data, pkt->size, "releaseStream") ||
2177 ff_amf_match_string(pkt->data, pkt->size, "FCPublish") ||
2178 ff_amf_match_string(pkt->data, pkt->size, "publish") ||
2179 ff_amf_match_string(pkt->data, pkt->size, "play") ||
2180 ff_amf_match_string(pkt->data, pkt->size, "_checkbw") ||
2181 ff_amf_match_string(pkt->data, pkt->size, "createStream")) {
2182 if ((ret = send_invoke_response(s, pkt)) < 0)
2208 static int append_flv_data(RTMPContext *rt, RTMPPacket *pkt, int skip)
2212 const uint8_t *data = pkt->data + skip;
2213 const int size = pkt->size - skip;
2214 uint32_t ts = pkt->timestamp;
2216 if (pkt->type == RTMP_PT_AUDIO) {
2218 } else if (pkt->type == RTMP_PT_VIDEO) {
2230 bytestream2_put_byte(&pbc, pkt->type);
2241 static int handle_notify(URLContext *s, RTMPPacket *pkt)
2249 bytestream2_init(&gbc, pkt->data, pkt->size);
2288 skip = gbc.buffer - pkt->data;
2295 return append_flv_data(rt, pkt, skip);
2304 static int rtmp_parse_result(URLContext *s, RTMPContext *rt, RTMPPacket *pkt)
2309 ff_rtmp_packet_dump(s, pkt);
2312 switch (pkt->type) {
2317 if ((ret = handle_chunk_size(s, pkt)) < 0)
2321 if ((ret = handle_user_control(s, pkt)) < 0)
2325 if ((ret = handle_set_peer_bw(s, pkt)) < 0)
2329 if ((ret = handle_window_ack_size(s, pkt)) < 0)
2333 if ((ret = handle_invoke(s, pkt)) < 0)
2343 av_log(s, AV_LOG_VERBOSE, "Unknown packet type received 0x%02X\n", pkt->type);
2349 static int handle_metadata(RTMPContext *rt, RTMPPacket *pkt)
2357 old_flv_size = update_offset(rt, pkt->size);
2364 next = pkt->data;
2368 ts = pkt->timestamp;
2370 while (next - pkt->data < pkt->size - RTMP_HEADER) {
2379 if (size + 3 + 4 > pkt->data + pkt->size - next)