Commit 1eef08f9 authored by Martin Storsjö's avatar Martin Storsjö

rtmp: Use nb_invokes for all invoke commands

704af3e2 broke publishing
of rtmp streams, at least publishing to Wowza servers.

This changes all invoke commands to use nb_invokes.
Signed-off-by: 's avatarMartin Storsjö <martin@martin.st>
parent 4d9ec050
...@@ -75,6 +75,7 @@ typedef struct RTMPContext { ...@@ -75,6 +75,7 @@ typedef struct RTMPContext {
uint8_t flv_header[11]; ///< partial incoming flv packet header uint8_t flv_header[11]; ///< partial incoming flv packet header
int flv_header_bytes; ///< number of initialized bytes in flv_header int flv_header_bytes; ///< number of initialized bytes in flv_header
int nb_invokes; ///< keeps track of invoke messages int nb_invokes; ///< keeps track of invoke messages
int create_stream_invoke; ///< invoke id for the create stream command
} RTMPContext; } RTMPContext;
#define PLAYER_KEY_OPEN_PART_LEN 30 ///< length of partial key used for first client digest signing #define PLAYER_KEY_OPEN_PART_LEN 30 ///< length of partial key used for first client digest signing
...@@ -115,7 +116,7 @@ static void gen_connect(URLContext *s, RTMPContext *rt, const char *proto, ...@@ -115,7 +116,7 @@ static void gen_connect(URLContext *s, RTMPContext *rt, const char *proto,
ff_url_join(tcurl, sizeof(tcurl), proto, NULL, host, port, "/%s", rt->app); ff_url_join(tcurl, sizeof(tcurl), proto, NULL, host, port, "/%s", rt->app);
ff_amf_write_string(&p, "connect"); ff_amf_write_string(&p, "connect");
ff_amf_write_number(&p, 1.0); ff_amf_write_number(&p, ++rt->nb_invokes);
ff_amf_write_object_start(&p); ff_amf_write_object_start(&p);
ff_amf_write_field_name(&p, "app"); ff_amf_write_field_name(&p, "app");
ff_amf_write_string(&p, rt->app); ff_amf_write_string(&p, rt->app);
...@@ -237,6 +238,7 @@ static void gen_create_stream(URLContext *s, RTMPContext *rt) ...@@ -237,6 +238,7 @@ static void gen_create_stream(URLContext *s, RTMPContext *rt)
ff_amf_write_string(&p, "createStream"); ff_amf_write_string(&p, "createStream");
ff_amf_write_number(&p, ++rt->nb_invokes); ff_amf_write_number(&p, ++rt->nb_invokes);
ff_amf_write_null(&p); ff_amf_write_null(&p);
rt->create_stream_invoke = rt->nb_invokes;
ff_rtmp_packet_write(rt->stream, &pkt, rt->chunk_size, rt->prev_pkt[1]); ff_rtmp_packet_write(rt->stream, &pkt, rt->chunk_size, rt->prev_pkt[1]);
ff_rtmp_packet_destroy(&pkt); ff_rtmp_packet_destroy(&pkt);
...@@ -257,7 +259,7 @@ static void gen_delete_stream(URLContext *s, RTMPContext *rt) ...@@ -257,7 +259,7 @@ static void gen_delete_stream(URLContext *s, RTMPContext *rt)
p = pkt.data; p = pkt.data;
ff_amf_write_string(&p, "deleteStream"); ff_amf_write_string(&p, "deleteStream");
ff_amf_write_number(&p, 0.0); ff_amf_write_number(&p, ++rt->nb_invokes);
ff_amf_write_null(&p); ff_amf_write_null(&p);
ff_amf_write_number(&p, rt->main_channel_id); ff_amf_write_number(&p, rt->main_channel_id);
...@@ -281,7 +283,7 @@ static void gen_play(URLContext *s, RTMPContext *rt) ...@@ -281,7 +283,7 @@ static void gen_play(URLContext *s, RTMPContext *rt)
p = pkt.data; p = pkt.data;
ff_amf_write_string(&p, "play"); ff_amf_write_string(&p, "play");
ff_amf_write_number(&p, 0.0); ff_amf_write_number(&p, ++rt->nb_invokes);
ff_amf_write_null(&p); ff_amf_write_null(&p);
ff_amf_write_string(&p, rt->playpath); ff_amf_write_string(&p, rt->playpath);
...@@ -315,7 +317,7 @@ static void gen_publish(URLContext *s, RTMPContext *rt) ...@@ -315,7 +317,7 @@ static void gen_publish(URLContext *s, RTMPContext *rt)
p = pkt.data; p = pkt.data;
ff_amf_write_string(&p, "publish"); ff_amf_write_string(&p, "publish");
ff_amf_write_number(&p, 0.0); ff_amf_write_number(&p, ++rt->nb_invokes);
ff_amf_write_null(&p); ff_amf_write_null(&p);
ff_amf_write_string(&p, rt->playpath); ff_amf_write_string(&p, rt->playpath);
ff_amf_write_string(&p, "live"); ff_amf_write_string(&p, "live");
...@@ -614,7 +616,7 @@ static int rtmp_parse_result(URLContext *s, RTMPContext *rt, RTMPPacket *pkt) ...@@ -614,7 +616,7 @@ static int rtmp_parse_result(URLContext *s, RTMPContext *rt, RTMPPacket *pkt)
* releaseStream and FCPublish calls */ * releaseStream and FCPublish calls */
if (!pkt->data[10]) { if (!pkt->data[10]) {
int pkt_id = (int) av_int2dbl(AV_RB64(pkt->data + 11)); int pkt_id = (int) av_int2dbl(AV_RB64(pkt->data + 11));
if (pkt_id == 4) if (pkt_id == rt->create_stream_invoke)
rt->state = STATE_CONNECTING; rt->state = STATE_CONNECTING;
} }
if (rt->state != STATE_CONNECTING) if (rt->state != STATE_CONNECTING)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment