Squashed 'third_party/rawrtc/re/' content from commit f3163ce8b
Change-Id: I6a235e6ac0f03269d951026f9d195da05c40fdab
git-subtree-dir: third_party/rawrtc/re
git-subtree-split: f3163ce8b526a13b35ef71ce4dd6f43585064d8a
diff --git a/include/re_rtmp.h b/include/re_rtmp.h
new file mode 100644
index 0000000..4def1d1
--- /dev/null
+++ b/include/re_rtmp.h
@@ -0,0 +1,139 @@
+/**
+ * @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, ...);
+void rtmp_set_handlers(struct rtmp_conn *conn, rtmp_command_h *cmdh,
+ rtmp_close_h *closeh, void *arg);
+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,
+ 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);
+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);