mirror of
https://github.com/ossrs/srs.git
synced 2025-03-09 15:49:59 +00:00
amf0 utest: null,undefined,object-eof to any
This commit is contained in:
parent
e40be6e89d
commit
bfe771bbba
9 changed files with 293 additions and 227 deletions
|
@ -178,15 +178,15 @@ int SrsBandwidth::do_bandwidth_check()
|
||||||
|
|
||||||
// send finished msg
|
// send finished msg
|
||||||
SrsBandwidthPacket* pkt = SrsBandwidthPacket::create_finish();
|
SrsBandwidthPacket* pkt = SrsBandwidthPacket::create_finish();
|
||||||
pkt->data->set("code", new SrsAmf0Number(ERROR_SUCCESS));
|
pkt->data->set("code", SrsAmf0Any::number(ERROR_SUCCESS));
|
||||||
pkt->data->set("start_time", new SrsAmf0Number(start_time));
|
pkt->data->set("start_time", SrsAmf0Any::number(start_time));
|
||||||
pkt->data->set("end_time", new SrsAmf0Number(end_time));
|
pkt->data->set("end_time", SrsAmf0Any::number(end_time));
|
||||||
pkt->data->set("play_kbps", new SrsAmf0Number(play_kbps));
|
pkt->data->set("play_kbps", SrsAmf0Any::number(play_kbps));
|
||||||
pkt->data->set("publish_kbps", new SrsAmf0Number(publish_kbps));
|
pkt->data->set("publish_kbps", SrsAmf0Any::number(publish_kbps));
|
||||||
pkt->data->set("play_bytes", new SrsAmf0Number(play_bytes));
|
pkt->data->set("play_bytes", SrsAmf0Any::number(play_bytes));
|
||||||
pkt->data->set("play_time", new SrsAmf0Number(play_actual_duration_ms));
|
pkt->data->set("play_time", SrsAmf0Any::number(play_actual_duration_ms));
|
||||||
pkt->data->set("publish_bytes", new SrsAmf0Number(publish_bytes));
|
pkt->data->set("publish_bytes", SrsAmf0Any::number(publish_bytes));
|
||||||
pkt->data->set("publish_time", new SrsAmf0Number(publish_actual_duration_ms));
|
pkt->data->set("publish_time", SrsAmf0Any::number(publish_actual_duration_ms));
|
||||||
|
|
||||||
SrsCommonMessage* msg = (new SrsCommonMessage())->set_packet(pkt, 0);
|
SrsCommonMessage* msg = (new SrsCommonMessage())->set_packet(pkt, 0);
|
||||||
if ((ret = rtmp->send_message(msg)) != ERROR_SUCCESS) {
|
if ((ret = rtmp->send_message(msg)) != ERROR_SUCCESS) {
|
||||||
|
@ -229,8 +229,8 @@ int SrsBandwidth::check_play(
|
||||||
// send start play command to client
|
// send start play command to client
|
||||||
SrsBandwidthPacket* pkt = SrsBandwidthPacket::create_start_play();
|
SrsBandwidthPacket* pkt = SrsBandwidthPacket::create_start_play();
|
||||||
|
|
||||||
pkt->data->set("duration_ms", new SrsAmf0Number(duration_ms));
|
pkt->data->set("duration_ms", SrsAmf0Any::number(duration_ms));
|
||||||
pkt->data->set("interval_ms", new SrsAmf0Number(interval_ms));
|
pkt->data->set("interval_ms", SrsAmf0Any::number(interval_ms));
|
||||||
|
|
||||||
SrsCommonMessage* msg = (new SrsCommonMessage())->set_packet(pkt, 0);
|
SrsCommonMessage* msg = (new SrsCommonMessage())->set_packet(pkt, 0);
|
||||||
if ((ret = rtmp->send_message(msg)) != ERROR_SUCCESS) {
|
if ((ret = rtmp->send_message(msg)) != ERROR_SUCCESS) {
|
||||||
|
@ -308,10 +308,10 @@ int SrsBandwidth::check_play(
|
||||||
if (true) {
|
if (true) {
|
||||||
// notify client to stop play
|
// notify client to stop play
|
||||||
SrsBandwidthPacket* pkt = SrsBandwidthPacket::create_stop_play();
|
SrsBandwidthPacket* pkt = SrsBandwidthPacket::create_stop_play();
|
||||||
pkt->data->set("duration_ms", new SrsAmf0Number(duration_ms));
|
pkt->data->set("duration_ms", SrsAmf0Any::number(duration_ms));
|
||||||
pkt->data->set("interval_ms", new SrsAmf0Number(interval_ms));
|
pkt->data->set("interval_ms", SrsAmf0Any::number(interval_ms));
|
||||||
pkt->data->set("duration_delta", new SrsAmf0Number(actual_duration_ms));
|
pkt->data->set("duration_delta", SrsAmf0Any::number(actual_duration_ms));
|
||||||
pkt->data->set("bytes_delta", new SrsAmf0Number(play_bytes));
|
pkt->data->set("bytes_delta", SrsAmf0Any::number(play_bytes));
|
||||||
|
|
||||||
SrsCommonMessage* msg = (new SrsCommonMessage())->set_packet(pkt, 0);
|
SrsCommonMessage* msg = (new SrsCommonMessage())->set_packet(pkt, 0);
|
||||||
if ((ret = rtmp->send_message(msg)) != ERROR_SUCCESS) {
|
if ((ret = rtmp->send_message(msg)) != ERROR_SUCCESS) {
|
||||||
|
@ -353,8 +353,8 @@ int SrsBandwidth::check_publish(
|
||||||
// notify client to start publish
|
// notify client to start publish
|
||||||
SrsBandwidthPacket* pkt = SrsBandwidthPacket::create_start_publish();
|
SrsBandwidthPacket* pkt = SrsBandwidthPacket::create_start_publish();
|
||||||
|
|
||||||
pkt->data->set("duration_ms", new SrsAmf0Number(duration_ms));
|
pkt->data->set("duration_ms", SrsAmf0Any::number(duration_ms));
|
||||||
pkt->data->set("interval_ms", new SrsAmf0Number(interval_ms));
|
pkt->data->set("interval_ms", SrsAmf0Any::number(interval_ms));
|
||||||
|
|
||||||
SrsCommonMessage* msg = (new SrsCommonMessage())->set_packet(pkt, 0);
|
SrsCommonMessage* msg = (new SrsCommonMessage())->set_packet(pkt, 0);
|
||||||
if ((ret = rtmp->send_message(msg)) != ERROR_SUCCESS) {
|
if ((ret = rtmp->send_message(msg)) != ERROR_SUCCESS) {
|
||||||
|
@ -414,10 +414,10 @@ int SrsBandwidth::check_publish(
|
||||||
if (true) {
|
if (true) {
|
||||||
// notify client to stop publish
|
// notify client to stop publish
|
||||||
SrsBandwidthPacket* pkt = SrsBandwidthPacket::create_stop_publish();
|
SrsBandwidthPacket* pkt = SrsBandwidthPacket::create_stop_publish();
|
||||||
pkt->data->set("duration_ms", new SrsAmf0Number(duration_ms));
|
pkt->data->set("duration_ms", SrsAmf0Any::number(duration_ms));
|
||||||
pkt->data->set("interval_ms", new SrsAmf0Number(interval_ms));
|
pkt->data->set("interval_ms", SrsAmf0Any::number(interval_ms));
|
||||||
pkt->data->set("duration_delta", new SrsAmf0Number(actual_duration_ms));
|
pkt->data->set("duration_delta", SrsAmf0Any::number(actual_duration_ms));
|
||||||
pkt->data->set("bytes_delta", new SrsAmf0Number(publish_bytes));
|
pkt->data->set("bytes_delta", SrsAmf0Any::number(publish_bytes));
|
||||||
|
|
||||||
SrsCommonMessage* msg = (new SrsCommonMessage())->set_packet(pkt, 0);
|
SrsCommonMessage* msg = (new SrsCommonMessage())->set_packet(pkt, 0);
|
||||||
if ((ret = rtmp->send_message(msg)) != ERROR_SUCCESS) {
|
if ((ret = rtmp->send_message(msg)) != ERROR_SUCCESS) {
|
||||||
|
|
|
@ -1221,29 +1221,29 @@ int SrsHls::on_meta_data(SrsAmf0Object* metadata)
|
||||||
SrsAmf0Any* prop = NULL;
|
SrsAmf0Any* prop = NULL;
|
||||||
|
|
||||||
if ((prop = obj->get_property("duration")) != NULL && prop->is_number()) {
|
if ((prop = obj->get_property("duration")) != NULL && prop->is_number()) {
|
||||||
codec->duration = (int)srs_amf0_convert<SrsAmf0Number>(prop)->value;
|
codec->duration = (int)prop->to_number();
|
||||||
}
|
}
|
||||||
if ((prop = obj->get_property("width")) != NULL && prop->is_number()) {
|
if ((prop = obj->get_property("width")) != NULL && prop->is_number()) {
|
||||||
codec->width = (int)srs_amf0_convert<SrsAmf0Number>(prop)->value;
|
codec->width = (int)prop->to_number();
|
||||||
}
|
}
|
||||||
if ((prop = obj->get_property("height")) != NULL && prop->is_number()) {
|
if ((prop = obj->get_property("height")) != NULL && prop->is_number()) {
|
||||||
codec->height = (int)srs_amf0_convert<SrsAmf0Number>(prop)->value;
|
codec->height = (int)prop->to_number();
|
||||||
}
|
}
|
||||||
if ((prop = obj->get_property("framerate")) != NULL && prop->is_number()) {
|
if ((prop = obj->get_property("framerate")) != NULL && prop->is_number()) {
|
||||||
codec->frame_rate = (int)srs_amf0_convert<SrsAmf0Number>(prop)->value;
|
codec->frame_rate = (int)prop->to_number();
|
||||||
}
|
}
|
||||||
if ((prop = obj->get_property("videocodecid")) != NULL && prop->is_number()) {
|
if ((prop = obj->get_property("videocodecid")) != NULL && prop->is_number()) {
|
||||||
codec->video_codec_id = (int)srs_amf0_convert<SrsAmf0Number>(prop)->value;
|
codec->video_codec_id = (int)prop->to_number();
|
||||||
}
|
}
|
||||||
if ((prop = obj->get_property("videodatarate")) != NULL && prop->is_number()) {
|
if ((prop = obj->get_property("videodatarate")) != NULL && prop->is_number()) {
|
||||||
codec->video_data_rate = (int)(1000 * srs_amf0_convert<SrsAmf0Number>(prop)->value);
|
codec->video_data_rate = (int)(1000 * prop->to_number());
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((prop = obj->get_property("audiocodecid")) != NULL && prop->is_number()) {
|
if ((prop = obj->get_property("audiocodecid")) != NULL && prop->is_number()) {
|
||||||
codec->audio_codec_id = (int)srs_amf0_convert<SrsAmf0Number>(prop)->value;
|
codec->audio_codec_id = (int)prop->to_number();
|
||||||
}
|
}
|
||||||
if ((prop = obj->get_property("audiodatarate")) != NULL && prop->is_number()) {
|
if ((prop = obj->get_property("audiodatarate")) != NULL && prop->is_number()) {
|
||||||
codec->audio_data_rate = (int)(1000 * srs_amf0_convert<SrsAmf0Number>(prop)->value);
|
codec->audio_data_rate = (int)(1000 * prop->to_number());
|
||||||
}
|
}
|
||||||
|
|
||||||
// ignore the following, for each flv/rtmp packet contains them:
|
// ignore the following, for each flv/rtmp packet contains them:
|
||||||
|
|
|
@ -645,12 +645,12 @@ int SrsSource::on_meta_data(SrsCommonMessage* msg, SrsOnMetaDataPacket* metadata
|
||||||
SrsAmf0Any* prop = NULL;
|
SrsAmf0Any* prop = NULL;
|
||||||
if ((prop = metadata->metadata->get_property("audiosamplerate")) != NULL) {
|
if ((prop = metadata->metadata->get_property("audiosamplerate")) != NULL) {
|
||||||
if (prop->is_number()) {
|
if (prop->is_number()) {
|
||||||
sample_rate = (int)(srs_amf0_convert<SrsAmf0Number>(prop)->value);
|
sample_rate = (int)prop->to_number();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ((prop = metadata->metadata->get_property("framerate")) != NULL) {
|
if ((prop = metadata->metadata->get_property("framerate")) != NULL) {
|
||||||
if (prop->is_number()) {
|
if (prop->is_number()) {
|
||||||
frame_rate = (int)(srs_amf0_convert<SrsAmf0Number>(prop)->value);
|
frame_rate = (int)prop->to_number();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -56,8 +56,8 @@ using namespace std;
|
||||||
// User defined
|
// User defined
|
||||||
#define RTMP_AMF0_Invalid 0x3F
|
#define RTMP_AMF0_Invalid 0x3F
|
||||||
|
|
||||||
int srs_amf0_read_object_eof(SrsStream* stream, SrsAmf0ObjectEOF*&);
|
int srs_amf0_read_object_eof(SrsStream* stream, __SrsAmf0ObjectEOF*&);
|
||||||
int srs_amf0_write_object_eof(SrsStream* stream, SrsAmf0ObjectEOF*);
|
int srs_amf0_write_object_eof(SrsStream* stream, __SrsAmf0ObjectEOF*);
|
||||||
int srs_amf0_read_any(SrsStream* stream, SrsAmf0Any*& value);
|
int srs_amf0_read_any(SrsStream* stream, SrsAmf0Any*& value);
|
||||||
int srs_amf0_write_any(SrsStream* stream, SrsAmf0Any* value);
|
int srs_amf0_write_any(SrsStream* stream, SrsAmf0Any* value);
|
||||||
|
|
||||||
|
@ -117,6 +117,12 @@ bool SrsAmf0Any::to_boolean()
|
||||||
return o->value;
|
return o->value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
double SrsAmf0Any::to_number()
|
||||||
|
{
|
||||||
|
__SrsAmf0Number* o = srs_amf0_convert<__SrsAmf0Number>(this);
|
||||||
|
return o->value;
|
||||||
|
}
|
||||||
|
|
||||||
bool SrsAmf0Any::is_object_eof()
|
bool SrsAmf0Any::is_object_eof()
|
||||||
{
|
{
|
||||||
return marker == RTMP_AMF0_ObjectEnd;
|
return marker == RTMP_AMF0_ObjectEnd;
|
||||||
|
@ -132,69 +138,26 @@ SrsAmf0Any* SrsAmf0Any::boolean(bool value)
|
||||||
return new __SrsAmf0Boolean(value);
|
return new __SrsAmf0Boolean(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
SrsAmf0Number::SrsAmf0Number(double _value)
|
SrsAmf0Any* SrsAmf0Any::number(double value)
|
||||||
{
|
{
|
||||||
marker = RTMP_AMF0_Number;
|
return new __SrsAmf0Number(value);
|
||||||
value = _value;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
SrsAmf0Number::~SrsAmf0Number()
|
SrsAmf0Any* SrsAmf0Any::null()
|
||||||
|
{
|
||||||
|
return new __SrsAmf0Null();
|
||||||
|
}
|
||||||
|
|
||||||
|
SrsAmf0Any* SrsAmf0Any::undefined()
|
||||||
|
{
|
||||||
|
return new __SrsAmf0Undefined();
|
||||||
|
}
|
||||||
|
|
||||||
|
__SrsUnSortedHashtable::__SrsUnSortedHashtable()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
int SrsAmf0Number::size()
|
__SrsUnSortedHashtable::~__SrsUnSortedHashtable()
|
||||||
{
|
|
||||||
return SrsAmf0Size::number();
|
|
||||||
}
|
|
||||||
|
|
||||||
SrsAmf0Null::SrsAmf0Null()
|
|
||||||
{
|
|
||||||
marker = RTMP_AMF0_Null;
|
|
||||||
}
|
|
||||||
|
|
||||||
SrsAmf0Null::~SrsAmf0Null()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
int SrsAmf0Null::size()
|
|
||||||
{
|
|
||||||
return SrsAmf0Size::null();
|
|
||||||
}
|
|
||||||
|
|
||||||
SrsAmf0Undefined::SrsAmf0Undefined()
|
|
||||||
{
|
|
||||||
marker = RTMP_AMF0_Undefined;
|
|
||||||
}
|
|
||||||
|
|
||||||
SrsAmf0Undefined::~SrsAmf0Undefined()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
int SrsAmf0Undefined::size()
|
|
||||||
{
|
|
||||||
return SrsAmf0Size::undefined();
|
|
||||||
}
|
|
||||||
|
|
||||||
SrsAmf0ObjectEOF::SrsAmf0ObjectEOF()
|
|
||||||
{
|
|
||||||
marker = RTMP_AMF0_ObjectEnd;
|
|
||||||
utf8_empty = 0x00;
|
|
||||||
}
|
|
||||||
|
|
||||||
SrsAmf0ObjectEOF::~SrsAmf0ObjectEOF()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
int SrsAmf0ObjectEOF::size()
|
|
||||||
{
|
|
||||||
return SrsAmf0Size::object_eof();
|
|
||||||
}
|
|
||||||
|
|
||||||
SrsUnSortedHashtable::SrsUnSortedHashtable()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
SrsUnSortedHashtable::~SrsUnSortedHashtable()
|
|
||||||
{
|
{
|
||||||
std::vector<SrsObjectPropertyType>::iterator it;
|
std::vector<SrsObjectPropertyType>::iterator it;
|
||||||
for (it = properties.begin(); it != properties.end(); ++it) {
|
for (it = properties.begin(); it != properties.end(); ++it) {
|
||||||
|
@ -205,31 +168,31 @@ SrsUnSortedHashtable::~SrsUnSortedHashtable()
|
||||||
properties.clear();
|
properties.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
int SrsUnSortedHashtable::size()
|
int __SrsUnSortedHashtable::size()
|
||||||
{
|
{
|
||||||
return (int)properties.size();
|
return (int)properties.size();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SrsUnSortedHashtable::clear()
|
void __SrsUnSortedHashtable::clear()
|
||||||
{
|
{
|
||||||
properties.clear();
|
properties.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string SrsUnSortedHashtable::key_at(int index)
|
std::string __SrsUnSortedHashtable::key_at(int index)
|
||||||
{
|
{
|
||||||
srs_assert(index < size());
|
srs_assert(index < size());
|
||||||
SrsObjectPropertyType& elem = properties[index];
|
SrsObjectPropertyType& elem = properties[index];
|
||||||
return elem.first;
|
return elem.first;
|
||||||
}
|
}
|
||||||
|
|
||||||
SrsAmf0Any* SrsUnSortedHashtable::value_at(int index)
|
SrsAmf0Any* __SrsUnSortedHashtable::value_at(int index)
|
||||||
{
|
{
|
||||||
srs_assert(index < size());
|
srs_assert(index < size());
|
||||||
SrsObjectPropertyType& elem = properties[index];
|
SrsObjectPropertyType& elem = properties[index];
|
||||||
return elem.second;
|
return elem.second;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SrsUnSortedHashtable::set(std::string key, SrsAmf0Any* value)
|
void __SrsUnSortedHashtable::set(std::string key, SrsAmf0Any* value)
|
||||||
{
|
{
|
||||||
std::vector<SrsObjectPropertyType>::iterator it;
|
std::vector<SrsObjectPropertyType>::iterator it;
|
||||||
|
|
||||||
|
@ -248,7 +211,7 @@ void SrsUnSortedHashtable::set(std::string key, SrsAmf0Any* value)
|
||||||
properties.push_back(std::make_pair(key, value));
|
properties.push_back(std::make_pair(key, value));
|
||||||
}
|
}
|
||||||
|
|
||||||
SrsAmf0Any* SrsUnSortedHashtable::get_property(std::string name)
|
SrsAmf0Any* __SrsUnSortedHashtable::get_property(std::string name)
|
||||||
{
|
{
|
||||||
std::vector<SrsObjectPropertyType>::iterator it;
|
std::vector<SrsObjectPropertyType>::iterator it;
|
||||||
|
|
||||||
|
@ -264,7 +227,7 @@ SrsAmf0Any* SrsUnSortedHashtable::get_property(std::string name)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
SrsAmf0Any* SrsUnSortedHashtable::ensure_property_string(std::string name)
|
SrsAmf0Any* __SrsUnSortedHashtable::ensure_property_string(std::string name)
|
||||||
{
|
{
|
||||||
SrsAmf0Any* prop = get_property(name);
|
SrsAmf0Any* prop = get_property(name);
|
||||||
|
|
||||||
|
@ -279,7 +242,7 @@ SrsAmf0Any* SrsUnSortedHashtable::ensure_property_string(std::string name)
|
||||||
return prop;
|
return prop;
|
||||||
}
|
}
|
||||||
|
|
||||||
SrsAmf0Any* SrsUnSortedHashtable::ensure_property_number(std::string name)
|
SrsAmf0Any* __SrsUnSortedHashtable::ensure_property_number(std::string name)
|
||||||
{
|
{
|
||||||
SrsAmf0Any* prop = get_property(name);
|
SrsAmf0Any* prop = get_property(name);
|
||||||
|
|
||||||
|
@ -294,6 +257,21 @@ SrsAmf0Any* SrsUnSortedHashtable::ensure_property_number(std::string name)
|
||||||
return prop;
|
return prop;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
__SrsAmf0ObjectEOF::__SrsAmf0ObjectEOF()
|
||||||
|
{
|
||||||
|
marker = RTMP_AMF0_ObjectEnd;
|
||||||
|
utf8_empty = 0x00;
|
||||||
|
}
|
||||||
|
|
||||||
|
__SrsAmf0ObjectEOF::~__SrsAmf0ObjectEOF()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
int __SrsAmf0ObjectEOF::size()
|
||||||
|
{
|
||||||
|
return SrsAmf0Size::object_eof();
|
||||||
|
}
|
||||||
|
|
||||||
SrsAmf0Object::SrsAmf0Object()
|
SrsAmf0Object::SrsAmf0Object()
|
||||||
{
|
{
|
||||||
marker = RTMP_AMF0_Object;
|
marker = RTMP_AMF0_Object;
|
||||||
|
@ -709,6 +687,49 @@ int __SrsAmf0Boolean::size()
|
||||||
return SrsAmf0Size::boolean();
|
return SrsAmf0Size::boolean();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
__SrsAmf0Number::__SrsAmf0Number(double _value)
|
||||||
|
{
|
||||||
|
marker = RTMP_AMF0_Number;
|
||||||
|
value = _value;
|
||||||
|
}
|
||||||
|
|
||||||
|
__SrsAmf0Number::~__SrsAmf0Number()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
int __SrsAmf0Number::size()
|
||||||
|
{
|
||||||
|
return SrsAmf0Size::number();
|
||||||
|
}
|
||||||
|
|
||||||
|
__SrsAmf0Null::__SrsAmf0Null()
|
||||||
|
{
|
||||||
|
marker = RTMP_AMF0_Null;
|
||||||
|
}
|
||||||
|
|
||||||
|
__SrsAmf0Null::~__SrsAmf0Null()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
int __SrsAmf0Null::size()
|
||||||
|
{
|
||||||
|
return SrsAmf0Size::null();
|
||||||
|
}
|
||||||
|
|
||||||
|
__SrsAmf0Undefined::__SrsAmf0Undefined()
|
||||||
|
{
|
||||||
|
marker = RTMP_AMF0_Undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
__SrsAmf0Undefined::~__SrsAmf0Undefined()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
int __SrsAmf0Undefined::size()
|
||||||
|
{
|
||||||
|
return SrsAmf0Size::undefined();
|
||||||
|
}
|
||||||
|
|
||||||
int srs_amf0_read_utf8(SrsStream* stream, std::string& value)
|
int srs_amf0_read_utf8(SrsStream* stream, std::string& value)
|
||||||
{
|
{
|
||||||
int ret = ERROR_SUCCESS;
|
int ret = ERROR_SUCCESS;
|
||||||
|
@ -1073,22 +1094,21 @@ int srs_amf0_read_any(SrsStream* stream, SrsAmf0Any*& value)
|
||||||
if ((ret = srs_amf0_read_number(stream, data)) != ERROR_SUCCESS) {
|
if ((ret = srs_amf0_read_number(stream, data)) != ERROR_SUCCESS) {
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
value = new SrsAmf0Number();
|
value = SrsAmf0Any::number(data);
|
||||||
srs_amf0_convert<SrsAmf0Number>(value)->value = data;
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
case RTMP_AMF0_Null: {
|
case RTMP_AMF0_Null: {
|
||||||
stream->skip(1);
|
stream->skip(1);
|
||||||
value = new SrsAmf0Null();
|
value = new __SrsAmf0Null();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
case RTMP_AMF0_Undefined: {
|
case RTMP_AMF0_Undefined: {
|
||||||
stream->skip(1);
|
stream->skip(1);
|
||||||
value = new SrsAmf0Undefined();
|
value = new __SrsAmf0Undefined();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
case RTMP_AMF0_ObjectEnd: {
|
case RTMP_AMF0_ObjectEnd: {
|
||||||
SrsAmf0ObjectEOF* p = NULL;
|
__SrsAmf0ObjectEOF* p = NULL;
|
||||||
if ((ret = srs_amf0_read_object_eof(stream, p)) != ERROR_SUCCESS) {
|
if ((ret = srs_amf0_read_object_eof(stream, p)) != ERROR_SUCCESS) {
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -1137,7 +1157,7 @@ int srs_amf0_write_any(SrsStream* stream, SrsAmf0Any* value)
|
||||||
return srs_amf0_write_boolean(stream, data);
|
return srs_amf0_write_boolean(stream, data);
|
||||||
}
|
}
|
||||||
case RTMP_AMF0_Number: {
|
case RTMP_AMF0_Number: {
|
||||||
double data = srs_amf0_convert<SrsAmf0Number>(value)->value;
|
double data = srs_amf0_convert<__SrsAmf0Number>(value)->value;
|
||||||
return srs_amf0_write_number(stream, data);
|
return srs_amf0_write_number(stream, data);
|
||||||
}
|
}
|
||||||
case RTMP_AMF0_Null: {
|
case RTMP_AMF0_Null: {
|
||||||
|
@ -1147,7 +1167,7 @@ int srs_amf0_write_any(SrsStream* stream, SrsAmf0Any* value)
|
||||||
return srs_amf0_write_undefined(stream);
|
return srs_amf0_write_undefined(stream);
|
||||||
}
|
}
|
||||||
case RTMP_AMF0_ObjectEnd: {
|
case RTMP_AMF0_ObjectEnd: {
|
||||||
SrsAmf0ObjectEOF* p = srs_amf0_convert<SrsAmf0ObjectEOF>(value);
|
__SrsAmf0ObjectEOF* p = srs_amf0_convert<__SrsAmf0ObjectEOF>(value);
|
||||||
return srs_amf0_write_object_eof(stream, p);
|
return srs_amf0_write_object_eof(stream, p);
|
||||||
}
|
}
|
||||||
case RTMP_AMF0_Object: {
|
case RTMP_AMF0_Object: {
|
||||||
|
@ -1169,7 +1189,7 @@ int srs_amf0_write_any(SrsStream* stream, SrsAmf0Any* value)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int srs_amf0_read_object_eof(SrsStream* stream, SrsAmf0ObjectEOF*& value)
|
int srs_amf0_read_object_eof(SrsStream* stream, __SrsAmf0ObjectEOF*& value)
|
||||||
{
|
{
|
||||||
int ret = ERROR_SUCCESS;
|
int ret = ERROR_SUCCESS;
|
||||||
|
|
||||||
|
@ -1207,12 +1227,12 @@ int srs_amf0_read_object_eof(SrsStream* stream, SrsAmf0ObjectEOF*& value)
|
||||||
}
|
}
|
||||||
srs_verbose("amf0 read object eof marker success");
|
srs_verbose("amf0 read object eof marker success");
|
||||||
|
|
||||||
value = new SrsAmf0ObjectEOF();
|
value = new __SrsAmf0ObjectEOF();
|
||||||
srs_verbose("amf0 read object eof success");
|
srs_verbose("amf0 read object eof success");
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
int srs_amf0_write_object_eof(SrsStream* stream, SrsAmf0ObjectEOF* value)
|
int srs_amf0_write_object_eof(SrsStream* stream, __SrsAmf0ObjectEOF* value)
|
||||||
{
|
{
|
||||||
int ret = ERROR_SUCCESS;
|
int ret = ERROR_SUCCESS;
|
||||||
|
|
||||||
|
|
|
@ -67,75 +67,22 @@ public:
|
||||||
virtual std::string to_str();
|
virtual std::string to_str();
|
||||||
/**
|
/**
|
||||||
* get the boolean of any when is_boolean() indicates true.
|
* get the boolean of any when is_boolean() indicates true.
|
||||||
* user must ensure the type is a is_boolean, or assert failed.
|
* user must ensure the type is a boolean, or assert failed.
|
||||||
*/
|
*/
|
||||||
virtual bool to_boolean();
|
virtual bool to_boolean();
|
||||||
|
/**
|
||||||
|
* get the number of any when is_number() indicates true.
|
||||||
|
* user must ensure the type is a number, or assert failed.
|
||||||
|
*/
|
||||||
|
virtual double to_number();
|
||||||
public:
|
public:
|
||||||
virtual int size() = 0;
|
virtual int size() = 0;
|
||||||
public:
|
public:
|
||||||
static SrsAmf0Any* str(const char* value = NULL);
|
static SrsAmf0Any* str(const char* value = NULL);
|
||||||
static SrsAmf0Any* boolean(bool value = false);
|
static SrsAmf0Any* boolean(bool value = false);
|
||||||
};
|
static SrsAmf0Any* number(double value = 0.0);
|
||||||
|
static SrsAmf0Any* null();
|
||||||
/**
|
static SrsAmf0Any* undefined();
|
||||||
* read amf0 number from stream.
|
|
||||||
* 2.2 Number Type
|
|
||||||
* number-type = number-marker DOUBLE
|
|
||||||
* @return default value is 0.
|
|
||||||
*/
|
|
||||||
class SrsAmf0Number : public SrsAmf0Any
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
double value;
|
|
||||||
|
|
||||||
SrsAmf0Number(double _value = 0.0);
|
|
||||||
virtual ~SrsAmf0Number();
|
|
||||||
|
|
||||||
virtual int size();
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* read amf0 null from stream.
|
|
||||||
* 2.7 null Type
|
|
||||||
* null-type = null-marker
|
|
||||||
*/
|
|
||||||
class SrsAmf0Null : public SrsAmf0Any
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
SrsAmf0Null();
|
|
||||||
virtual ~SrsAmf0Null();
|
|
||||||
|
|
||||||
virtual int size();
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* read amf0 undefined from stream.
|
|
||||||
* 2.8 undefined Type
|
|
||||||
* undefined-type = undefined-marker
|
|
||||||
*/
|
|
||||||
class SrsAmf0Undefined : public SrsAmf0Any
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
SrsAmf0Undefined();
|
|
||||||
virtual ~SrsAmf0Undefined();
|
|
||||||
|
|
||||||
virtual int size();
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 2.11 Object End Type
|
|
||||||
* object-end-type = UTF-8-empty object-end-marker
|
|
||||||
* 0x00 0x00 0x09
|
|
||||||
*/
|
|
||||||
class SrsAmf0ObjectEOF : public SrsAmf0Any
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
int16_t utf8_empty;
|
|
||||||
|
|
||||||
SrsAmf0ObjectEOF();
|
|
||||||
virtual ~SrsAmf0ObjectEOF();
|
|
||||||
|
|
||||||
virtual int size();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -144,14 +91,14 @@ public:
|
||||||
* if ordered in map, the string compare order, the FMLE will creash when
|
* if ordered in map, the string compare order, the FMLE will creash when
|
||||||
* get the response of connect app.
|
* get the response of connect app.
|
||||||
*/
|
*/
|
||||||
class SrsUnSortedHashtable
|
class __SrsUnSortedHashtable
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
typedef std::pair<std::string, SrsAmf0Any*> SrsObjectPropertyType;
|
typedef std::pair<std::string, SrsAmf0Any*> SrsObjectPropertyType;
|
||||||
std::vector<SrsObjectPropertyType> properties;
|
std::vector<SrsObjectPropertyType> properties;
|
||||||
public:
|
public:
|
||||||
SrsUnSortedHashtable();
|
__SrsUnSortedHashtable();
|
||||||
virtual ~SrsUnSortedHashtable();
|
virtual ~__SrsUnSortedHashtable();
|
||||||
|
|
||||||
virtual int size();
|
virtual int size();
|
||||||
virtual void clear();
|
virtual void clear();
|
||||||
|
@ -164,6 +111,22 @@ public:
|
||||||
virtual SrsAmf0Any* ensure_property_number(std::string name);
|
virtual SrsAmf0Any* ensure_property_number(std::string name);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 2.11 Object End Type
|
||||||
|
* object-end-type = UTF-8-empty object-end-marker
|
||||||
|
* 0x00 0x00 0x09
|
||||||
|
*/
|
||||||
|
class __SrsAmf0ObjectEOF : public SrsAmf0Any
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
int16_t utf8_empty;
|
||||||
|
|
||||||
|
__SrsAmf0ObjectEOF();
|
||||||
|
virtual ~__SrsAmf0ObjectEOF();
|
||||||
|
|
||||||
|
virtual int size();
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 2.5 Object Type
|
* 2.5 Object Type
|
||||||
* anonymous-object-type = object-marker *(object-property)
|
* anonymous-object-type = object-marker *(object-property)
|
||||||
|
@ -172,9 +135,9 @@ public:
|
||||||
class SrsAmf0Object : public SrsAmf0Any
|
class SrsAmf0Object : public SrsAmf0Any
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
SrsUnSortedHashtable properties;
|
__SrsUnSortedHashtable properties;
|
||||||
public:
|
public:
|
||||||
SrsAmf0ObjectEOF eof;
|
__SrsAmf0ObjectEOF eof;
|
||||||
|
|
||||||
SrsAmf0Object();
|
SrsAmf0Object();
|
||||||
virtual ~SrsAmf0Object();
|
virtual ~SrsAmf0Object();
|
||||||
|
@ -201,10 +164,10 @@ public:
|
||||||
class SrsAmf0EcmaArray : public SrsAmf0Any
|
class SrsAmf0EcmaArray : public SrsAmf0Any
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
SrsUnSortedHashtable properties;
|
__SrsUnSortedHashtable properties;
|
||||||
public:
|
public:
|
||||||
int32_t count;
|
int32_t count;
|
||||||
SrsAmf0ObjectEOF eof;
|
__SrsAmf0ObjectEOF eof;
|
||||||
|
|
||||||
SrsAmf0EcmaArray();
|
SrsAmf0EcmaArray();
|
||||||
virtual ~SrsAmf0EcmaArray();
|
virtual ~SrsAmf0EcmaArray();
|
||||||
|
@ -276,6 +239,51 @@ public:
|
||||||
virtual int size();
|
virtual int size();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* read amf0 number from stream.
|
||||||
|
* 2.2 Number Type
|
||||||
|
* number-type = number-marker DOUBLE
|
||||||
|
* @return default value is 0.
|
||||||
|
*/
|
||||||
|
class __SrsAmf0Number : public SrsAmf0Any
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
double value;
|
||||||
|
|
||||||
|
__SrsAmf0Number(double _value);
|
||||||
|
virtual ~__SrsAmf0Number();
|
||||||
|
|
||||||
|
virtual int size();
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* read amf0 null from stream.
|
||||||
|
* 2.7 null Type
|
||||||
|
* null-type = null-marker
|
||||||
|
*/
|
||||||
|
class __SrsAmf0Null : public SrsAmf0Any
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
__SrsAmf0Null();
|
||||||
|
virtual ~__SrsAmf0Null();
|
||||||
|
|
||||||
|
virtual int size();
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* read amf0 undefined from stream.
|
||||||
|
* 2.8 undefined Type
|
||||||
|
* undefined-type = undefined-marker
|
||||||
|
*/
|
||||||
|
class __SrsAmf0Undefined : public SrsAmf0Any
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
__SrsAmf0Undefined();
|
||||||
|
virtual ~__SrsAmf0Undefined();
|
||||||
|
|
||||||
|
virtual int size();
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* read amf0 utf8 string from stream.
|
* read amf0 utf8 string from stream.
|
||||||
* 1.3.1 Strings and UTF-8
|
* 1.3.1 Strings and UTF-8
|
||||||
|
|
|
@ -284,12 +284,12 @@ int SrsRtmpClient::connect_app(string app, string tc_url)
|
||||||
pkt->command_object->set("swfUrl", SrsAmf0Any::str());
|
pkt->command_object->set("swfUrl", SrsAmf0Any::str());
|
||||||
pkt->command_object->set("tcUrl", SrsAmf0Any::str(tc_url.c_str()));
|
pkt->command_object->set("tcUrl", SrsAmf0Any::str(tc_url.c_str()));
|
||||||
pkt->command_object->set("fpad", SrsAmf0Any::boolean(false));
|
pkt->command_object->set("fpad", SrsAmf0Any::boolean(false));
|
||||||
pkt->command_object->set("capabilities", new SrsAmf0Number(239));
|
pkt->command_object->set("capabilities", SrsAmf0Any::number(239));
|
||||||
pkt->command_object->set("audioCodecs", new SrsAmf0Number(3575));
|
pkt->command_object->set("audioCodecs", SrsAmf0Any::number(3575));
|
||||||
pkt->command_object->set("videoCodecs", new SrsAmf0Number(252));
|
pkt->command_object->set("videoCodecs", SrsAmf0Any::number(252));
|
||||||
pkt->command_object->set("videoFunction", new SrsAmf0Number(1));
|
pkt->command_object->set("videoFunction", SrsAmf0Any::number(1));
|
||||||
pkt->command_object->set("pageUrl", SrsAmf0Any::str());
|
pkt->command_object->set("pageUrl", SrsAmf0Any::str());
|
||||||
pkt->command_object->set("objectEncoding", new SrsAmf0Number(0));
|
pkt->command_object->set("objectEncoding", SrsAmf0Any::number(0));
|
||||||
|
|
||||||
if ((ret = protocol->send_message(msg)) != ERROR_SUCCESS) {
|
if ((ret = protocol->send_message(msg)) != ERROR_SUCCESS) {
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -643,7 +643,7 @@ int SrsRtmpServer::connect_app(SrsRequest* req)
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((prop = pkt->command_object->ensure_property_number("objectEncoding")) != NULL) {
|
if ((prop = pkt->command_object->ensure_property_number("objectEncoding")) != NULL) {
|
||||||
req->objectEncoding = srs_amf0_convert<SrsAmf0Number>(prop)->value;
|
req->objectEncoding = prop->to_number();
|
||||||
}
|
}
|
||||||
|
|
||||||
srs_info("get connect app message params success.");
|
srs_info("get connect app message params success.");
|
||||||
|
@ -699,13 +699,13 @@ int SrsRtmpServer::response_connect_app(SrsRequest *req, const char* server_ip)
|
||||||
SrsConnectAppResPacket* pkt = new SrsConnectAppResPacket();
|
SrsConnectAppResPacket* pkt = new SrsConnectAppResPacket();
|
||||||
|
|
||||||
pkt->props->set("fmsVer", SrsAmf0Any::str("FMS/"RTMP_SIG_FMS_VER));
|
pkt->props->set("fmsVer", SrsAmf0Any::str("FMS/"RTMP_SIG_FMS_VER));
|
||||||
pkt->props->set("capabilities", new SrsAmf0Number(127));
|
pkt->props->set("capabilities", SrsAmf0Any::number(127));
|
||||||
pkt->props->set("mode", new SrsAmf0Number(1));
|
pkt->props->set("mode", SrsAmf0Any::number(1));
|
||||||
|
|
||||||
pkt->info->set(StatusLevel, SrsAmf0Any::str(StatusLevelStatus));
|
pkt->info->set(StatusLevel, SrsAmf0Any::str(StatusLevelStatus));
|
||||||
pkt->info->set(StatusCode, SrsAmf0Any::str(StatusCodeConnectSuccess));
|
pkt->info->set(StatusCode, SrsAmf0Any::str(StatusCodeConnectSuccess));
|
||||||
pkt->info->set(StatusDescription, SrsAmf0Any::str("Connection succeeded"));
|
pkt->info->set(StatusDescription, SrsAmf0Any::str("Connection succeeded"));
|
||||||
pkt->info->set("objectEncoding", new SrsAmf0Number(req->objectEncoding));
|
pkt->info->set("objectEncoding", SrsAmf0Any::number(req->objectEncoding));
|
||||||
SrsAmf0EcmaArray* data = new SrsAmf0EcmaArray();
|
SrsAmf0EcmaArray* data = new SrsAmf0EcmaArray();
|
||||||
pkt->info->set("data", data);
|
pkt->info->set("data", data);
|
||||||
|
|
||||||
|
@ -745,7 +745,7 @@ void SrsRtmpServer::response_connect_reject(SrsRequest *req, const char* desc)
|
||||||
pkt->props->set(StatusLevel, SrsAmf0Any::str(StatusLevelError));
|
pkt->props->set(StatusLevel, SrsAmf0Any::str(StatusLevelError));
|
||||||
pkt->props->set(StatusCode, SrsAmf0Any::str(StatusCodeConnectRejected));
|
pkt->props->set(StatusCode, SrsAmf0Any::str(StatusCodeConnectRejected));
|
||||||
pkt->props->set(StatusDescription, SrsAmf0Any::str(desc));
|
pkt->props->set(StatusDescription, SrsAmf0Any::str(desc));
|
||||||
//pkt->props->set("objectEncoding", new SrsAmf0Number(req->objectEncoding));
|
//pkt->props->set("objectEncoding", SrsAmf0Any::number(req->objectEncoding));
|
||||||
|
|
||||||
SrsCommonMessage* msg = (new SrsCommonMessage())->set_packet(pkt, 0);
|
SrsCommonMessage* msg = (new SrsCommonMessage())->set_packet(pkt, 0);
|
||||||
if ((ret = protocol->send_message(msg)) != ERROR_SUCCESS) {
|
if ((ret = protocol->send_message(msg)) != ERROR_SUCCESS) {
|
||||||
|
|
|
@ -1957,7 +1957,7 @@ SrsCreateStreamPacket::SrsCreateStreamPacket()
|
||||||
{
|
{
|
||||||
command_name = RTMP_AMF0_COMMAND_CREATE_STREAM;
|
command_name = RTMP_AMF0_COMMAND_CREATE_STREAM;
|
||||||
transaction_id = 2;
|
transaction_id = 2;
|
||||||
command_object = new SrsAmf0Null();
|
command_object = SrsAmf0Any::null();
|
||||||
}
|
}
|
||||||
|
|
||||||
SrsCreateStreamPacket::~SrsCreateStreamPacket()
|
SrsCreateStreamPacket::~SrsCreateStreamPacket()
|
||||||
|
@ -2042,7 +2042,7 @@ SrsCreateStreamResPacket::SrsCreateStreamResPacket(double _transaction_id, doubl
|
||||||
{
|
{
|
||||||
command_name = RTMP_AMF0_COMMAND_RESULT;
|
command_name = RTMP_AMF0_COMMAND_RESULT;
|
||||||
transaction_id = _transaction_id;
|
transaction_id = _transaction_id;
|
||||||
command_object = new SrsAmf0Null();
|
command_object = SrsAmf0Any::null();
|
||||||
stream_id = _stream_id;
|
stream_id = _stream_id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2140,7 +2140,7 @@ SrsCloseStreamPacket::SrsCloseStreamPacket()
|
||||||
{
|
{
|
||||||
command_name = RTMP_AMF0_COMMAND_CLOSE_STREAM;
|
command_name = RTMP_AMF0_COMMAND_CLOSE_STREAM;
|
||||||
transaction_id = 0;
|
transaction_id = 0;
|
||||||
command_object = new SrsAmf0Null();
|
command_object = SrsAmf0Any::null();
|
||||||
}
|
}
|
||||||
|
|
||||||
SrsCloseStreamPacket::~SrsCloseStreamPacket()
|
SrsCloseStreamPacket::~SrsCloseStreamPacket()
|
||||||
|
@ -2175,7 +2175,7 @@ SrsFMLEStartPacket::SrsFMLEStartPacket()
|
||||||
{
|
{
|
||||||
command_name = RTMP_AMF0_COMMAND_RELEASE_STREAM;
|
command_name = RTMP_AMF0_COMMAND_RELEASE_STREAM;
|
||||||
transaction_id = 0;
|
transaction_id = 0;
|
||||||
command_object = new SrsAmf0Null();
|
command_object = SrsAmf0Any::null();
|
||||||
}
|
}
|
||||||
|
|
||||||
SrsFMLEStartPacket::~SrsFMLEStartPacket()
|
SrsFMLEStartPacket::~SrsFMLEStartPacket()
|
||||||
|
@ -2298,8 +2298,8 @@ SrsFMLEStartResPacket::SrsFMLEStartResPacket(double _transaction_id)
|
||||||
{
|
{
|
||||||
command_name = RTMP_AMF0_COMMAND_RESULT;
|
command_name = RTMP_AMF0_COMMAND_RESULT;
|
||||||
transaction_id = _transaction_id;
|
transaction_id = _transaction_id;
|
||||||
command_object = new SrsAmf0Null();
|
command_object = SrsAmf0Any::null();
|
||||||
args = new SrsAmf0Undefined();
|
args = SrsAmf0Any::undefined();
|
||||||
}
|
}
|
||||||
|
|
||||||
SrsFMLEStartResPacket::~SrsFMLEStartResPacket()
|
SrsFMLEStartResPacket::~SrsFMLEStartResPacket()
|
||||||
|
@ -2397,7 +2397,7 @@ SrsPublishPacket::SrsPublishPacket()
|
||||||
{
|
{
|
||||||
command_name = RTMP_AMF0_COMMAND_PUBLISH;
|
command_name = RTMP_AMF0_COMMAND_PUBLISH;
|
||||||
transaction_id = 0;
|
transaction_id = 0;
|
||||||
command_object = new SrsAmf0Null();
|
command_object = SrsAmf0Any::null();
|
||||||
type = "live";
|
type = "live";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2506,7 +2506,7 @@ SrsPausePacket::SrsPausePacket()
|
||||||
{
|
{
|
||||||
command_name = RTMP_AMF0_COMMAND_PAUSE;
|
command_name = RTMP_AMF0_COMMAND_PAUSE;
|
||||||
transaction_id = 0;
|
transaction_id = 0;
|
||||||
command_object = new SrsAmf0Null();
|
command_object = SrsAmf0Any::null();
|
||||||
|
|
||||||
time_ms = 0;
|
time_ms = 0;
|
||||||
is_pause = true;
|
is_pause = true;
|
||||||
|
@ -2561,7 +2561,7 @@ SrsPlayPacket::SrsPlayPacket()
|
||||||
{
|
{
|
||||||
command_name = RTMP_AMF0_COMMAND_PLAY;
|
command_name = RTMP_AMF0_COMMAND_PLAY;
|
||||||
transaction_id = 0;
|
transaction_id = 0;
|
||||||
command_object = new SrsAmf0Null();
|
command_object = SrsAmf0Any::null();
|
||||||
|
|
||||||
start = -2;
|
start = -2;
|
||||||
duration = -1;
|
duration = -1;
|
||||||
|
@ -2630,7 +2630,7 @@ int SrsPlayPacket::decode(SrsStream* stream)
|
||||||
if (reset_value->is_boolean()) {
|
if (reset_value->is_boolean()) {
|
||||||
reset = reset_value->to_boolean();
|
reset = reset_value->to_boolean();
|
||||||
} else if (reset_value->is_number()) {
|
} else if (reset_value->is_number()) {
|
||||||
reset = (srs_amf0_convert<SrsAmf0Number>(reset_value)->value == 0 ? false : true);
|
reset = (reset_value->to_number() == 0 ? false : true);
|
||||||
} else {
|
} else {
|
||||||
ret = ERROR_RTMP_AMF0_DECODE;
|
ret = ERROR_RTMP_AMF0_DECODE;
|
||||||
srs_error("amf0 invalid type=%#x, requires number or bool, ret=%d", reset_value->marker, ret);
|
srs_error("amf0 invalid type=%#x, requires number or bool, ret=%d", reset_value->marker, ret);
|
||||||
|
@ -2715,7 +2715,7 @@ SrsPlayResPacket::SrsPlayResPacket()
|
||||||
{
|
{
|
||||||
command_name = RTMP_AMF0_COMMAND_RESULT;
|
command_name = RTMP_AMF0_COMMAND_RESULT;
|
||||||
transaction_id = 0;
|
transaction_id = 0;
|
||||||
command_object = new SrsAmf0Null();
|
command_object = SrsAmf0Any::null();
|
||||||
desc = new SrsAmf0Object();
|
desc = new SrsAmf0Object();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2779,7 +2779,7 @@ SrsOnBWDonePacket::SrsOnBWDonePacket()
|
||||||
{
|
{
|
||||||
command_name = RTMP_AMF0_COMMAND_ON_BW_DONE;
|
command_name = RTMP_AMF0_COMMAND_ON_BW_DONE;
|
||||||
transaction_id = 0;
|
transaction_id = 0;
|
||||||
args = new SrsAmf0Null();
|
args = SrsAmf0Any::null();
|
||||||
}
|
}
|
||||||
|
|
||||||
SrsOnBWDonePacket::~SrsOnBWDonePacket()
|
SrsOnBWDonePacket::~SrsOnBWDonePacket()
|
||||||
|
@ -2834,7 +2834,7 @@ SrsOnStatusCallPacket::SrsOnStatusCallPacket()
|
||||||
{
|
{
|
||||||
command_name = RTMP_AMF0_COMMAND_ON_STATUS;
|
command_name = RTMP_AMF0_COMMAND_ON_STATUS;
|
||||||
transaction_id = 0;
|
transaction_id = 0;
|
||||||
args = new SrsAmf0Null();
|
args = SrsAmf0Any::null();
|
||||||
data = new SrsAmf0Object();
|
data = new SrsAmf0Object();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2897,7 +2897,7 @@ SrsBandwidthPacket::SrsBandwidthPacket()
|
||||||
{
|
{
|
||||||
command_name = RTMP_AMF0_COMMAND_ON_STATUS;
|
command_name = RTMP_AMF0_COMMAND_ON_STATUS;
|
||||||
transaction_id = 0;
|
transaction_id = 0;
|
||||||
args = new SrsAmf0Null();
|
args = SrsAmf0Any::null();
|
||||||
data = new SrsAmf0Object();
|
data = new SrsAmf0Object();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -86,8 +86,7 @@ class SrsStream;
|
||||||
class SrsCommonMessage;
|
class SrsCommonMessage;
|
||||||
class SrsChunkStream;
|
class SrsChunkStream;
|
||||||
class SrsAmf0Object;
|
class SrsAmf0Object;
|
||||||
class SrsAmf0Null;
|
class SrsAmf0Any;
|
||||||
class SrsAmf0Undefined;
|
|
||||||
class ISrsMessage;
|
class ISrsMessage;
|
||||||
|
|
||||||
// convert class name to string.
|
// convert class name to string.
|
||||||
|
@ -600,7 +599,7 @@ protected:
|
||||||
public:
|
public:
|
||||||
std::string command_name;
|
std::string command_name;
|
||||||
double transaction_id;
|
double transaction_id;
|
||||||
SrsAmf0Null* command_object;
|
SrsAmf0Any* command_object; // null
|
||||||
public:
|
public:
|
||||||
SrsCreateStreamPacket();
|
SrsCreateStreamPacket();
|
||||||
virtual ~SrsCreateStreamPacket();
|
virtual ~SrsCreateStreamPacket();
|
||||||
|
@ -629,7 +628,7 @@ protected:
|
||||||
public:
|
public:
|
||||||
std::string command_name;
|
std::string command_name;
|
||||||
double transaction_id;
|
double transaction_id;
|
||||||
SrsAmf0Null* command_object;
|
SrsAmf0Any* command_object; // null
|
||||||
double stream_id;
|
double stream_id;
|
||||||
public:
|
public:
|
||||||
SrsCreateStreamResPacket(double _transaction_id, double _stream_id);
|
SrsCreateStreamResPacket(double _transaction_id, double _stream_id);
|
||||||
|
@ -659,7 +658,7 @@ protected:
|
||||||
public:
|
public:
|
||||||
std::string command_name;
|
std::string command_name;
|
||||||
double transaction_id;
|
double transaction_id;
|
||||||
SrsAmf0Null* command_object;
|
SrsAmf0Any* command_object; // null
|
||||||
public:
|
public:
|
||||||
SrsCloseStreamPacket();
|
SrsCloseStreamPacket();
|
||||||
virtual ~SrsCloseStreamPacket();
|
virtual ~SrsCloseStreamPacket();
|
||||||
|
@ -682,7 +681,7 @@ protected:
|
||||||
public:
|
public:
|
||||||
std::string command_name;
|
std::string command_name;
|
||||||
double transaction_id;
|
double transaction_id;
|
||||||
SrsAmf0Null* command_object;
|
SrsAmf0Any* command_object; // null
|
||||||
std::string stream_name;
|
std::string stream_name;
|
||||||
public:
|
public:
|
||||||
SrsFMLEStartPacket();
|
SrsFMLEStartPacket();
|
||||||
|
@ -715,8 +714,8 @@ protected:
|
||||||
public:
|
public:
|
||||||
std::string command_name;
|
std::string command_name;
|
||||||
double transaction_id;
|
double transaction_id;
|
||||||
SrsAmf0Null* command_object;
|
SrsAmf0Any* command_object; // null
|
||||||
SrsAmf0Undefined* args;
|
SrsAmf0Any* args; // undefined
|
||||||
public:
|
public:
|
||||||
SrsFMLEStartResPacket(double _transaction_id);
|
SrsFMLEStartResPacket(double _transaction_id);
|
||||||
virtual ~SrsFMLEStartResPacket();
|
virtual ~SrsFMLEStartResPacket();
|
||||||
|
@ -750,7 +749,7 @@ protected:
|
||||||
public:
|
public:
|
||||||
std::string command_name;
|
std::string command_name;
|
||||||
double transaction_id;
|
double transaction_id;
|
||||||
SrsAmf0Null* command_object;
|
SrsAmf0Any* command_object; // null
|
||||||
std::string stream_name;
|
std::string stream_name;
|
||||||
// optional, default to live.
|
// optional, default to live.
|
||||||
std::string type;
|
std::string type;
|
||||||
|
@ -785,7 +784,7 @@ protected:
|
||||||
public:
|
public:
|
||||||
std::string command_name;
|
std::string command_name;
|
||||||
double transaction_id;
|
double transaction_id;
|
||||||
SrsAmf0Null* command_object;
|
SrsAmf0Any* command_object; // null
|
||||||
bool is_pause;
|
bool is_pause;
|
||||||
double time_ms;
|
double time_ms;
|
||||||
public:
|
public:
|
||||||
|
@ -811,7 +810,7 @@ protected:
|
||||||
public:
|
public:
|
||||||
std::string command_name;
|
std::string command_name;
|
||||||
double transaction_id;
|
double transaction_id;
|
||||||
SrsAmf0Null* command_object;
|
SrsAmf0Any* command_object; // null
|
||||||
std::string stream_name;
|
std::string stream_name;
|
||||||
double start;
|
double start;
|
||||||
double duration;
|
double duration;
|
||||||
|
@ -845,7 +844,7 @@ protected:
|
||||||
public:
|
public:
|
||||||
std::string command_name;
|
std::string command_name;
|
||||||
double transaction_id;
|
double transaction_id;
|
||||||
SrsAmf0Null* command_object;
|
SrsAmf0Any* command_object; // null
|
||||||
SrsAmf0Object* desc;
|
SrsAmf0Object* desc;
|
||||||
public:
|
public:
|
||||||
SrsPlayResPacket();
|
SrsPlayResPacket();
|
||||||
|
@ -874,7 +873,7 @@ protected:
|
||||||
public:
|
public:
|
||||||
std::string command_name;
|
std::string command_name;
|
||||||
double transaction_id;
|
double transaction_id;
|
||||||
SrsAmf0Null* args;
|
SrsAmf0Any* args; // null
|
||||||
public:
|
public:
|
||||||
SrsOnBWDonePacket();
|
SrsOnBWDonePacket();
|
||||||
virtual ~SrsOnBWDonePacket();
|
virtual ~SrsOnBWDonePacket();
|
||||||
|
@ -903,7 +902,7 @@ protected:
|
||||||
public:
|
public:
|
||||||
std::string command_name;
|
std::string command_name;
|
||||||
double transaction_id;
|
double transaction_id;
|
||||||
SrsAmf0Null* args;
|
SrsAmf0Any* args; // null
|
||||||
SrsAmf0Object* data;
|
SrsAmf0Object* data;
|
||||||
public:
|
public:
|
||||||
SrsOnStatusCallPacket();
|
SrsOnStatusCallPacket();
|
||||||
|
@ -936,7 +935,7 @@ protected:
|
||||||
public:
|
public:
|
||||||
std::string command_name;
|
std::string command_name;
|
||||||
double transaction_id;
|
double transaction_id;
|
||||||
SrsAmf0Null* args;
|
SrsAmf0Any* args; // null
|
||||||
SrsAmf0Object* data;
|
SrsAmf0Object* data;
|
||||||
public:
|
public:
|
||||||
SrsBandwidthPacket();
|
SrsBandwidthPacket();
|
||||||
|
|
|
@ -63,7 +63,7 @@ VOID TEST(AMF0Test, Size)
|
||||||
SrsAmf0Object o;
|
SrsAmf0Object o;
|
||||||
|
|
||||||
size += SrsAmf0Size::utf8("age")+SrsAmf0Size::number();
|
size += SrsAmf0Size::utf8("age")+SrsAmf0Size::number();
|
||||||
o.set("age", new SrsAmf0Number(9));
|
o.set("age", SrsAmf0Any::number(9));
|
||||||
|
|
||||||
EXPECT_EQ(size, SrsAmf0Size::object(&o));
|
EXPECT_EQ(size, SrsAmf0Size::object(&o));
|
||||||
}
|
}
|
||||||
|
@ -72,7 +72,7 @@ VOID TEST(AMF0Test, Size)
|
||||||
SrsAmf0Object o;
|
SrsAmf0Object o;
|
||||||
|
|
||||||
size += SrsAmf0Size::utf8("email")+SrsAmf0Size::null();
|
size += SrsAmf0Size::utf8("email")+SrsAmf0Size::null();
|
||||||
o.set("email", new SrsAmf0Null());
|
o.set("email", SrsAmf0Any::null());
|
||||||
|
|
||||||
EXPECT_EQ(size, SrsAmf0Size::object(&o));
|
EXPECT_EQ(size, SrsAmf0Size::object(&o));
|
||||||
}
|
}
|
||||||
|
@ -81,7 +81,7 @@ VOID TEST(AMF0Test, Size)
|
||||||
SrsAmf0Object o;
|
SrsAmf0Object o;
|
||||||
|
|
||||||
size += SrsAmf0Size::utf8("email")+SrsAmf0Size::undefined();
|
size += SrsAmf0Size::utf8("email")+SrsAmf0Size::undefined();
|
||||||
o.set("email", new SrsAmf0Undefined());
|
o.set("email", SrsAmf0Any::undefined());
|
||||||
|
|
||||||
EXPECT_EQ(size, SrsAmf0Size::object(&o));
|
EXPECT_EQ(size, SrsAmf0Size::object(&o));
|
||||||
}
|
}
|
||||||
|
@ -117,7 +117,7 @@ VOID TEST(AMF0Test, Size)
|
||||||
SrsAmf0EcmaArray o;
|
SrsAmf0EcmaArray o;
|
||||||
|
|
||||||
size += SrsAmf0Size::utf8("age")+SrsAmf0Size::number();
|
size += SrsAmf0Size::utf8("age")+SrsAmf0Size::number();
|
||||||
o.set("age", new SrsAmf0Number(9));
|
o.set("age", SrsAmf0Any::number(9));
|
||||||
|
|
||||||
EXPECT_EQ(size, SrsAmf0Size::array(&o));
|
EXPECT_EQ(size, SrsAmf0Size::array(&o));
|
||||||
}
|
}
|
||||||
|
@ -126,7 +126,7 @@ VOID TEST(AMF0Test, Size)
|
||||||
SrsAmf0EcmaArray o;
|
SrsAmf0EcmaArray o;
|
||||||
|
|
||||||
size += SrsAmf0Size::utf8("email")+SrsAmf0Size::null();
|
size += SrsAmf0Size::utf8("email")+SrsAmf0Size::null();
|
||||||
o.set("email", new SrsAmf0Null());
|
o.set("email", SrsAmf0Any::null());
|
||||||
|
|
||||||
EXPECT_EQ(size, SrsAmf0Size::array(&o));
|
EXPECT_EQ(size, SrsAmf0Size::array(&o));
|
||||||
}
|
}
|
||||||
|
@ -135,7 +135,7 @@ VOID TEST(AMF0Test, Size)
|
||||||
SrsAmf0EcmaArray o;
|
SrsAmf0EcmaArray o;
|
||||||
|
|
||||||
size += SrsAmf0Size::utf8("email")+SrsAmf0Size::undefined();
|
size += SrsAmf0Size::utf8("email")+SrsAmf0Size::undefined();
|
||||||
o.set("email", new SrsAmf0Undefined());
|
o.set("email", SrsAmf0Any::undefined());
|
||||||
|
|
||||||
EXPECT_EQ(size, SrsAmf0Size::array(&o));
|
EXPECT_EQ(size, SrsAmf0Size::array(&o));
|
||||||
}
|
}
|
||||||
|
@ -177,7 +177,7 @@ VOID TEST(AMF0Test, Size)
|
||||||
o.set("args", args);
|
o.set("args", args);
|
||||||
|
|
||||||
SrsAmf0EcmaArray* params = new SrsAmf0EcmaArray();
|
SrsAmf0EcmaArray* params = new SrsAmf0EcmaArray();
|
||||||
params->set("p1", new SrsAmf0Number(10));
|
params->set("p1", SrsAmf0Any::number(10));
|
||||||
size += SrsAmf0Size::utf8("params")+SrsAmf0Size::array(params);
|
size += SrsAmf0Size::utf8("params")+SrsAmf0Size::array(params);
|
||||||
o.set("params", params);
|
o.set("params", params);
|
||||||
|
|
||||||
|
@ -212,7 +212,7 @@ VOID TEST(AMF0Test, Size)
|
||||||
o.set("args", args);
|
o.set("args", args);
|
||||||
|
|
||||||
SrsAmf0Object* params = new SrsAmf0Object();
|
SrsAmf0Object* params = new SrsAmf0Object();
|
||||||
params->set("p1", new SrsAmf0Number(10));
|
params->set("p1", SrsAmf0Any::number(10));
|
||||||
size += SrsAmf0Size::utf8("params")+SrsAmf0Size::object(params);
|
size += SrsAmf0Size::utf8("params")+SrsAmf0Size::object(params);
|
||||||
o.set("params", params);
|
o.set("params", params);
|
||||||
|
|
||||||
|
@ -233,7 +233,7 @@ VOID TEST(AMF0Test, Size)
|
||||||
o.set("args", args);
|
o.set("args", args);
|
||||||
|
|
||||||
SrsAmf0Object* params = new SrsAmf0Object();
|
SrsAmf0Object* params = new SrsAmf0Object();
|
||||||
params->set("p1", new SrsAmf0Number(10));
|
params->set("p1", SrsAmf0Any::number(10));
|
||||||
size += SrsAmf0Size::utf8("params")+SrsAmf0Size::object(params);
|
size += SrsAmf0Size::utf8("params")+SrsAmf0Size::object(params);
|
||||||
o.set("params", params);
|
o.set("params", params);
|
||||||
|
|
||||||
|
@ -254,7 +254,7 @@ VOID TEST(AMF0Test, Size)
|
||||||
o.set("args", args);
|
o.set("args", args);
|
||||||
|
|
||||||
SrsAmf0EcmaArray* params = new SrsAmf0EcmaArray();
|
SrsAmf0EcmaArray* params = new SrsAmf0EcmaArray();
|
||||||
params->set("p1", new SrsAmf0Number(10));
|
params->set("p1", SrsAmf0Any::number(10));
|
||||||
size += SrsAmf0Size::utf8("params")+SrsAmf0Size::array(params);
|
size += SrsAmf0Size::utf8("params")+SrsAmf0Size::array(params);
|
||||||
o.set("params", params);
|
o.set("params", params);
|
||||||
|
|
||||||
|
@ -304,4 +304,43 @@ VOID TEST(AMF0Test, AnyElem)
|
||||||
EXPECT_TRUE(o->is_boolean());
|
EXPECT_TRUE(o->is_boolean());
|
||||||
EXPECT_TRUE(o->to_boolean());
|
EXPECT_TRUE(o->to_boolean());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// number
|
||||||
|
if (true) {
|
||||||
|
o = SrsAmf0Any::number();
|
||||||
|
SrsAutoFree(SrsAmf0Any, o, false);
|
||||||
|
EXPECT_TRUE(NULL != o);
|
||||||
|
EXPECT_TRUE(o->is_number());
|
||||||
|
EXPECT_DOUBLE_EQ(0, o->to_number());
|
||||||
|
}
|
||||||
|
if (true) {
|
||||||
|
o = SrsAmf0Any::number(100);
|
||||||
|
SrsAutoFree(SrsAmf0Any, o, false);
|
||||||
|
EXPECT_TRUE(NULL != o);
|
||||||
|
EXPECT_TRUE(o->is_number());
|
||||||
|
EXPECT_DOUBLE_EQ(100, o->to_number());
|
||||||
|
}
|
||||||
|
if (true) {
|
||||||
|
o = SrsAmf0Any::number(-100);
|
||||||
|
SrsAutoFree(SrsAmf0Any, o, false);
|
||||||
|
EXPECT_TRUE(NULL != o);
|
||||||
|
EXPECT_TRUE(o->is_number());
|
||||||
|
EXPECT_DOUBLE_EQ(-100, o->to_number());
|
||||||
|
}
|
||||||
|
|
||||||
|
// null
|
||||||
|
if (true) {
|
||||||
|
o = SrsAmf0Any::null();
|
||||||
|
SrsAutoFree(SrsAmf0Any, o, false);
|
||||||
|
EXPECT_TRUE(NULL != o);
|
||||||
|
EXPECT_TRUE(o->is_null());
|
||||||
|
}
|
||||||
|
|
||||||
|
// undefined
|
||||||
|
if (true) {
|
||||||
|
o = SrsAmf0Any::undefined();
|
||||||
|
SrsAutoFree(SrsAmf0Any, o, false);
|
||||||
|
EXPECT_TRUE(NULL != o);
|
||||||
|
EXPECT_TRUE(o->is_undefined());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue