fix objectEncoding bug, default to AMF0, change to AMF3 if required.
正在显示
3 个修改的文件
包含
23 行增加
和
5 行删除
| @@ -96,7 +96,7 @@ int SrsClient::do_cycle() | @@ -96,7 +96,7 @@ int SrsClient::do_cycle() | ||
| 96 | } | 96 | } |
| 97 | srs_verbose("set peer bandwidth success"); | 97 | srs_verbose("set peer bandwidth success"); |
| 98 | 98 | ||
| 99 | - if ((ret = rtmp->response_connect_app()) != ERROR_SUCCESS) { | 99 | + if ((ret = rtmp->response_connect_app(req)) != ERROR_SUCCESS) { |
| 100 | srs_error("response connect app failed. ret=%d", ret); | 100 | srs_error("response connect app failed. ret=%d", ret); |
| 101 | return ret; | 101 | return ret; |
| 102 | } | 102 | } |
| @@ -34,7 +34,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | @@ -34,7 +34,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
| 34 | * the signature for packets to client. | 34 | * the signature for packets to client. |
| 35 | */ | 35 | */ |
| 36 | #define RTMP_SIG_FMS_VER "3,5,3,888" | 36 | #define RTMP_SIG_FMS_VER "3,5,3,888" |
| 37 | -#define RTMP_SIG_AMF0_VER 3 | 37 | +#define RTMP_SIG_AMF0_VER 0 |
| 38 | #define RTMP_SIG_SRS_NAME "srs(simple rtmp server)" | 38 | #define RTMP_SIG_SRS_NAME "srs(simple rtmp server)" |
| 39 | #define RTMP_SIG_SRS_URL "https://github.com/winlinvip/simple-rtmp-server" | 39 | #define RTMP_SIG_SRS_URL "https://github.com/winlinvip/simple-rtmp-server" |
| 40 | #define RTMP_SIG_SRS_VERSION "0.1" | 40 | #define RTMP_SIG_SRS_VERSION "0.1" |
| @@ -53,6 +53,15 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | @@ -53,6 +53,15 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | ||
| 53 | #define StatusCodeStreamStart "NetStream.Play.Start" | 53 | #define StatusCodeStreamStart "NetStream.Play.Start" |
| 54 | #define StatusCodeDataStart "NetStream.Data.Start" | 54 | #define StatusCodeDataStart "NetStream.Data.Start" |
| 55 | 55 | ||
| 56 | +SrsRequest::SrsRequest() | ||
| 57 | +{ | ||
| 58 | + objectEncoding = RTMP_SIG_AMF0_VER; | ||
| 59 | +} | ||
| 60 | + | ||
| 61 | +SrsRequest::~SrsRequest() | ||
| 62 | +{ | ||
| 63 | +} | ||
| 64 | + | ||
| 56 | int SrsRequest::discovery_app() | 65 | int SrsRequest::discovery_app() |
| 57 | { | 66 | { |
| 58 | int ret = ERROR_SUCCESS; | 67 | int ret = ERROR_SUCCESS; |
| @@ -183,6 +192,11 @@ int SrsRtmp::connect_app(SrsRequest* req) | @@ -183,6 +192,11 @@ int SrsRtmp::connect_app(SrsRequest* req) | ||
| 183 | if ((prop = pkt->command_object->ensure_property_string("swfUrl")) != NULL) { | 192 | if ((prop = pkt->command_object->ensure_property_string("swfUrl")) != NULL) { |
| 184 | req->swfUrl = srs_amf0_convert<SrsAmf0String>(prop)->value; | 193 | req->swfUrl = srs_amf0_convert<SrsAmf0String>(prop)->value; |
| 185 | } | 194 | } |
| 195 | + | ||
| 196 | + if ((prop = pkt->command_object->ensure_property_string("objectEncoding")) != NULL) { | ||
| 197 | + req->objectEncoding = srs_amf0_convert<SrsAmf0Number>(prop)->value; | ||
| 198 | + } | ||
| 199 | + | ||
| 186 | srs_info("get connect app message params success."); | 200 | srs_info("get connect app message params success."); |
| 187 | 201 | ||
| 188 | return req->discovery_app(); | 202 | return req->discovery_app(); |
| @@ -228,7 +242,7 @@ int SrsRtmp::set_peer_bandwidth(int bandwidth, int type) | @@ -228,7 +242,7 @@ int SrsRtmp::set_peer_bandwidth(int bandwidth, int type) | ||
| 228 | return ret; | 242 | return ret; |
| 229 | } | 243 | } |
| 230 | 244 | ||
| 231 | -int SrsRtmp::response_connect_app() | 245 | +int SrsRtmp::response_connect_app(SrsRequest* req) |
| 232 | { | 246 | { |
| 233 | int ret = ERROR_SUCCESS; | 247 | int ret = ERROR_SUCCESS; |
| 234 | 248 | ||
| @@ -242,7 +256,7 @@ int SrsRtmp::response_connect_app() | @@ -242,7 +256,7 @@ int SrsRtmp::response_connect_app() | ||
| 242 | pkt->info->properties[StatusLevel] = new SrsAmf0String(StatusLevelStatus); | 256 | pkt->info->properties[StatusLevel] = new SrsAmf0String(StatusLevelStatus); |
| 243 | pkt->info->properties[StatusCode] = new SrsAmf0String(StatusCodeConnectSuccess); | 257 | pkt->info->properties[StatusCode] = new SrsAmf0String(StatusCodeConnectSuccess); |
| 244 | pkt->info->properties[StatusDescription] = new SrsAmf0String("Connection succeeded"); | 258 | pkt->info->properties[StatusDescription] = new SrsAmf0String("Connection succeeded"); |
| 245 | - pkt->info->properties["objectEncoding"] = new SrsAmf0Number(RTMP_SIG_AMF0_VER); | 259 | + pkt->info->properties["objectEncoding"] = new SrsAmf0Number(req->objectEncoding); |
| 246 | SrsASrsAmf0EcmaArray* data = new SrsASrsAmf0EcmaArray(); | 260 | SrsASrsAmf0EcmaArray* data = new SrsASrsAmf0EcmaArray(); |
| 247 | pkt->info->properties["data"] = data; | 261 | pkt->info->properties["data"] = data; |
| 248 | 262 |
| @@ -46,6 +46,7 @@ struct SrsRequest | @@ -46,6 +46,7 @@ struct SrsRequest | ||
| 46 | std::string tcUrl; | 46 | std::string tcUrl; |
| 47 | std::string pageUrl; | 47 | std::string pageUrl; |
| 48 | std::string swfUrl; | 48 | std::string swfUrl; |
| 49 | + double objectEncoding; | ||
| 49 | 50 | ||
| 50 | std::string schema; | 51 | std::string schema; |
| 51 | std::string vhost; | 52 | std::string vhost; |
| @@ -53,6 +54,9 @@ struct SrsRequest | @@ -53,6 +54,9 @@ struct SrsRequest | ||
| 53 | std::string app; | 54 | std::string app; |
| 54 | std::string stream; | 55 | std::string stream; |
| 55 | 56 | ||
| 57 | + SrsRequest(); | ||
| 58 | + virtual ~SrsRequest(); | ||
| 59 | + | ||
| 56 | /** | 60 | /** |
| 57 | * disconvery vhost/app from tcUrl. | 61 | * disconvery vhost/app from tcUrl. |
| 58 | */ | 62 | */ |
| @@ -91,7 +95,7 @@ public: | @@ -91,7 +95,7 @@ public: | ||
| 91 | * using the Limit type field. | 95 | * using the Limit type field. |
| 92 | */ | 96 | */ |
| 93 | virtual int set_peer_bandwidth(int bandwidth, int type); | 97 | virtual int set_peer_bandwidth(int bandwidth, int type); |
| 94 | - virtual int response_connect_app(); | 98 | + virtual int response_connect_app(SrsRequest* req); |
| 95 | virtual int on_bw_done(); | 99 | virtual int on_bw_done(); |
| 96 | /** | 100 | /** |
| 97 | * recv some message to identify the client. | 101 | * recv some message to identify the client. |
-
请 注册 或 登录 后发表评论