1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-03-09 15:49:59 +00:00

support amf0 and json to convert with each other.

This commit is contained in:
winlin 2015-09-19 13:31:57 +08:00
parent 3f7e69b617
commit b59d9ba6a1
7 changed files with 181 additions and 21 deletions

View file

@ -27,6 +27,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
using namespace std;
#include <srs_kernel_log.hpp>
#include <srs_rtmp_amf0.hpp>
/* json encode
cout<< SRS_JOBJECT_START
@ -357,6 +358,40 @@ string SrsJsonAny::to_json()
return "null";
}
SrsAmf0Any* SrsJsonAny::to_amf0()
{
switch (marker) {
case SRS_JSON_String: {
return SrsAmf0Any::str(to_str().c_str());
}
case SRS_JSON_Boolean: {
return SrsAmf0Any::boolean(to_boolean());
}
case SRS_JSON_Integer: {
return SrsAmf0Any::number(to_integer());
}
case SRS_JSON_Number: {
return SrsAmf0Any::number(to_number());
}
case SRS_JSON_Null: {
return SrsAmf0Any::null();
}
case SRS_JSON_Object: {
// json object must override this method.
srs_assert(false);
}
case SRS_JSON_Array: {
// json array must override this method.
srs_assert(false);
}
default: {
break;
}
}
return SrsAmf0Any::null();
}
SrsJsonAny* SrsJsonAny::str(const char* value)
{
return new SrsJsonString(value);
@ -367,7 +402,7 @@ SrsJsonAny* SrsJsonAny::boolean(bool value)
return new SrsJsonBoolean(value);
}
SrsJsonAny* SrsJsonAny::ingeter(int64_t value)
SrsJsonAny* SrsJsonAny::integer(int64_t value)
{
return new SrsJsonInteger(value);
}
@ -405,7 +440,7 @@ SrsJsonAny* srs_json_parse_tree_nx_json(const nx_json* node)
case NX_JSON_STRING:
return SrsJsonAny::str(node->text_value);
case NX_JSON_INTEGER:
return SrsJsonAny::ingeter(node->int_value);
return SrsJsonAny::integer(node->int_value);
case NX_JSON_DOUBLE:
return SrsJsonAny::number(node->dbl_value);
case NX_JSON_BOOL:
@ -513,6 +548,20 @@ string SrsJsonObject::to_json()
return ss.str();
}
SrsAmf0Any* SrsJsonObject::to_amf0()
{
SrsAmf0Object* obj = SrsAmf0Any::object();
for (int i = 0; i < (int)properties.size(); i++) {
std::string name = this->key_at(i);
SrsJsonAny* any = this->value_at(i);
obj->set(name, any->to_amf0());
}
return obj;
}
void SrsJsonObject::set(string key, SrsJsonAny* value)
{
if (!value) {
@ -686,6 +735,19 @@ string SrsJsonArray::to_json()
return ss.str();
}
SrsAmf0Any* SrsJsonArray::to_amf0()
{
SrsAmf0StrictArray* arr = SrsAmf0Any::strict_array();
for (int i = 0; i < (int)properties.size(); i++) {
SrsJsonAny* any = properties[i];
arr->append(any->to_amf0());
}
return arr;
}
#ifdef SRS_JSON_USE_NXJSON
////////////////////////////////////////////////////////////////////////////////////////////////