From e598616e14e4875bc5c7fcaf3ad981e7c992753e Mon Sep 17 00:00:00 2001 From: winlin Date: Tue, 22 Oct 2013 12:27:22 +0800 Subject: [PATCH] fix objectEncoding bug, default to AMF0, change to AMF3 if required. --- trunk/src/core/srs_core_client.cpp | 2 +- trunk/src/core/srs_core_rtmp.cpp | 20 +++++++++++++++++--- trunk/src/core/srs_core_rtmp.hpp | 6 +++++- 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/trunk/src/core/srs_core_client.cpp b/trunk/src/core/srs_core_client.cpp index 86b420bca..093ce13a3 100755 --- a/trunk/src/core/srs_core_client.cpp +++ b/trunk/src/core/srs_core_client.cpp @@ -96,7 +96,7 @@ int SrsClient::do_cycle() } srs_verbose("set peer bandwidth success"); - if ((ret = rtmp->response_connect_app()) != ERROR_SUCCESS) { + if ((ret = rtmp->response_connect_app(req)) != ERROR_SUCCESS) { srs_error("response connect app failed. ret=%d", ret); return ret; } diff --git a/trunk/src/core/srs_core_rtmp.cpp b/trunk/src/core/srs_core_rtmp.cpp index ab8796378..cccb698f6 100755 --- a/trunk/src/core/srs_core_rtmp.cpp +++ b/trunk/src/core/srs_core_rtmp.cpp @@ -34,7 +34,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * the signature for packets to client. */ #define RTMP_SIG_FMS_VER "3,5,3,888" -#define RTMP_SIG_AMF0_VER 3 +#define RTMP_SIG_AMF0_VER 0 #define RTMP_SIG_SRS_NAME "srs(simple rtmp server)" #define RTMP_SIG_SRS_URL "https://github.com/winlinvip/simple-rtmp-server" #define RTMP_SIG_SRS_VERSION "0.1" @@ -53,6 +53,15 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #define StatusCodeStreamStart "NetStream.Play.Start" #define StatusCodeDataStart "NetStream.Data.Start" +SrsRequest::SrsRequest() +{ + objectEncoding = RTMP_SIG_AMF0_VER; +} + +SrsRequest::~SrsRequest() +{ +} + int SrsRequest::discovery_app() { int ret = ERROR_SUCCESS; @@ -183,6 +192,11 @@ int SrsRtmp::connect_app(SrsRequest* req) if ((prop = pkt->command_object->ensure_property_string("swfUrl")) != NULL) { req->swfUrl = srs_amf0_convert(prop)->value; } + + if ((prop = pkt->command_object->ensure_property_string("objectEncoding")) != NULL) { + req->objectEncoding = srs_amf0_convert(prop)->value; + } + srs_info("get connect app message params success."); return req->discovery_app(); @@ -228,7 +242,7 @@ int SrsRtmp::set_peer_bandwidth(int bandwidth, int type) return ret; } -int SrsRtmp::response_connect_app() +int SrsRtmp::response_connect_app(SrsRequest* req) { int ret = ERROR_SUCCESS; @@ -242,7 +256,7 @@ int SrsRtmp::response_connect_app() pkt->info->properties[StatusLevel] = new SrsAmf0String(StatusLevelStatus); pkt->info->properties[StatusCode] = new SrsAmf0String(StatusCodeConnectSuccess); pkt->info->properties[StatusDescription] = new SrsAmf0String("Connection succeeded"); - pkt->info->properties["objectEncoding"] = new SrsAmf0Number(RTMP_SIG_AMF0_VER); + pkt->info->properties["objectEncoding"] = new SrsAmf0Number(req->objectEncoding); SrsASrsAmf0EcmaArray* data = new SrsASrsAmf0EcmaArray(); pkt->info->properties["data"] = data; diff --git a/trunk/src/core/srs_core_rtmp.hpp b/trunk/src/core/srs_core_rtmp.hpp index 9c51ed5ba..14f0fd724 100755 --- a/trunk/src/core/srs_core_rtmp.hpp +++ b/trunk/src/core/srs_core_rtmp.hpp @@ -46,6 +46,7 @@ struct SrsRequest std::string tcUrl; std::string pageUrl; std::string swfUrl; + double objectEncoding; std::string schema; std::string vhost; @@ -53,6 +54,9 @@ struct SrsRequest std::string app; std::string stream; + SrsRequest(); + virtual ~SrsRequest(); + /** * disconvery vhost/app from tcUrl. */ @@ -91,7 +95,7 @@ public: * using the Limit type field. */ virtual int set_peer_bandwidth(int bandwidth, int type); - virtual int response_connect_app(); + virtual int response_connect_app(SrsRequest* req); virtual int on_bw_done(); /** * recv some message to identify the client.