Merge commit 'd4aef997809167832ecc64e89dda8cb445e5fe10'
authorMichael Niedermayer <michaelni@gmx.at>
Tue, 17 Sep 2013 10:57:15 +0000 (12:57 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Tue, 17 Sep 2013 10:57:19 +0000 (12:57 +0200)
* commit 'd4aef997809167832ecc64e89dda8cb445e5fe10':
  rtmp: Follow Flash player numbering for channels.

Merged-by: Michael Niedermayer <michaelni@gmx.at>
1  2 
libavformat/rtmppkt.h
libavformat/rtmpproto.c

diff --combined libavformat/rtmppkt.h
@@@ -2,20 -2,20 +2,20 @@@
   * RTMP packet utilities
   * Copyright (c) 2009 Konstantin Shishkov
   *
 - * This file is part of Libav.
 + * This file is part of FFmpeg.
   *
 - * Libav is free software; you can redistribute it and/or
 + * FFmpeg is free software; you can redistribute it and/or
   * modify it under the terms of the GNU Lesser General Public
   * License as published by the Free Software Foundation; either
   * version 2.1 of the License, or (at your option) any later version.
   *
 - * Libav is distributed in the hope that it will be useful,
 + * FFmpeg is distributed in the hope that it will be useful,
   * but WITHOUT ANY WARRANTY; without even the implied warranty of
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   * Lesser General Public License for more details.
   *
   * You should have received a copy of the GNU Lesser General Public
 - * License along with Libav; if not, write to the Free Software
 + * License along with FFmpeg; if not, write to the Free Software
   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
   */
  
@@@ -36,9 -36,9 +36,9 @@@
  enum RTMPChannel {
      RTMP_NETWORK_CHANNEL = 2,   ///< channel for network-related messages (bandwidth report, ping, etc)
      RTMP_SYSTEM_CHANNEL,        ///< channel for sending server control messages
-     RTMP_SOURCE_CHANNEL,        ///< channel for sending a/v to server
-     RTMP_VIDEO_CHANNEL = 8,     ///< channel for video data
      RTMP_AUDIO_CHANNEL,         ///< channel for audio data
+     RTMP_VIDEO_CHANNEL   = 6,   ///< channel for video data
+     RTMP_SOURCE_CHANNEL  = 8,   ///< channel for a/v invokes
  };
  
  /**
diff --combined libavformat/rtmpproto.c
@@@ -2,20 -2,20 +2,20 @@@
   * RTMP network protocol
   * Copyright (c) 2009 Konstantin Shishkov
   *
 - * This file is part of Libav.
 + * This file is part of FFmpeg.
   *
 - * Libav is free software; you can redistribute it and/or
 + * FFmpeg is free software; you can redistribute it and/or
   * modify it under the terms of the GNU Lesser General Public
   * License as published by the Free Software Foundation; either
   * version 2.1 of the License, or (at your option) any later version.
   *
 - * Libav is distributed in the hope that it will be useful,
 + * FFmpeg is distributed in the hope that it will be useful,
   * but WITHOUT ANY WARRANTY; without even the implied warranty of
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   * Lesser General Public License for more details.
   *
   * You should have received a copy of the GNU Lesser General Public
 - * License along with Libav; if not, write to the Free Software
 + * License along with FFmpeg; if not, write to the Free Software
   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
   */
  
@@@ -48,7 -48,7 +48,7 @@@
  #include <zlib.h>
  #endif
  
 -#define APP_MAX_LENGTH 128
 +#define APP_MAX_LENGTH 1024
  #define PLAYPATH_MAX_LENGTH 256
  #define TCURL_MAX_LENGTH 512
  #define FLASHVER_MAX_LENGTH 64
@@@ -266,6 -266,9 +266,6 @@@ static int rtmp_write_amf_data(URLConte
          *value = '\0';
          value++;
  
 -        if (!field || !value)
 -            goto fail;
 -
          ff_amf_write_field_name(p, field);
      } else {
          goto fail;
@@@ -312,7 -315,7 +312,7 @@@ static int gen_connect(URLContext *s, R
      int ret;
  
      if ((ret = ff_rtmp_packet_create(&pkt, RTMP_SYSTEM_CHANNEL, RTMP_PT_INVOKE,
 -                                     0, 4096)) < 0)
 +                                     0, 4096 + APP_MAX_LENGTH)) < 0)
          return ret;
  
      p = pkt.data;
@@@ -690,7 -693,7 +690,7 @@@ static int gen_play(URLContext *s, RTMP
  
      av_log(s, AV_LOG_DEBUG, "Sending play command for '%s'\n", rt->playpath);
  
-     if ((ret = ff_rtmp_packet_create(&pkt, RTMP_VIDEO_CHANNEL, RTMP_PT_INVOKE,
+     if ((ret = ff_rtmp_packet_create(&pkt, RTMP_SOURCE_CHANNEL, RTMP_PT_INVOKE,
                                       0, 29 + strlen(rt->playpath))) < 0)
          return ret;
  
@@@ -1165,7 -1168,7 +1165,7 @@@ static int rtmp_handshake(URLContext *s
      for (i = 9; i <= RTMP_HANDSHAKE_PACKET_SIZE; i++)
          tosend[i] = av_lfg_get(&rnd) >> 24;
  
 -    if (rt->encrypted && CONFIG_FFRTMPCRYPT_PROTOCOL) {
 +    if (CONFIG_FFRTMPCRYPT_PROTOCOL && rt->encrypted) {
          /* When the client wants to use RTMPE, we have to change the command
           * byte to 0x06 which means to use encrypted data and we have to set
           * the flash version to at least 9.0.115.0. */
          if (ret < 0)
              return ret;
  
 -        if (rt->encrypted && CONFIG_FFRTMPCRYPT_PROTOCOL) {
 +        if (CONFIG_FFRTMPCRYPT_PROTOCOL && rt->encrypted) {
              /* Compute the shared secret key sent by the server and initialize
               * the RC4 encryption. */
              if ((ret = ff_rtmpe_compute_secret_key(rt->stream, serverdata + 1,
          if (ret < 0)
              return ret;
  
 -        if (rt->encrypted && CONFIG_FFRTMPCRYPT_PROTOCOL) {
 +        if (CONFIG_FFRTMPCRYPT_PROTOCOL && rt->encrypted) {
              /* Encrypt the signature to be send to the server. */
              ff_rtmpe_encrypt_sig(rt->stream, tosend +
                                   RTMP_HANDSHAKE_PACKET_SIZE - 32, digest,
                                 RTMP_HANDSHAKE_PACKET_SIZE)) < 0)
              return ret;
  
 -        if (rt->encrypted && CONFIG_FFRTMPCRYPT_PROTOCOL) {
 +        if (CONFIG_FFRTMPCRYPT_PROTOCOL && rt->encrypted) {
              /* Set RC4 keys for encryption and update the keystreams. */
              if ((ret = ff_rtmpe_update_keystream(rt->stream)) < 0)
                  return ret;
          }
      } else {
 -        if (rt->encrypted && CONFIG_FFRTMPCRYPT_PROTOCOL) {
 +        if (CONFIG_FFRTMPCRYPT_PROTOCOL && rt->encrypted) {
              /* Compute the shared secret key sent by the server and initialize
               * the RC4 encryption. */
              if ((ret = ff_rtmpe_compute_secret_key(rt->stream, serverdata + 1,
                                 RTMP_HANDSHAKE_PACKET_SIZE)) < 0)
              return ret;
  
 -        if (rt->encrypted && CONFIG_FFRTMPCRYPT_PROTOCOL) {
 +        if (CONFIG_FFRTMPCRYPT_PROTOCOL && rt->encrypted) {
              /* Set RC4 keys for encryption and update the keystreams. */
              if ((ret = ff_rtmpe_update_keystream(rt->stream)) < 0)
                  return ret;
@@@ -2205,7 -2208,7 +2205,7 @@@ static int get_packet(URLContext *s, in
              }
          }
          rt->bytes_read += ret;
 -        if (rt->bytes_read > rt->last_bytes_read + rt->client_report_size) {
 +        if (rt->bytes_read - rt->last_bytes_read > rt->client_report_size) {
              av_log(s, AV_LOG_DEBUG, "Sending bytes read report\n");
              if ((ret = gen_bytes_read(s, rt, rpkt.timestamp + 1)) < 0)
                  return ret;
@@@ -2450,20 -2453,16 +2450,20 @@@ reconnect
              fname = strchr(p + 1, '/');
              if (!fname || (c && c < fname)) {
                  fname = p + 1;
 -                av_strlcpy(rt->app, path + 1, p - path);
 +                av_strlcpy(rt->app, path + 1, FFMIN(p - path, APP_MAX_LENGTH));
              } else {
                  fname++;
 -                av_strlcpy(rt->app, path + 1, fname - path - 1);
 +                av_strlcpy(rt->app, path + 1, FFMIN(fname - path - 1, APP_MAX_LENGTH));
              }
          }
      }
  
      if (old_app) {
          // The name of application has been defined by the user, override it.
 +        if (strlen(old_app) >= APP_MAX_LENGTH) {
 +            ret = AVERROR(EINVAL);
 +            goto fail;
 +        }
          av_free(rt->app);
          rt->app = old_app;
      }
@@@ -2638,7 -2637,7 +2638,7 @@@ static int rtmp_write(URLContext *s, co
          if (rt->flv_header_bytes < 11) {
              const uint8_t *header = rt->flv_header;
              int copy = FFMIN(11 - rt->flv_header_bytes, size_temp);
-             int channel = RTMP_SOURCE_CHANNEL;
+             int channel = RTMP_AUDIO_CHANNEL;
              bytestream_get_buffer(&buf_temp, rt->flv_header + rt->flv_header_bytes, copy);
              rt->flv_header_bytes += copy;
              size_temp            -= copy;