1 
2 /*
3  * Copyright (C) Roman Arutyunyan
4  */
5 
6 
7 #ifndef _NGX_RTMP_CMD_H_INCLUDED_
8 #define _NGX_RTMP_CMD_H_INCLUDED_
9 
10 
11 #include <ngx_config.h>
12 #include <ngx_core.h>
13 #include <ngx_event.h>
14 #include "ngx_rtmp.h"
15 
16 
17 #define NGX_RTMP_MAX_NAME           2048
18 #define NGX_RTMP_MAX_URL            4096
19 #define NGX_RTMP_MAX_ARGS           NGX_RTMP_MAX_NAME
20 
21 
22 /* Basic RTMP call support */
23 
24 typedef struct {
25     double                          trans;
26     u_char                          app[NGX_RTMP_MAX_NAME];
27     u_char                          args[NGX_RTMP_MAX_ARGS];
28     u_char                          flashver[64];
29     u_char                          swf_url[NGX_RTMP_MAX_URL];
30     u_char                          tc_url[NGX_RTMP_MAX_URL];
31     double                          acodecs;
32     double                          vcodecs;
33     u_char                          page_url[NGX_RTMP_MAX_URL];
34     double                          object_encoding;
35 } ngx_rtmp_connect_t;
36 
37 
38 typedef struct {
39     double                          trans;
40     double                          stream;
41 } ngx_rtmp_create_stream_t;
42 
43 
44 typedef struct {
45     double                          stream;
46 } ngx_rtmp_delete_stream_t;
47 
48 
49 typedef struct {
50     double                          stream;
51 } ngx_rtmp_close_stream_t;
52 
53 
54 typedef struct {
55     u_char                          name[NGX_RTMP_MAX_NAME];
56     u_char                          args[NGX_RTMP_MAX_ARGS];
57     u_char                          type[16];
58     int                             silent;
59 } ngx_rtmp_publish_t;
60 
61 
62 typedef struct {
63     ngx_str_t                       playlist;
64     ngx_str_t                       module;
65 } ngx_rtmp_playlist_t;
66 
67 
68 typedef struct {
69     u_char                          name[NGX_RTMP_MAX_NAME];
70     u_char                          args[NGX_RTMP_MAX_ARGS];
71     double                          start;
72     double                          duration;
73     int                             reset;
74     int                             silent;
75 } ngx_rtmp_play_t;
76 
77 
78 typedef struct {
79     double                          offset;
80 } ngx_rtmp_seek_t;
81 
82 
83 typedef struct {
84     uint8_t                         pause;
85     double                          position;
86 } ngx_rtmp_pause_t;
87 
88 
89 typedef struct {
90     uint32_t                        msid;
91 } ngx_rtmp_msid_t;
92 
93 
94 typedef ngx_rtmp_msid_t             ngx_rtmp_stream_begin_t;
95 typedef ngx_rtmp_msid_t             ngx_rtmp_stream_eof_t;
96 typedef ngx_rtmp_msid_t             ngx_rtmp_stream_dry_t;
97 typedef ngx_rtmp_msid_t             ngx_rtmp_recorded_t;
98 
99 
100 typedef struct {
101     uint32_t                        msid;
102     uint32_t                        buflen;
103 } ngx_rtmp_set_buflen_t;
104 
105 
106 void ngx_rtmp_cmd_fill_args(u_char name[NGX_RTMP_MAX_NAME],
107         u_char args[NGX_RTMP_MAX_ARGS]);
108 
109 
110 typedef ngx_int_t (*ngx_rtmp_connect_pt)(ngx_rtmp_session_t *s,
111         ngx_rtmp_connect_t *v);
112 typedef ngx_int_t (*ngx_rtmp_disconnect_pt)(ngx_rtmp_session_t *s);
113 typedef ngx_int_t (*ngx_rtmp_create_stream_pt)(ngx_rtmp_session_t *s,
114         ngx_rtmp_create_stream_t *v);
115 typedef ngx_int_t (*ngx_rtmp_close_stream_pt)(ngx_rtmp_session_t *s,
116         ngx_rtmp_close_stream_t *v);
117 typedef ngx_int_t (*ngx_rtmp_delete_stream_pt)(ngx_rtmp_session_t *s,
118         ngx_rtmp_delete_stream_t *v);
119 typedef ngx_int_t (*ngx_rtmp_publish_pt)(ngx_rtmp_session_t *s,
120         ngx_rtmp_publish_t *v);
121 typedef ngx_int_t (*ngx_rtmp_play_pt)(ngx_rtmp_session_t *s,
122         ngx_rtmp_play_t *v);
123 typedef ngx_int_t (*ngx_rtmp_seek_pt)(ngx_rtmp_session_t *s,
124         ngx_rtmp_seek_t *v);
125 typedef ngx_int_t (*ngx_rtmp_pause_pt)(ngx_rtmp_session_t *s,
126         ngx_rtmp_pause_t *v);
127 
128 typedef ngx_int_t (*ngx_rtmp_stream_begin_pt)(ngx_rtmp_session_t *s,
129         ngx_rtmp_stream_begin_t *v);
130 typedef ngx_int_t (*ngx_rtmp_stream_eof_pt)(ngx_rtmp_session_t *s,
131         ngx_rtmp_stream_eof_t *v);
132 typedef ngx_int_t (*ngx_rtmp_stream_dry_pt)(ngx_rtmp_session_t *s,
133         ngx_rtmp_stream_dry_t *v);
134 typedef ngx_int_t (*ngx_rtmp_recorded_pt)(ngx_rtmp_session_t *s,
135         ngx_rtmp_recorded_t *v);
136 typedef ngx_int_t (*ngx_rtmp_set_buflen_pt)(ngx_rtmp_session_t *s,
137         ngx_rtmp_set_buflen_t *v);
138 
139 typedef ngx_int_t (*ngx_rtmp_playlist_pt)(ngx_rtmp_session_t *s, ngx_rtmp_playlist_t *v);
140 
141 extern ngx_rtmp_connect_pt          ngx_rtmp_connect;
142 extern ngx_rtmp_disconnect_pt       ngx_rtmp_disconnect;
143 extern ngx_rtmp_create_stream_pt    ngx_rtmp_create_stream;
144 extern ngx_rtmp_close_stream_pt     ngx_rtmp_close_stream;
145 extern ngx_rtmp_delete_stream_pt    ngx_rtmp_delete_stream;
146 extern ngx_rtmp_publish_pt          ngx_rtmp_publish;
147 extern ngx_rtmp_play_pt             ngx_rtmp_play;
148 extern ngx_rtmp_seek_pt             ngx_rtmp_seek;
149 extern ngx_rtmp_pause_pt            ngx_rtmp_pause;
150 
151 extern ngx_rtmp_stream_begin_pt     ngx_rtmp_stream_begin;
152 extern ngx_rtmp_stream_eof_pt       ngx_rtmp_stream_eof;
153 extern ngx_rtmp_stream_dry_pt       ngx_rtmp_stream_dry;
154 extern ngx_rtmp_set_buflen_pt       ngx_rtmp_set_buflen;
155 extern ngx_rtmp_recorded_pt         ngx_rtmp_recorded;
156 
157 extern ngx_rtmp_playlist_pt         ngx_rtmp_playlist;
158 
159 #endif /*_NGX_RTMP_CMD_H_INCLUDED_ */
160