re/include/re_rtmp.h

138 lines
5.1 KiB
C
Raw Permalink Normal View History

2018-10-24 11:18:52 +02:00
/**
* @file re_rtmp.h Interface to Real Time Messaging Protocol (RTMP)
*
* Copyright (C) 2010 Creytiv.com
*/
/** RTMP Protocol values */
enum {
RTMP_PORT = 1935,
};
/** RTMP Stream IDs */
enum {
/* User Control messages SHOULD use message stream ID 0
(known as the control stream) */
RTMP_CONTROL_STREAM_ID = 0
};
/** RTMP Packet types */
enum rtmp_packet_type {
RTMP_TYPE_SET_CHUNK_SIZE = 1, /**< Set Chunk Size */
RTMP_TYPE_ACKNOWLEDGEMENT = 3, /**< Acknowledgement */
RTMP_TYPE_USER_CONTROL_MSG = 4, /**< User Control Messages */
RTMP_TYPE_WINDOW_ACK_SIZE = 5, /**< Window Acknowledgement Size */
RTMP_TYPE_SET_PEER_BANDWIDTH = 6, /**< Set Peer Bandwidth */
RTMP_TYPE_AUDIO = 8, /**< Audio Message */
RTMP_TYPE_VIDEO = 9, /**< Video Message */
RTMP_TYPE_DATA = 18, /**< Data Message */
RTMP_TYPE_AMF0 = 20, /**< Action Message Format (AMF) */
};
/** RTMP AMF types */
enum rtmp_amf_type {
RTMP_AMF_TYPE_ROOT = -1, /**< Special internal type */
RTMP_AMF_TYPE_NUMBER = 0x00, /**< Number Type */
RTMP_AMF_TYPE_BOOLEAN = 0x01, /**< Boolean Type */
RTMP_AMF_TYPE_STRING = 0x02, /**< String Type */
RTMP_AMF_TYPE_OBJECT = 0x03, /**< Object Type */
RTMP_AMF_TYPE_NULL = 0x05, /**< Null type */
RTMP_AMF_TYPE_ECMA_ARRAY = 0x08, /**< ECMA 'associative' Array */
RTMP_AMF_TYPE_OBJECT_END = 0x09, /**< Object End Type */
RTMP_AMF_TYPE_STRICT_ARRAY = 0x0a, /**< Array with ordinal indices */
};
/** RTMP Event types */
enum rtmp_event_type {
RTMP_EVENT_STREAM_BEGIN = 0, /**< Stream begin */
RTMP_EVENT_STREAM_EOF = 1, /**< Stream End-Of-File */
RTMP_EVENT_STREAM_DRY = 2, /**< No more data on the stream */
RTMP_EVENT_SET_BUFFER_LENGTH = 3, /**< Set buffer size in [ms] */
RTMP_EVENT_STREAM_IS_RECORDED = 4, /**< Stream is recorded */
RTMP_EVENT_PING_REQUEST = 6, /**< Ping Request from server */
RTMP_EVENT_PING_RESPONSE = 7, /**< Ping Response to server */
};
/* forward declarations */
struct dnsc;
struct odict;
struct tcp_sock;
/*
* RTMP High-level API (connection, stream)
*/
/* conn */
struct rtmp_conn;
typedef void (rtmp_estab_h)(void *arg);
typedef void (rtmp_command_h)(const struct odict *msg, void *arg);
typedef void (rtmp_close_h)(int err, void *arg);
int rtmp_connect(struct rtmp_conn **connp, struct dnsc *dnsc, const char *uri,
rtmp_estab_h *estabh, rtmp_command_h *cmdh,
rtmp_close_h *closeh, void *arg);
int rtmp_accept(struct rtmp_conn **connp, struct tcp_sock *ts,
rtmp_command_h *cmdh, rtmp_close_h *closeh, void *arg);
int rtmp_control(const struct rtmp_conn *conn,
enum rtmp_packet_type type, ...);
struct tcp_conn *rtmp_conn_tcpconn(const struct rtmp_conn *conn);
const char *rtmp_conn_stream(const struct rtmp_conn *conn);
int rtmp_conn_debug(struct re_printf *pf, const struct rtmp_conn *conn);
typedef void (rtmp_resp_h)(bool success, const struct odict *msg,
void *arg);
/* amf */
int rtmp_amf_command(const struct rtmp_conn *conn, uint32_t stream_id,
const char *command,
unsigned body_propc, ...);
int rtmp_amf_request(struct rtmp_conn *conn, uint32_t stream_id,
const char *command,
rtmp_resp_h *resph, void *arg, unsigned body_propc, ...);
int rtmp_amf_reply(struct rtmp_conn *conn, uint32_t stream_id, bool success,
const struct odict *req,
unsigned body_propc, ...);
int rtmp_amf_data(const struct rtmp_conn *conn, uint32_t stream_id,
2018-10-24 11:18:52 +02:00
const char *command, unsigned body_propc, ...);
/* stream */
struct rtmp_stream;
typedef void (rtmp_control_h)(enum rtmp_event_type event, struct mbuf *mb,
void *arg);
typedef void (rtmp_audio_h)(uint32_t timestamp,
const uint8_t *pld, size_t len, void *arg);
typedef void (rtmp_video_h)(uint32_t timestamp,
const uint8_t *pld, size_t len, void *arg);
int rtmp_stream_alloc(struct rtmp_stream **strmp, struct rtmp_conn *conn,
uint32_t stream_id, rtmp_command_h *cmdh,
rtmp_control_h *ctrlh, rtmp_audio_h *auh,
rtmp_video_h *vidh, rtmp_command_h *datah,
void *arg);
int rtmp_stream_create(struct rtmp_stream **strmp, struct rtmp_conn *conn,
rtmp_resp_h *resph, rtmp_command_h *cmdh,
rtmp_control_h *ctrlh, rtmp_audio_h *auh,
rtmp_video_h *vidh, rtmp_command_h *datah,
void *arg);
int rtmp_play(struct rtmp_stream *strm, const char *name);
int rtmp_publish(struct rtmp_stream *strm, const char *name);
int rtmp_meta(struct rtmp_stream *strm);
2018-10-24 11:18:52 +02:00
int rtmp_send_audio(struct rtmp_stream *strm, uint32_t timestamp,
const uint8_t *pld, size_t len);
int rtmp_send_video(struct rtmp_stream *strm, uint32_t timestamp,
const uint8_t *pld, size_t len);
struct rtmp_stream *rtmp_stream_find(const struct rtmp_conn *conn,
uint32_t stream_id);
const char *rtmp_event_name(enum rtmp_event_type event);