正在显示
2 个修改的文件
包含
100 行增加
和
23 行删除
| @@ -198,7 +198,7 @@ public: | @@ -198,7 +198,7 @@ public: | ||
| 198 | 198 | ||
| 199 | return ret; | 199 | return ret; |
| 200 | } | 200 | } |
| 201 | - static int write_frame(SrsFileWriter* writer, SrsMpegtsFrame* frame, SrsBuffer* buffer) | 201 | + static int write_frame(SrsFileWriter* writer, SrsMpegtsFrame* frame, SrsSimpleBuffer* buffer) |
| 202 | { | 202 | { |
| 203 | int ret = ERROR_SUCCESS; | 203 | int ret = ERROR_SUCCESS; |
| 204 | 204 | ||
| @@ -396,6 +396,56 @@ private: | @@ -396,6 +396,56 @@ private: | ||
| 396 | } | 396 | } |
| 397 | }; | 397 | }; |
| 398 | 398 | ||
| 399 | +SrsSimpleBuffer::SrsSimpleBuffer() | ||
| 400 | +{ | ||
| 401 | +} | ||
| 402 | + | ||
| 403 | +SrsSimpleBuffer::~SrsSimpleBuffer() | ||
| 404 | +{ | ||
| 405 | +} | ||
| 406 | + | ||
| 407 | +int SrsSimpleBuffer::length() | ||
| 408 | +{ | ||
| 409 | + int len = (int)data.size(); | ||
| 410 | + srs_assert(len >= 0); | ||
| 411 | + return len; | ||
| 412 | +} | ||
| 413 | + | ||
| 414 | +char* SrsSimpleBuffer::bytes() | ||
| 415 | +{ | ||
| 416 | + return (length() == 0)? NULL : &data.at(0); | ||
| 417 | +} | ||
| 418 | + | ||
| 419 | +void SrsSimpleBuffer::erase(int size) | ||
| 420 | +{ | ||
| 421 | + if (size <= 0) { | ||
| 422 | + return; | ||
| 423 | + } | ||
| 424 | + | ||
| 425 | + if (size >= length()) { | ||
| 426 | + data.clear(); | ||
| 427 | + return; | ||
| 428 | + } | ||
| 429 | + | ||
| 430 | + data.erase(data.begin(), data.begin() + size); | ||
| 431 | +} | ||
| 432 | + | ||
| 433 | +void SrsSimpleBuffer::append(const char* bytes, int size) | ||
| 434 | +{ | ||
| 435 | + srs_assert(size > 0); | ||
| 436 | + | ||
| 437 | + data.insert(data.end(), bytes, bytes + size); | ||
| 438 | +} | ||
| 439 | + | ||
| 440 | +SrsHlsAacJitter::SrsHlsAacJitter() | ||
| 441 | +{ | ||
| 442 | + base_pts = 0; | ||
| 443 | + nb_samples = 0; | ||
| 444 | + | ||
| 445 | + // TODO: config it, 0 means no adjust | ||
| 446 | + sync_ms = SRS_CONF_DEFAULT_AAC_SYNC; | ||
| 447 | +} | ||
| 448 | + | ||
| 399 | SrsHlsAacJitter::~SrsHlsAacJitter() | 449 | SrsHlsAacJitter::~SrsHlsAacJitter() |
| 400 | { | 450 | { |
| 401 | } | 451 | } |
| @@ -481,7 +531,7 @@ int SrsTSMuxer::open(string _path) | @@ -481,7 +531,7 @@ int SrsTSMuxer::open(string _path) | ||
| 481 | return ret; | 531 | return ret; |
| 482 | } | 532 | } |
| 483 | 533 | ||
| 484 | -int SrsTSMuxer::write_audio(SrsMpegtsFrame* af, SrsBuffer* ab) | 534 | +int SrsTSMuxer::write_audio(SrsMpegtsFrame* af, SrsSimpleBuffer* ab) |
| 485 | { | 535 | { |
| 486 | int ret = ERROR_SUCCESS; | 536 | int ret = ERROR_SUCCESS; |
| 487 | 537 | ||
| @@ -492,7 +542,7 @@ int SrsTSMuxer::write_audio(SrsMpegtsFrame* af, SrsBuffer* ab) | @@ -492,7 +542,7 @@ int SrsTSMuxer::write_audio(SrsMpegtsFrame* af, SrsBuffer* ab) | ||
| 492 | return ret; | 542 | return ret; |
| 493 | } | 543 | } |
| 494 | 544 | ||
| 495 | -int SrsTSMuxer::write_video(SrsMpegtsFrame* vf, SrsBuffer* vb) | 545 | +int SrsTSMuxer::write_video(SrsMpegtsFrame* vf, SrsSimpleBuffer* vb) |
| 496 | { | 546 | { |
| 497 | int ret = ERROR_SUCCESS; | 547 | int ret = ERROR_SUCCESS; |
| 498 | 548 | ||
| @@ -538,15 +588,6 @@ void SrsHlsSegment::update_duration(int64_t current_frame_dts) | @@ -538,15 +588,6 @@ void SrsHlsSegment::update_duration(int64_t current_frame_dts) | ||
| 538 | return; | 588 | return; |
| 539 | } | 589 | } |
| 540 | 590 | ||
| 541 | -SrsHlsAacJitter::SrsHlsAacJitter() | ||
| 542 | -{ | ||
| 543 | - base_pts = 0; | ||
| 544 | - nb_samples = 0; | ||
| 545 | - | ||
| 546 | - // TODO: config it, 0 means no adjust | ||
| 547 | - sync_ms = SRS_CONF_DEFAULT_AAC_SYNC; | ||
| 548 | -} | ||
| 549 | - | ||
| 550 | SrsHlsMuxer::SrsHlsMuxer() | 591 | SrsHlsMuxer::SrsHlsMuxer() |
| 551 | { | 592 | { |
| 552 | hls_fragment = hls_window = 0; | 593 | hls_fragment = hls_window = 0; |
| @@ -654,7 +695,7 @@ bool SrsHlsMuxer::is_segment_overflow() | @@ -654,7 +695,7 @@ bool SrsHlsMuxer::is_segment_overflow() | ||
| 654 | return current->duration >= hls_fragment; | 695 | return current->duration >= hls_fragment; |
| 655 | } | 696 | } |
| 656 | 697 | ||
| 657 | -int SrsHlsMuxer::flush_audio(SrsMpegtsFrame* af, SrsBuffer* ab) | 698 | +int SrsHlsMuxer::flush_audio(SrsMpegtsFrame* af, SrsSimpleBuffer* ab) |
| 658 | { | 699 | { |
| 659 | int ret = ERROR_SUCCESS; | 700 | int ret = ERROR_SUCCESS; |
| 660 | 701 | ||
| @@ -681,7 +722,7 @@ int SrsHlsMuxer::flush_audio(SrsMpegtsFrame* af, SrsBuffer* ab) | @@ -681,7 +722,7 @@ int SrsHlsMuxer::flush_audio(SrsMpegtsFrame* af, SrsBuffer* ab) | ||
| 681 | return ret; | 722 | return ret; |
| 682 | } | 723 | } |
| 683 | 724 | ||
| 684 | -int SrsHlsMuxer::flush_video(SrsMpegtsFrame* /*af*/, SrsBuffer* /*ab*/, SrsMpegtsFrame* vf, SrsBuffer* vb) | 725 | +int SrsHlsMuxer::flush_video(SrsMpegtsFrame* /*af*/, SrsSimpleBuffer* /*ab*/, SrsMpegtsFrame* vf, SrsSimpleBuffer* vb) |
| 685 | { | 726 | { |
| 686 | int ret = ERROR_SUCCESS; | 727 | int ret = ERROR_SUCCESS; |
| 687 | 728 | ||
| @@ -964,8 +1005,8 @@ SrsHlsCache::SrsHlsCache() | @@ -964,8 +1005,8 @@ SrsHlsCache::SrsHlsCache() | ||
| 964 | { | 1005 | { |
| 965 | aac_jitter = new SrsHlsAacJitter(); | 1006 | aac_jitter = new SrsHlsAacJitter(); |
| 966 | 1007 | ||
| 967 | - ab = new SrsBuffer(); | ||
| 968 | - vb = new SrsBuffer(); | 1008 | + ab = new SrsSimpleBuffer(); |
| 1009 | + vb = new SrsSimpleBuffer(); | ||
| 969 | 1010 | ||
| 970 | af = new SrsMpegtsFrame(); | 1011 | af = new SrsMpegtsFrame(); |
| 971 | vf = new SrsMpegtsFrame(); | 1012 | vf = new SrsMpegtsFrame(); |
| @@ -50,7 +50,6 @@ extern int aac_sample_rates[]; | @@ -50,7 +50,6 @@ extern int aac_sample_rates[]; | ||
| 50 | #include <string> | 50 | #include <string> |
| 51 | #include <vector> | 51 | #include <vector> |
| 52 | 52 | ||
| 53 | -class SrsBuffer; | ||
| 54 | class SrsSharedPtrMessage; | 53 | class SrsSharedPtrMessage; |
| 55 | class SrsCodecSample; | 54 | class SrsCodecSample; |
| 56 | class SrsMpegtsFrame; | 55 | class SrsMpegtsFrame; |
| @@ -64,6 +63,43 @@ class SrsSource; | @@ -64,6 +63,43 @@ class SrsSource; | ||
| 64 | class SrsFileWriter; | 63 | class SrsFileWriter; |
| 65 | 64 | ||
| 66 | /** | 65 | /** |
| 66 | +* the simple buffer use vector to append bytes, | ||
| 67 | +* it's for hls, and need to be refined in future. | ||
| 68 | +*/ | ||
| 69 | +class SrsSimpleBuffer | ||
| 70 | +{ | ||
| 71 | +private: | ||
| 72 | + std::vector<char> data; | ||
| 73 | +public: | ||
| 74 | + SrsSimpleBuffer(); | ||
| 75 | + virtual ~SrsSimpleBuffer(); | ||
| 76 | +public: | ||
| 77 | + /** | ||
| 78 | + * get the length of buffer. empty if zero. | ||
| 79 | + * @remark assert length() is not negative. | ||
| 80 | + */ | ||
| 81 | + virtual int length(); | ||
| 82 | + /** | ||
| 83 | + * get the buffer bytes. | ||
| 84 | + * @return the bytes, NULL if empty. | ||
| 85 | + */ | ||
| 86 | + virtual char* bytes(); | ||
| 87 | + /** | ||
| 88 | + * erase size of bytes from begin. | ||
| 89 | + * @param size to erase size of bytes. | ||
| 90 | + * clear if size greater than or equals to length() | ||
| 91 | + * @remark ignore size is not positive. | ||
| 92 | + */ | ||
| 93 | + virtual void erase(int size); | ||
| 94 | + /** | ||
| 95 | + * append specified bytes to buffer. | ||
| 96 | + * @param size the size of bytes | ||
| 97 | + * @remark assert size is positive. | ||
| 98 | + */ | ||
| 99 | + virtual void append(const char* bytes, int size); | ||
| 100 | +}; | ||
| 101 | + | ||
| 102 | +/** | ||
| 67 | * jitter correct for audio, | 103 | * jitter correct for audio, |
| 68 | * the sample rate 44100/32000 will lost precise, | 104 | * the sample rate 44100/32000 will lost precise, |
| 69 | * when mp4/ts(tbn=90000) covert to flv/rtmp(1000), | 105 | * when mp4/ts(tbn=90000) covert to flv/rtmp(1000), |
| @@ -109,8 +145,8 @@ public: | @@ -109,8 +145,8 @@ public: | ||
| 109 | virtual ~SrsTSMuxer(); | 145 | virtual ~SrsTSMuxer(); |
| 110 | public: | 146 | public: |
| 111 | virtual int open(std::string _path); | 147 | virtual int open(std::string _path); |
| 112 | - virtual int write_audio(SrsMpegtsFrame* af, SrsBuffer* ab); | ||
| 113 | - virtual int write_video(SrsMpegtsFrame* vf, SrsBuffer* vb); | 148 | + virtual int write_audio(SrsMpegtsFrame* af, SrsSimpleBuffer* ab); |
| 149 | + virtual int write_video(SrsMpegtsFrame* vf, SrsSimpleBuffer* vb); | ||
| 114 | virtual void close(); | 150 | virtual void close(); |
| 115 | }; | 151 | }; |
| 116 | 152 | ||
| @@ -196,8 +232,8 @@ public: | @@ -196,8 +232,8 @@ public: | ||
| 196 | * that is whether the current segment duration >= the segment in config | 232 | * that is whether the current segment duration >= the segment in config |
| 197 | */ | 233 | */ |
| 198 | virtual bool is_segment_overflow(); | 234 | virtual bool is_segment_overflow(); |
| 199 | - virtual int flush_audio(SrsMpegtsFrame* af, SrsBuffer* ab); | ||
| 200 | - virtual int flush_video(SrsMpegtsFrame* af, SrsBuffer* ab, SrsMpegtsFrame* vf, SrsBuffer* vb); | 235 | + virtual int flush_audio(SrsMpegtsFrame* af, SrsSimpleBuffer* ab); |
| 236 | + virtual int flush_video(SrsMpegtsFrame* af, SrsSimpleBuffer* ab, SrsMpegtsFrame* vf, SrsSimpleBuffer* vb); | ||
| 201 | /** | 237 | /** |
| 202 | * close segment(ts). | 238 | * close segment(ts). |
| 203 | * @param log_desc the description for log. | 239 | * @param log_desc the description for log. |
| @@ -231,9 +267,9 @@ class SrsHlsCache | @@ -231,9 +267,9 @@ class SrsHlsCache | ||
| 231 | private: | 267 | private: |
| 232 | // current frame and buffer | 268 | // current frame and buffer |
| 233 | SrsMpegtsFrame* af; | 269 | SrsMpegtsFrame* af; |
| 234 | - SrsBuffer* ab; | 270 | + SrsSimpleBuffer* ab; |
| 235 | SrsMpegtsFrame* vf; | 271 | SrsMpegtsFrame* vf; |
| 236 | - SrsBuffer* vb; | 272 | + SrsSimpleBuffer* vb; |
| 237 | private: | 273 | private: |
| 238 | // the audio cache buffer start pts, to flush audio if full. | 274 | // the audio cache buffer start pts, to flush audio if full. |
| 239 | int64_t audio_buffer_start_pts; | 275 | int64_t audio_buffer_start_pts; |
-
请 注册 或 登录 后发表评论