正在显示
11 个修改的文件
包含
152 行增加
和
20 行删除
| @@ -259,13 +259,35 @@ int SrsFlvSegment::write_metadata(SrsSharedPtrMessage* metadata) | @@ -259,13 +259,35 @@ int SrsFlvSegment::write_metadata(SrsSharedPtrMessage* metadata) | ||
| 259 | } | 259 | } |
| 260 | 260 | ||
| 261 | // to flv file. | 261 | // to flv file. |
| 262 | - if ((ret = enc->write_metadata(18, payload, size)) != ERROR_SUCCESS) { | 262 | + if ((ret = enc->write_metadata(0, payload, size)) != ERROR_SUCCESS) { |
| 263 | return ret; | 263 | return ret; |
| 264 | } | 264 | } |
| 265 | 265 | ||
| 266 | return ret; | 266 | return ret; |
| 267 | } | 267 | } |
| 268 | 268 | ||
| 269 | +int SrsFlvSegment::write_data(SrsSharedPtrMessage* shared_data) | ||
| 270 | +{ | ||
| 271 | + int ret = ERROR_SUCCESS; | ||
| 272 | + | ||
| 273 | + SrsSharedPtrMessage* data = shared_data->copy(); | ||
| 274 | + SrsAutoFree(SrsSharedPtrMessage, data); | ||
| 275 | + | ||
| 276 | + if ((jitter->correct(data, jitter_algorithm)) != ERROR_SUCCESS) { | ||
| 277 | + return ret; | ||
| 278 | + } | ||
| 279 | + | ||
| 280 | + char* payload = data->payload; | ||
| 281 | + int size = data->size; | ||
| 282 | + int64_t timestamp = plan->filter_timestamp(data->timestamp); | ||
| 283 | + if ((ret = enc->write_metadata( timestamp , payload, size)) != ERROR_SUCCESS) { | ||
| 284 | + return ret; | ||
| 285 | + } | ||
| 286 | + | ||
| 287 | + | ||
| 288 | + return ret; | ||
| 289 | +} | ||
| 290 | + | ||
| 269 | int SrsFlvSegment::write_audio(SrsSharedPtrMessage* shared_audio) | 291 | int SrsFlvSegment::write_audio(SrsSharedPtrMessage* shared_audio) |
| 270 | { | 292 | { |
| 271 | int ret = ERROR_SUCCESS; | 293 | int ret = ERROR_SUCCESS; |
| @@ -291,6 +313,8 @@ int SrsFlvSegment::write_audio(SrsSharedPtrMessage* shared_audio) | @@ -291,6 +313,8 @@ int SrsFlvSegment::write_audio(SrsSharedPtrMessage* shared_audio) | ||
| 291 | return ret; | 313 | return ret; |
| 292 | } | 314 | } |
| 293 | 315 | ||
| 316 | + | ||
| 317 | + | ||
| 294 | int SrsFlvSegment::write_video(SrsSharedPtrMessage* shared_video) | 318 | int SrsFlvSegment::write_video(SrsSharedPtrMessage* shared_video) |
| 295 | { | 319 | { |
| 296 | int ret = ERROR_SUCCESS; | 320 | int ret = ERROR_SUCCESS; |
| @@ -601,6 +625,17 @@ int SrsDvrPlan::on_meta_data(SrsSharedPtrMessage* shared_metadata) | @@ -601,6 +625,17 @@ int SrsDvrPlan::on_meta_data(SrsSharedPtrMessage* shared_metadata) | ||
| 601 | return segment->write_metadata(shared_metadata); | 625 | return segment->write_metadata(shared_metadata); |
| 602 | } | 626 | } |
| 603 | 627 | ||
| 628 | +int SrsDvrPlan::on_data(SrsSharedPtrMessage* shared_metadata) | ||
| 629 | +{ | ||
| 630 | + int ret = ERROR_SUCCESS; | ||
| 631 | + | ||
| 632 | + if (!dvr_enabled) { | ||
| 633 | + return ret; | ||
| 634 | + } | ||
| 635 | + | ||
| 636 | + return segment->write_data(shared_metadata); | ||
| 637 | +} | ||
| 638 | + | ||
| 604 | int SrsDvrPlan::on_audio(SrsSharedPtrMessage* shared_audio) | 639 | int SrsDvrPlan::on_audio(SrsSharedPtrMessage* shared_audio) |
| 605 | { | 640 | { |
| 606 | int ret = ERROR_SUCCESS; | 641 | int ret = ERROR_SUCCESS; |
| @@ -1054,6 +1089,16 @@ int SrsDvr::on_meta_data(SrsOnMetaDataPacket* m) | @@ -1054,6 +1089,16 @@ int SrsDvr::on_meta_data(SrsOnMetaDataPacket* m) | ||
| 1054 | return ret; | 1089 | return ret; |
| 1055 | } | 1090 | } |
| 1056 | 1091 | ||
| 1092 | +int SrsDvr::on_data(SrsSharedPtrMessage* shared_data) | ||
| 1093 | +{ | ||
| 1094 | + // the dvr for this stream is not actived. | ||
| 1095 | + if (!actived) { | ||
| 1096 | + return ERROR_SUCCESS; | ||
| 1097 | + } | ||
| 1098 | + | ||
| 1099 | + return plan->on_data(shared_data); | ||
| 1100 | +} | ||
| 1101 | + | ||
| 1057 | int SrsDvr::on_audio(SrsSharedPtrMessage* shared_audio) | 1102 | int SrsDvr::on_audio(SrsSharedPtrMessage* shared_audio) |
| 1058 | { | 1103 | { |
| 1059 | // the dvr for this stream is not actived. | 1104 | // the dvr for this stream is not actived. |
| @@ -142,6 +142,10 @@ public: | @@ -142,6 +142,10 @@ public: | ||
| 142 | */ | 142 | */ |
| 143 | virtual int write_metadata(SrsSharedPtrMessage* metadata); | 143 | virtual int write_metadata(SrsSharedPtrMessage* metadata); |
| 144 | /** | 144 | /** |
| 145 | + * @param shared_data, directly ptr, copy it if need to save it. | ||
| 146 | + */ | ||
| 147 | + virtual int write_data(SrsSharedPtrMessage* shared_data); | ||
| 148 | + /** | ||
| 145 | * @param shared_audio, directly ptr, copy it if need to save it. | 149 | * @param shared_audio, directly ptr, copy it if need to save it. |
| 146 | */ | 150 | */ |
| 147 | virtual int write_audio(SrsSharedPtrMessage* shared_audio); | 151 | virtual int write_audio(SrsSharedPtrMessage* shared_audio); |
| @@ -222,6 +226,10 @@ public: | @@ -222,6 +226,10 @@ public: | ||
| 222 | */ | 226 | */ |
| 223 | virtual int on_meta_data(SrsSharedPtrMessage* shared_metadata); | 227 | virtual int on_meta_data(SrsSharedPtrMessage* shared_metadata); |
| 224 | /** | 228 | /** |
| 229 | + * when got metadata. | ||
| 230 | + */ | ||
| 231 | + virtual int on_data(SrsSharedPtrMessage* shared_metadata); | ||
| 232 | + /** | ||
| 225 | * @param shared_audio, directly ptr, copy it if need to save it. | 233 | * @param shared_audio, directly ptr, copy it if need to save it. |
| 226 | */ | 234 | */ |
| 227 | virtual int on_audio(SrsSharedPtrMessage* shared_audio); | 235 | virtual int on_audio(SrsSharedPtrMessage* shared_audio); |
| @@ -335,6 +343,11 @@ public: | @@ -335,6 +343,11 @@ public: | ||
| 335 | */ | 343 | */ |
| 336 | virtual int on_meta_data(SrsOnMetaDataPacket* m); | 344 | virtual int on_meta_data(SrsOnMetaDataPacket* m); |
| 337 | /** | 345 | /** |
| 346 | + * the data packets to dvr. | ||
| 347 | + * @param shared_data, directly ptr, copy it if need to save it. | ||
| 348 | + */ | ||
| 349 | + virtual int on_data(SrsSharedPtrMessage* shared_data); | ||
| 350 | + /** | ||
| 338 | * mux the audio packets to dvr. | 351 | * mux the audio packets to dvr. |
| 339 | * @param shared_audio, directly ptr, copy it if need to save it. | 352 | * @param shared_audio, directly ptr, copy it if need to save it. |
| 340 | */ | 353 | */ |
| @@ -266,7 +266,7 @@ int SrsFlvStreamEncoder::write_video(int64_t timestamp, char* data, int size) | @@ -266,7 +266,7 @@ int SrsFlvStreamEncoder::write_video(int64_t timestamp, char* data, int size) | ||
| 266 | 266 | ||
| 267 | int SrsFlvStreamEncoder::write_metadata(int64_t timestamp, char* data, int size) | 267 | int SrsFlvStreamEncoder::write_metadata(int64_t timestamp, char* data, int size) |
| 268 | { | 268 | { |
| 269 | - return enc->write_metadata(SrsCodecFlvTagScript, data, size); | 269 | + return enc->write_metadata(timestamp, data, size); |
| 270 | } | 270 | } |
| 271 | 271 | ||
| 272 | bool SrsFlvStreamEncoder::has_cache() | 272 | bool SrsFlvStreamEncoder::has_cache() |
| @@ -1298,6 +1298,7 @@ int SrsRtmpConn::process_publish_message(SrsSource* source, SrsCommonMessage* ms | @@ -1298,6 +1298,7 @@ int SrsRtmpConn::process_publish_message(SrsSource* source, SrsCommonMessage* ms | ||
| 1298 | 1298 | ||
| 1299 | // process onMetaData | 1299 | // process onMetaData |
| 1300 | if (msg->header.is_amf0_data() || msg->header.is_amf3_data()) { | 1300 | if (msg->header.is_amf0_data() || msg->header.is_amf3_data()) { |
| 1301 | +#if 0 | ||
| 1301 | SrsPacket* pkt = NULL; | 1302 | SrsPacket* pkt = NULL; |
| 1302 | if ((ret = rtmp->decode_message(msg, &pkt)) != ERROR_SUCCESS) { | 1303 | if ((ret = rtmp->decode_message(msg, &pkt)) != ERROR_SUCCESS) { |
| 1303 | srs_error("decode onMetaData message failed. ret=%d", ret); | 1304 | srs_error("decode onMetaData message failed. ret=%d", ret); |
| @@ -1317,6 +1318,14 @@ int SrsRtmpConn::process_publish_message(SrsSource* source, SrsCommonMessage* ms | @@ -1317,6 +1318,14 @@ int SrsRtmpConn::process_publish_message(SrsSource* source, SrsCommonMessage* ms | ||
| 1317 | 1318 | ||
| 1318 | srs_info("ignore AMF0/AMF3 data message."); | 1319 | srs_info("ignore AMF0/AMF3 data message."); |
| 1319 | return ret; | 1320 | return ret; |
| 1321 | +#else | ||
| 1322 | + if ((ret = source->on_data(msg)) != ERROR_SUCCESS) { | ||
| 1323 | + srs_error("source process onMetaData message failed. ret=%d", ret); | ||
| 1324 | + return ret; | ||
| 1325 | + } | ||
| 1326 | + srs_info("process onMetaData message success."); | ||
| 1327 | + return ret; | ||
| 1328 | +#endif | ||
| 1320 | } | 1329 | } |
| 1321 | 1330 | ||
| 1322 | return ret; | 1331 | return ret; |
| @@ -948,6 +948,31 @@ int SrsOriginHub::on_original_metadata(SrsOnMetaDataPacket* metadata) | @@ -948,6 +948,31 @@ int SrsOriginHub::on_original_metadata(SrsOnMetaDataPacket* metadata) | ||
| 948 | return ret; | 948 | return ret; |
| 949 | } | 949 | } |
| 950 | 950 | ||
| 951 | +int SrsOriginHub::on_original_data(SrsSharedPtrMessage* shared_data) | ||
| 952 | +{ | ||
| 953 | + int ret = ERROR_SUCCESS; | ||
| 954 | + | ||
| 955 | +#ifdef SRS_AUTO_DVR | ||
| 956 | + if (shared_data && (ret = dvr->on_data(shared_data)) != ERROR_SUCCESS) { | ||
| 957 | + srs_error("dvr process onData message failed. ret=%d", ret); | ||
| 958 | + return ret; | ||
| 959 | + } | ||
| 960 | +#endif | ||
| 961 | + | ||
| 962 | + // copy to all forwarders | ||
| 963 | + if (true) { | ||
| 964 | + std::vector<SrsForwarder*>::iterator it; | ||
| 965 | + for (it = forwarders.begin(); it != forwarders.end(); ++it) { | ||
| 966 | + SrsForwarder* forwarder = *it; | ||
| 967 | + if ((ret = forwarder->on_meta_data(shared_data)) != ERROR_SUCCESS) { | ||
| 968 | + srs_error("forwarder process onMetaData message failed. ret=%d", ret); | ||
| 969 | + return ret; | ||
| 970 | + } | ||
| 971 | + } | ||
| 972 | + } | ||
| 973 | + return ret; | ||
| 974 | +} | ||
| 975 | + | ||
| 951 | int SrsOriginHub::on_meta_data(SrsSharedPtrMessage* shared_metadata) | 976 | int SrsOriginHub::on_meta_data(SrsSharedPtrMessage* shared_metadata) |
| 952 | { | 977 | { |
| 953 | int ret = ERROR_SUCCESS; | 978 | int ret = ERROR_SUCCESS; |
| @@ -1972,6 +1997,27 @@ bool SrsSource::can_publish(bool is_edge) | @@ -1972,6 +1997,27 @@ bool SrsSource::can_publish(bool is_edge) | ||
| 1972 | return _can_publish; | 1997 | return _can_publish; |
| 1973 | } | 1998 | } |
| 1974 | 1999 | ||
| 2000 | + | ||
| 2001 | +int SrsSource::on_data(SrsCommonMessage* shared_data) | ||
| 2002 | +{ | ||
| 2003 | + int ret = ERROR_SUCCESS; | ||
| 2004 | + last_packet_time = shared_data->header.timestamp; | ||
| 2005 | + | ||
| 2006 | + // convert shared_audio to msg, user should not use shared_audio again. | ||
| 2007 | + // the payload is transfer to msg, and set to NULL in shared_audio. | ||
| 2008 | + SrsSharedPtrMessage msg; | ||
| 2009 | + if ((ret = msg.create(shared_data)) != ERROR_SUCCESS) { | ||
| 2010 | + srs_error("initialize the audio failed. ret=%d", ret); | ||
| 2011 | + return ret; | ||
| 2012 | + } | ||
| 2013 | + | ||
| 2014 | + // Notify hub about the original metadata. | ||
| 2015 | + if ((ret = hub->on_original_data(&msg)) != ERROR_SUCCESS) { | ||
| 2016 | + return ret; | ||
| 2017 | + } | ||
| 2018 | + return ret; | ||
| 2019 | +} | ||
| 2020 | + | ||
| 1975 | int SrsSource::on_meta_data(SrsCommonMessage* msg, SrsOnMetaDataPacket* metadata) | 2021 | int SrsSource::on_meta_data(SrsCommonMessage* msg, SrsOnMetaDataPacket* metadata) |
| 1976 | { | 2022 | { |
| 1977 | int ret = ERROR_SUCCESS; | 2023 | int ret = ERROR_SUCCESS; |
| @@ -1980,7 +2026,7 @@ int SrsSource::on_meta_data(SrsCommonMessage* msg, SrsOnMetaDataPacket* metadata | @@ -1980,7 +2026,7 @@ int SrsSource::on_meta_data(SrsCommonMessage* msg, SrsOnMetaDataPacket* metadata | ||
| 1980 | if ((ret = hub->on_original_metadata(metadata)) != ERROR_SUCCESS) { | 2026 | if ((ret = hub->on_original_metadata(metadata)) != ERROR_SUCCESS) { |
| 1981 | return ret; | 2027 | return ret; |
| 1982 | } | 2028 | } |
| 1983 | - | 2029 | + |
| 1984 | // if allow atc_auto and bravo-atc detected, open atc for vhost. | 2030 | // if allow atc_auto and bravo-atc detected, open atc for vhost. |
| 1985 | SrsAmf0Any* prop = NULL; | 2031 | SrsAmf0Any* prop = NULL; |
| 1986 | atc = _srs_config->get_atc(req->vhost); | 2032 | atc = _srs_config->get_atc(req->vhost); |
| @@ -2007,7 +2053,7 @@ int SrsSource::on_meta_data(SrsCommonMessage* msg, SrsOnMetaDataPacket* metadata | @@ -2007,7 +2053,7 @@ int SrsSource::on_meta_data(SrsCommonMessage* msg, SrsOnMetaDataPacket* metadata | ||
| 2007 | drop_for_reduce = true; | 2053 | drop_for_reduce = true; |
| 2008 | srs_warn("drop for reduce sh metadata, size=%d", msg->size); | 2054 | srs_warn("drop for reduce sh metadata, size=%d", msg->size); |
| 2009 | } | 2055 | } |
| 2010 | - | 2056 | + |
| 2011 | // copy to all consumer | 2057 | // copy to all consumer |
| 2012 | if (!drop_for_reduce) { | 2058 | if (!drop_for_reduce) { |
| 2013 | std::vector<SrsConsumer*>::iterator it; | 2059 | std::vector<SrsConsumer*>::iterator it; |
| @@ -458,6 +458,8 @@ public: | @@ -458,6 +458,8 @@ public: | ||
| 458 | public: | 458 | public: |
| 459 | // When got a original metadata. | 459 | // When got a original metadata. |
| 460 | virtual int on_original_metadata(SrsOnMetaDataPacket* metadata); | 460 | virtual int on_original_metadata(SrsOnMetaDataPacket* metadata); |
| 461 | + // When got a original metadata. | ||
| 462 | + virtual int on_original_data(SrsSharedPtrMessage* shared_data); | ||
| 461 | // When got a parsed metadata. | 463 | // When got a parsed metadata. |
| 462 | virtual int on_meta_data(SrsSharedPtrMessage* shared_metadata); | 464 | virtual int on_meta_data(SrsSharedPtrMessage* shared_metadata); |
| 463 | // When got a parsed audio packet. | 465 | // When got a parsed audio packet. |
| @@ -645,6 +647,7 @@ public: | @@ -645,6 +647,7 @@ public: | ||
| 645 | virtual bool can_publish(bool is_edge); | 647 | virtual bool can_publish(bool is_edge); |
| 646 | virtual int on_meta_data(SrsCommonMessage* msg, SrsOnMetaDataPacket* metadata); | 648 | virtual int on_meta_data(SrsCommonMessage* msg, SrsOnMetaDataPacket* metadata); |
| 647 | public: | 649 | public: |
| 650 | + virtual int on_data(SrsCommonMessage* data); | ||
| 648 | virtual int on_audio(SrsCommonMessage* audio); | 651 | virtual int on_audio(SrsCommonMessage* audio); |
| 649 | private: | 652 | private: |
| 650 | virtual int on_audio_imp(SrsSharedPtrMessage* audio); | 653 | virtual int on_audio_imp(SrsSharedPtrMessage* audio); |
| @@ -420,13 +420,13 @@ int SrsFlvEncoder::write_header(char flv_header[9]) | @@ -420,13 +420,13 @@ int SrsFlvEncoder::write_header(char flv_header[9]) | ||
| 420 | return ret; | 420 | return ret; |
| 421 | } | 421 | } |
| 422 | 422 | ||
| 423 | -int SrsFlvEncoder::write_metadata(char type, char* data, int size) | 423 | +int SrsFlvEncoder::write_metadata(int64_t timestamp, char* data, int size) |
| 424 | { | 424 | { |
| 425 | int ret = ERROR_SUCCESS; | 425 | int ret = ERROR_SUCCESS; |
| 426 | 426 | ||
| 427 | srs_assert(data); | 427 | srs_assert(data); |
| 428 | 428 | ||
| 429 | - if ((ret = write_metadata_to_cache(type, data, size, tag_header)) != ERROR_SUCCESS) { | 429 | + if ((ret = write_metadata_to_cache(timestamp, data, size, tag_header)) != ERROR_SUCCESS) { |
| 430 | return ret; | 430 | return ret; |
| 431 | } | 431 | } |
| 432 | 432 | ||
| @@ -532,7 +532,7 @@ int SrsFlvEncoder::write_tags(SrsSharedPtrMessage** msgs, int count) | @@ -532,7 +532,7 @@ int SrsFlvEncoder::write_tags(SrsSharedPtrMessage** msgs, int count) | ||
| 532 | return ret; | 532 | return ret; |
| 533 | } | 533 | } |
| 534 | } else { | 534 | } else { |
| 535 | - if ((ret = write_metadata_to_cache(SrsCodecFlvTagScript, msg->payload, msg->size, cache)) != ERROR_SUCCESS) { | 535 | + if ((ret = write_metadata_to_cache(msg->timestamp, msg->payload, msg->size, cache)) != ERROR_SUCCESS) { |
| 536 | return ret; | 536 | return ret; |
| 537 | } | 537 | } |
| 538 | } | 538 | } |
| @@ -567,7 +567,7 @@ int SrsFlvEncoder::write_tags(SrsSharedPtrMessage** msgs, int count) | @@ -567,7 +567,7 @@ int SrsFlvEncoder::write_tags(SrsSharedPtrMessage** msgs, int count) | ||
| 567 | } | 567 | } |
| 568 | #endif | 568 | #endif |
| 569 | 569 | ||
| 570 | -int SrsFlvEncoder::write_metadata_to_cache(char type, char* data, int size, char* cache) | 570 | +int SrsFlvEncoder::write_metadata_to_cache(int64_t timestamp, char* data, int size, char* cache) |
| 571 | { | 571 | { |
| 572 | int ret = ERROR_SUCCESS; | 572 | int ret = ERROR_SUCCESS; |
| 573 | 573 | ||
| @@ -586,10 +586,11 @@ int SrsFlvEncoder::write_metadata_to_cache(char type, char* data, int size, char | @@ -586,10 +586,11 @@ int SrsFlvEncoder::write_metadata_to_cache(char type, char* data, int size, char | ||
| 586 | if ((ret = tag_stream->initialize(cache, 11)) != ERROR_SUCCESS) { | 586 | if ((ret = tag_stream->initialize(cache, 11)) != ERROR_SUCCESS) { |
| 587 | return ret; | 587 | return ret; |
| 588 | } | 588 | } |
| 589 | - tag_stream->write_1bytes(type); | 589 | + tag_stream->write_1bytes(SrsCodecFlvTagScript); |
| 590 | tag_stream->write_3bytes(size); | 590 | tag_stream->write_3bytes(size); |
| 591 | - tag_stream->write_3bytes(0x00); | ||
| 592 | - tag_stream->write_1bytes(0x00); | 591 | + tag_stream->write_3bytes((int32_t)timestamp); |
| 592 | + // default to little-endian | ||
| 593 | + tag_stream->write_1bytes((timestamp >> 24) & 0xFF); | ||
| 593 | tag_stream->write_3bytes(0x00); | 594 | tag_stream->write_3bytes(0x00); |
| 594 | 595 | ||
| 595 | return ret; | 596 | return ret; |
| @@ -469,14 +469,13 @@ public: | @@ -469,14 +469,13 @@ public: | ||
| 469 | virtual int write_header(char flv_header[9]); | 469 | virtual int write_header(char flv_header[9]); |
| 470 | /** | 470 | /** |
| 471 | * write flv metadata. | 471 | * write flv metadata. |
| 472 | - * @param type, the type of data, or other message type. | ||
| 473 | - * @see SrsCodecFlvTag | 472 | + * @param timestamp |
| 474 | * @param data, the amf0 metadata which serialize from: | 473 | * @param data, the amf0 metadata which serialize from: |
| 475 | * AMF0 string: onMetaData, | 474 | * AMF0 string: onMetaData, |
| 476 | * AMF0 object: the metadata object. | 475 | * AMF0 object: the metadata object. |
| 477 | * @remark assert data is not NULL. | 476 | * @remark assert data is not NULL. |
| 478 | */ | 477 | */ |
| 479 | - virtual int write_metadata(char type, char* data, int size); | 478 | + virtual int write_metadata(int64_t timestamp, char* data, int size); |
| 480 | /** | 479 | /** |
| 481 | * write audio/video packet. | 480 | * write audio/video packet. |
| 482 | * @remark assert data is not NULL. | 481 | * @remark assert data is not NULL. |
| @@ -508,7 +507,7 @@ public: | @@ -508,7 +507,7 @@ public: | ||
| 508 | virtual int write_tags(SrsSharedPtrMessage** msgs, int count); | 507 | virtual int write_tags(SrsSharedPtrMessage** msgs, int count); |
| 509 | #endif | 508 | #endif |
| 510 | private: | 509 | private: |
| 511 | - virtual int write_metadata_to_cache(char type, char* data, int size, char* cache); | 510 | + virtual int write_metadata_to_cache(int64_t timestamp, char* data, int size, char* cache); |
| 512 | virtual int write_audio_to_cache(int64_t timestamp, char* data, int size, char* cache); | 511 | virtual int write_audio_to_cache(int64_t timestamp, char* data, int size, char* cache); |
| 513 | virtual int write_video_to_cache(int64_t timestamp, char* data, int size, char* cache); | 512 | virtual int write_video_to_cache(int64_t timestamp, char* data, int size, char* cache); |
| 514 | virtual int write_pts_to_cache(int size, char* cache); | 513 | virtual int write_pts_to_cache(int size, char* cache); |
| @@ -1735,7 +1735,7 @@ int srs_flv_write_tag(srs_flv_t flv, char type, int32_t time, char* data, int si | @@ -1735,7 +1735,7 @@ int srs_flv_write_tag(srs_flv_t flv, char type, int32_t time, char* data, int si | ||
| 1735 | } else if (type == SRS_RTMP_TYPE_VIDEO) { | 1735 | } else if (type == SRS_RTMP_TYPE_VIDEO) { |
| 1736 | return context->enc.write_video(time, data, size); | 1736 | return context->enc.write_video(time, data, size); |
| 1737 | } else { | 1737 | } else { |
| 1738 | - return context->enc.write_metadata(type, data, size); | 1738 | + return context->enc.write_metadata(time, data, size); |
| 1739 | } | 1739 | } |
| 1740 | 1740 | ||
| 1741 | return ret; | 1741 | return ret; |
| @@ -697,13 +697,29 @@ int SrsProtocol::do_decode_message(SrsMessageHeader& header, SrsBuffer* stream, | @@ -697,13 +697,29 @@ int SrsProtocol::do_decode_message(SrsMessageHeader& header, SrsBuffer* stream, | ||
| 697 | int ret = ERROR_SUCCESS; | 697 | int ret = ERROR_SUCCESS; |
| 698 | 698 | ||
| 699 | SrsPacket* packet = NULL; | 699 | SrsPacket* packet = NULL; |
| 700 | - | 700 | + if (header.is_amf0_data() || header.is_amf3_data()) { |
| 701 | + if (header.is_amf3_data() && stream->require(1)) { | ||
| 702 | + srs_verbose("skip 1bytes to decode DATA3 "); | ||
| 703 | + stream->skip(1); | ||
| 704 | + } | ||
| 705 | + std::string name; | ||
| 706 | + if ((ret = srs_amf0_read_string(stream, name)) != ERROR_SUCCESS) { | ||
| 707 | + srs_error( | ||
| 708 | + "decode AMF0/AMF3 script name failed. message type:%d ret=%d", | ||
| 709 | + header.message_type, ret); | ||
| 710 | + return ret; | ||
| 711 | + } | ||
| 712 | + srs_verbose("do docode script data:%s", name); | ||
| 713 | + *ppacket = packet = new SrsOnMetaDataPacket(); | ||
| 714 | + return ret; | ||
| 715 | + } | ||
| 716 | + | ||
| 701 | // decode specified packet type | 717 | // decode specified packet type |
| 702 | - if (header.is_amf0_command() || header.is_amf3_command() || header.is_amf0_data() || header.is_amf3_data()) { | 718 | + if (header.is_amf0_command() || header.is_amf3_command()) { |
| 703 | srs_verbose("start to decode AMF0/AMF3 command message."); | 719 | srs_verbose("start to decode AMF0/AMF3 command message."); |
| 704 | 720 | ||
| 705 | // skip 1bytes to decode the amf3 command. | 721 | // skip 1bytes to decode the amf3 command. |
| 706 | - if ((header.is_amf3_command() || header.is_amf3_data()) && stream->require(1)) { | 722 | + if (header.is_amf3_command() && stream->require(1)) { |
| 707 | srs_verbose("skip 1bytes to decode AMF3 command"); | 723 | srs_verbose("skip 1bytes to decode AMF3 command"); |
| 708 | stream->skip(1); | 724 | stream->skip(1); |
| 709 | } | 725 | } |
| @@ -461,7 +461,7 @@ VOID TEST(KernelFlvTest, FlvEncoderWriteMetadata) | @@ -461,7 +461,7 @@ VOID TEST(KernelFlvTest, FlvEncoderWriteMetadata) | ||
| 461 | }; | 461 | }; |
| 462 | char pts[] = { (char)0x00, (char)0x00, (char)0x00, (char)19 }; | 462 | char pts[] = { (char)0x00, (char)0x00, (char)0x00, (char)19 }; |
| 463 | 463 | ||
| 464 | - ASSERT_TRUE(ERROR_SUCCESS == enc.write_metadata(18, md, 8)); | 464 | + ASSERT_TRUE(ERROR_SUCCESS == enc.write_metadata(0, md, 8)); |
| 465 | ASSERT_TRUE(11 + 8 + 4 == fs.offset); | 465 | ASSERT_TRUE(11 + 8 + 4 == fs.offset); |
| 466 | 466 | ||
| 467 | EXPECT_TRUE(srs_bytes_equals(tag_header, fs.data, 11)); | 467 | EXPECT_TRUE(srs_bytes_equals(tag_header, fs.data, 11)); |
-
请 注册 或 登录 后发表评论