Browse code

rtmp: Do not send _checkbw calls as notifications

The _checkbw calls were changed to use transactionId 0 in commit
82613564 so that servers would not return _result/_error about it.
While this is the strict interpretation of the spec, there are
servers that return _error about it, even if transactionId was 0.

The latest version of EvoStream Media Server (the commercial version
of crtmpserver) behaves properly as described, i.e. returning an
_error normally but not returning anything when using transactionId
0. The latest version of crtmpserver (right now at least) doesn't
behave like this though, it returns an error even if transactionId
was 0.

There are also other servers that return errors even if transactionId
is set to 0. Therefore set a proper transaction id so that the invoke
can be tracked and the error properly ignored instead.

Signed-off-by: Martin Storsjö <martin@martin.st>

Samuel Pitoiset authored on 2012/08/11 19:41:33
Showing 2 changed files
... ...
@@ -33,15 +33,6 @@
33 33
 #define HMAC_OPAD_VAL 0x5C
34 34
 
35 35
 /**
36
- * A non-zero transaction id requires the server to send back
37
- * a _result or _error response.
38
- * Setting it to 0 marks the message as a notification not
39
- * requiring feedback.
40
- */
41
-
42
-#define RTMP_NOTIFICATION 0
43
-
44
-/**
45 36
  * emulated Flash client version - 9.0.124.2 on Linux
46 37
  * @{
47 38
  */
... ...
@@ -626,7 +626,7 @@ static int gen_check_bw(URLContext *s, RTMPContext *rt)
626 626
 
627 627
     p = pkt.data;
628 628
     ff_amf_write_string(&p, "_checkbw");
629
-    ff_amf_write_number(&p, RTMP_NOTIFICATION);
629
+    ff_amf_write_number(&p, ++rt->nb_invokes);
630 630
     ff_amf_write_null(&p);
631 631
 
632 632
     return rtmp_send_packet(rt, &pkt, 0);