*/
/**
- * @file libavformat/rtmpproto.c
+ * @file
* RTMP protocol
*/
#include "libavutil/lfg.h"
#include "libavutil/sha.h"
#include "avformat.h"
+#include "internal.h"
#include "network.h"
#include "rtmppkt.h"
/* we can't use av_log() with URLContext yet... */
-#if LIBAVFORMAT_VERSION_MAJOR < 53
-#define LOG_CONTEXT NULL
-#else
+#if FF_API_URL_CLASS
#define LOG_CONTEXT s
+#else
+#define LOG_CONTEXT NULL
#endif
//#define DEBUG
};
/**
- * Generates 'connect' call and sends it to the server.
+ * Generate 'connect' call and send it to the server.
*/
static void gen_connect(URLContext *s, RTMPContext *rt, const char *proto,
const char *host, int port)
}
/**
- * Generates 'releaseStream' call and sends it to the server. It should make
+ * Generate 'releaseStream' call and send it to the server. It should make
* the server release some channel for media streams.
*/
static void gen_release_stream(URLContext *s, RTMPContext *rt)
}
/**
- * Generates 'FCPublish' call and sends it to the server. It should make
+ * Generate 'FCPublish' call and send it to the server. It should make
* the server preapare for receiving media streams.
*/
static void gen_fcpublish_stream(URLContext *s, RTMPContext *rt)
}
/**
- * Generates 'FCUnpublish' call and sends it to the server. It should make
+ * Generate 'FCUnpublish' call and send it to the server. It should make
* the server destroy stream.
*/
static void gen_fcunpublish_stream(URLContext *s, RTMPContext *rt)
}
/**
- * Generates 'createStream' call and sends it to the server. It should make
+ * Generate 'createStream' call and send it to the server. It should make
* the server allocate some channel for media streams.
*/
static void gen_create_stream(URLContext *s, RTMPContext *rt)
/**
- * Generates 'deleteStream' call and sends it to the server. It should make
+ * Generate 'deleteStream' call and send it to the server. It should make
* the server remove some channel for media streams.
*/
static void gen_delete_stream(URLContext *s, RTMPContext *rt)
}
/**
- * Generates 'play' call and sends it to the server, then pings the server
+ * Generate 'play' call and send it to the server, then ping the server
* to start actual playing.
*/
static void gen_play(URLContext *s, RTMPContext *rt)
}
/**
- * Generates 'publish' call and sends it to the server.
+ * Generate 'publish' call and send it to the server.
*/
static void gen_publish(URLContext *s, RTMPContext *rt)
{
}
/**
- * Generates ping reply and sends it to the server.
+ * Generate ping reply and send it to the server.
*/
static void gen_pong(URLContext *s, RTMPContext *rt, RTMPPacket *ppkt)
{
}
/**
- * Generates report on bytes read so far and sends it to the server.
+ * Generate report on bytes read so far and send it to the server.
*/
static void gen_bytes_read(URLContext *s, RTMPContext *rt, uint32_t ts)
{
#define HMAC_OPAD_VAL 0x5C
/**
- * Calculates HMAC-SHA2 digest for RTMP handshake packets.
+ * Calculate HMAC-SHA2 digest for RTMP handshake packets.
*
* @param src input buffer
* @param len input buffer length (should be 1536)
}
/**
- * Puts HMAC-SHA2 digest of packet data (except for the bytes where this digest
+ * Put HMAC-SHA2 digest of packet data (except for the bytes where this digest
* will be stored) into that packet.
*
* @param buf handshake data (1536 bytes)
}
/**
- * Verifies that the received server response has the expected digest value.
+ * Verify that the received server response has the expected digest value.
*
* @param buf handshake data received from the server (1536 bytes)
* @param off position to search digest offset from
}
/**
- * Performs handshake with the server by means of exchanging pseudorandom data
+ * Perform handshake with the server by means of exchanging pseudorandom data
* signed with HMAC-SHA2 digest.
*
* @return 0 if handshake succeeds, negative value otherwise
}
/**
- * Parses received packet and may perform some action depending on
+ * Parse received packet and possibly perform some action depending on
* the packet contents.
* @return 0 for no errors, negative values for serious errors which prevent
* further communications, positive values for uncritical errors
}
/**
- * Interacts with the server by receiving and sending RTMP packets until
+ * Interact with the server by receiving and sending RTMP packets until
* there is some significant data (media data or expected status notification).
*
* @param s reading context
data_size = bytestream_get_be24(&next);
p=next;
cts = bytestream_get_be24(&next);
- cts |= bytestream_get_byte(&next);
+ cts |= bytestream_get_byte(&next) << 24;
if (pts==0)
pts=cts;
ts += cts - pts;
}
/**
- * Opens RTMP connection and verifies that the stream can be played.
+ * Open RTMP connection and verify that the stream can be played.
*
* URL syntax: rtmp://server[:port][/app][/playpath]
* where 'app' is first one or two directories in the path
s->priv_data = rt;
rt->is_input = !(flags & URL_WRONLY);
- ff_url_split(proto, sizeof(proto), NULL, 0, hostname, sizeof(hostname), &port,
- path, sizeof(path), s->filename);
+ av_url_split(proto, sizeof(proto), NULL, 0, hostname, sizeof(hostname), &port,
+ path, sizeof(path), s->filename);
if (port < 0)
port = RTMP_DEFAULT_PORT;
buf += data_left;
size -= data_left;
rt->flv_off = rt->flv_size;
+ return data_left;
}
if ((ret = get_packet(s, 0)) < 0)
return ret;
return orig_size;
}
-static int rtmp_write(URLContext *h, uint8_t *buf, int size)
+static int rtmp_write(URLContext *h, const uint8_t *buf, int size)
{
RTMPContext *rt = h->priv_data;
int size_temp = size;