winlin

for bug https://github.com/winlinvip/st-load/pull/3, add ecma array to object.

@@ -1740,6 +1740,22 @@ srs_amf0_t srs_amf0_create_object() @@ -1740,6 +1740,22 @@ srs_amf0_t srs_amf0_create_object()
1740 return SrsAmf0Any::object(); 1740 return SrsAmf0Any::object();
1741 } 1741 }
1742 1742
  1743 +srs_amf0_t srs_amf0_ecma_array_to_object(srs_amf0_t ecma_arr)
  1744 +{
  1745 + srs_assert(srs_amf0_is_ecma_array(ecma_arr));
  1746 +
  1747 + SrsAmf0EcmaArray* arr = (SrsAmf0EcmaArray*)ecma_arr;
  1748 + SrsAmf0Object* obj = SrsAmf0Any::object();
  1749 +
  1750 + for (int i = 0; i < arr->count(); i++) {
  1751 + std::string key = arr->key_at(i);
  1752 + SrsAmf0Any* value = arr->value_at(i);
  1753 + obj->set(key, value->copy());
  1754 + }
  1755 +
  1756 + return obj;
  1757 +}
  1758 +
1743 void srs_amf0_free(srs_amf0_t amf0) 1759 void srs_amf0_free(srs_amf0_t amf0)
1744 { 1760 {
1745 SrsAmf0Any* any = (SrsAmf0Any*)amf0; 1761 SrsAmf0Any* any = (SrsAmf0Any*)amf0;
@@ -552,12 +552,14 @@ typedef double srs_amf0_number; @@ -552,12 +552,14 @@ typedef double srs_amf0_number;
552 * parse amf0 from data. 552 * parse amf0 from data.
553 * @param nparsed, the parsed size, NULL to ignore. 553 * @param nparsed, the parsed size, NULL to ignore.
554 * @return the parsed amf0 object. NULL for error. 554 * @return the parsed amf0 object. NULL for error.
  555 +* @remark user must free the parsed or created object by srs_amf0_free.
555 */ 556 */
556 extern srs_amf0_t srs_amf0_parse(char* data, int size, int* nparsed); 557 extern srs_amf0_t srs_amf0_parse(char* data, int size, int* nparsed);
557 extern srs_amf0_t srs_amf0_create_number(srs_amf0_number value); 558 extern srs_amf0_t srs_amf0_create_number(srs_amf0_number value);
558 extern srs_amf0_t srs_amf0_create_ecma_array(); 559 extern srs_amf0_t srs_amf0_create_ecma_array();
559 extern srs_amf0_t srs_amf0_create_strict_array(); 560 extern srs_amf0_t srs_amf0_create_strict_array();
560 extern srs_amf0_t srs_amf0_create_object(); 561 extern srs_amf0_t srs_amf0_create_object();
  562 +extern srs_amf0_t srs_amf0_ecma_array_to_object(srs_amf0_t ecma_arr);
561 extern void srs_amf0_free(srs_amf0_t amf0); 563 extern void srs_amf0_free(srs_amf0_t amf0);
562 /* size and to bytes */ 564 /* size and to bytes */
563 extern int srs_amf0_size(srs_amf0_t amf0); 565 extern int srs_amf0_size(srs_amf0_t amf0);