diff --git a/trunk/src/app/srs_app_rtp.cpp b/trunk/src/app/srs_app_rtp.cpp index 015141f84..52574fd22 100644 --- a/trunk/src/app/srs_app_rtp.cpp +++ b/trunk/src/app/srs_app_rtp.cpp @@ -73,83 +73,23 @@ static string dump_string_hex(const char* buf, const int nb_buf, const int& max_ return string(tmp_buf, len); } - -SrsRtpRawFrame::SrsRtpRawFrame(char* buf, int len) -{ - if (buf && len > 0) { - payload = new char[len]; - size = len; - memcpy(payload, buf, len); - } else { - payload = NULL; - size = 0; - } -} - -SrsRtpRawFrame::~SrsRtpRawFrame() -{ - if (payload) { - delete [] payload; - payload = NULL; - size = 0; - } -} - -srs_error_t SrsRtpRawFrame::avcc_to_annexb() -{ - srs_error_t err = srs_success; - - if (! (payload[0] == 0x00 && payload[1] == 0x00 && payload[2] == 0x00 && payload[3] == 0x01)) { - } - - return err; -} - -srs_error_t SrsRtpRawFrame::frame_to_packet() -{ - srs_error_t err = srs_success; - if (payload == NULL || size <= 4) { - return srs_error_wrap(err, "invalid rtp raw frame"); - } - - avcc_to_annexb(); - - char buf[1500] = {0}; - SrsBuffer* stream = new SrsBuffer(buf, sizeof(buf)); -} - SrsRtpMuxer::SrsRtpMuxer() { + sequence = 0; } SrsRtpMuxer::~SrsRtpMuxer() { } -srs_error_t SrsRtpMuxer::video_frame_to_packet(SrsSharedPtrMessage* shared_video, SrsFormat* format) +srs_error_t SrsRtpMuxer::frame_to_packet(SrsSharedPtrMessage* shared_frame, SrsFormat* format) { srs_error_t err = srs_success; - if (shared_video->size < 5) { - return srs_error_wrap(err, "invalid video size:%d", shared_video->size); + for (int i = 0; i < format->video->nb_samples; ++i) { + SrsSample sample = format->video->samples[i]; } - SrsRtpRawFrame* rtp_raw_frame = new SrsRtpRawFrame(shared_video->payload + 5, shared_video->size - 5); - SrsAutoFree(SrsRtpRawFrame, rtp_raw_frame); - - rtp_raw_frame->frame_to_packet(); - - srs_trace("video dump=%s", dump_string_hex(shared_video->payload, shared_video->size).c_str()); - - //srs_avcc_to_annexb(raw, raw_len); - - return err; -} - -srs_error_t SrsRtpMuxer::audio_frame_to_packet(SrsSharedPtrMessage* shared_video, SrsFormat* format) -{ - srs_error_t err = srs_success; - return err; } @@ -188,7 +128,7 @@ srs_error_t SrsRtp::initialize(SrsOriginHub* h, SrsRequest* r) hub = h; req = r; - rtp_muxer = new SrsRtpMuxer(); + rtp_h264_muxer = new SrsRtpMuxer(); return err; } @@ -255,7 +195,8 @@ srs_error_t SrsRtp::on_audio(SrsSharedPtrMessage* shared_audio, SrsFormat* forma // ignore sequence header srs_assert(format->audio); - return rtp_muxer->audio_frame_to_packet(audio, format); + // TODO: rtc no support aac + return err; } srs_error_t SrsRtp::on_video(SrsSharedPtrMessage* shared_video, SrsFormat* format) @@ -281,5 +222,5 @@ srs_error_t SrsRtp::on_video(SrsSharedPtrMessage* shared_video, SrsFormat* forma // ignore info frame, // @see https://github.com/ossrs/srs/issues/288#issuecomment-69863909 srs_assert(format->video); - return rtp_muxer->video_frame_to_packet(video, format); + return rtp_h264_muxer->frame_to_packet(video, format); } diff --git a/trunk/src/app/srs_app_rtp.hpp b/trunk/src/app/srs_app_rtp.hpp index 097d2a8a6..a11317948 100644 --- a/trunk/src/app/srs_app_rtp.hpp +++ b/trunk/src/app/srs_app_rtp.hpp @@ -35,30 +35,16 @@ class SrsSharedPtrMessage; class SrsRequest; class SrsOriginHub; -class SrsRtpRawFrame -{ -public: - int64_t timestamp; - char* payload; - int size; -public: - SrsRtpRawFrame(char* buf, int len); - virtual ~SrsRtpRawFrame(); -public: - srs_error_t avcc_to_annexb(); - srs_error_t frame_to_packet(); -}; - class SrsRtpMuxer { private: + uint32_t sequence; std::map packet_queue; public: SrsRtpMuxer(); virtual ~SrsRtpMuxer(); public: - srs_error_t video_frame_to_packet(SrsSharedPtrMessage* shared_video, SrsFormat* format); - srs_error_t audio_frame_to_packet(SrsSharedPtrMessage* shared_video, SrsFormat* format); + srs_error_t frame_to_packet(SrsSharedPtrMessage* shared_video, SrsFormat* format); }; class SrsRtp @@ -68,7 +54,7 @@ private: bool enabled; bool disposable; srs_utime_t last_update_time; - SrsRtpMuxer* rtp_muxer; + SrsRtpMuxer* rtp_h264_muxer; SrsOriginHub* hub; public: SrsRtp(); diff --git a/trunk/src/kernel/srs_kernel_flv.cpp b/trunk/src/kernel/srs_kernel_flv.cpp index 0259def06..4dc8f68da 100644 --- a/trunk/src/kernel/srs_kernel_flv.cpp +++ b/trunk/src/kernel/srs_kernel_flv.cpp @@ -203,6 +203,8 @@ SrsSharedPtrMessage::SrsSharedPtrPayload::SrsSharedPtrPayload() { payload = NULL; size = 0; + rtp_fragments = NULL; + nb_rtp_fragments = 0; shared_count = 0; } @@ -214,7 +216,7 @@ SrsSharedPtrMessage::SrsSharedPtrPayload::~SrsSharedPtrPayload() srs_freepa(payload); } -SrsSharedPtrMessage::SrsSharedPtrMessage() : timestamp(0), stream_id(0), size(0), payload(NULL) +SrsSharedPtrMessage::SrsSharedPtrMessage() : timestamp(0), stream_id(0), size(0), payload(NULL), rtp_fragments(NULL), nb_rtp_fragments(0) { ptr = NULL; } @@ -345,6 +347,8 @@ SrsSharedPtrMessage* SrsSharedPtrMessage::copy() copy->stream_id = stream_id; copy->payload = ptr->payload; copy->size = ptr->size; + copy->rtp_fragments = ptr->rtp_fragments; + copy->nb_rtp_fragments = ptr->nb_rtp_fragments; return copy; } diff --git a/trunk/src/kernel/srs_kernel_flv.hpp b/trunk/src/kernel/srs_kernel_flv.hpp index ebc587f39..30052b881 100644 --- a/trunk/src/kernel/srs_kernel_flv.hpp +++ b/trunk/src/kernel/srs_kernel_flv.hpp @@ -38,6 +38,7 @@ class ISrsWriter; class ISrsReader; class SrsFileReader; class SrsPacket; +class SrsSample; #define SRS_FLV_TAG_HEADER_SIZE 11 #define SRS_FLV_PREVIOUS_TAG_SIZE 4 @@ -285,6 +286,9 @@ public: // @remark, not all message payload can be decoded to packet. for example, // video/audio packet use raw bytes, no video/audio packet. char* payload; + + SrsSample* rtp_fragments; + int nb_rtp_fragments; private: class SrsSharedPtrPayload { @@ -298,6 +302,8 @@ private: int size; // The reference count int shared_count; + SrsSample* rtp_fragments; + int nb_rtp_fragments; public: SrsSharedPtrPayload(); virtual ~SrsSharedPtrPayload();