winlin

for #738, refine flv codec to use io interface.

@@ -241,6 +241,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @@ -241,6 +241,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
241 #define ERROR_RESPONSE_DATA 3065 241 #define ERROR_RESPONSE_DATA 3065
242 #define ERROR_REQUEST_DATA 3066 242 #define ERROR_REQUEST_DATA 3066
243 #define ERROR_EDGE_PORT_INVALID 3067 243 #define ERROR_EDGE_PORT_INVALID 3067
  244 +#define ERROR_EXPECT_FILE_IO 3068
244 245
245 /////////////////////////////////////////////////////// 246 ///////////////////////////////////////////////////////
246 // HTTP/StreamCaster/KAFKA protocol error. 247 // HTTP/StreamCaster/KAFKA protocol error.
@@ -346,7 +346,7 @@ SrsSharedPtrMessage* SrsSharedPtrMessage::copy() @@ -346,7 +346,7 @@ SrsSharedPtrMessage* SrsSharedPtrMessage::copy()
346 346
347 SrsFlvEncoder::SrsFlvEncoder() 347 SrsFlvEncoder::SrsFlvEncoder()
348 { 348 {
349 - reader = NULL; 349 + writer = NULL;
350 tag_stream = new SrsBuffer(); 350 tag_stream = new SrsBuffer();
351 351
352 #ifdef SRS_PERF_FAST_FLV_ENCODER 352 #ifdef SRS_PERF_FAST_FLV_ENCODER
@@ -370,21 +370,11 @@ SrsFlvEncoder::~SrsFlvEncoder() @@ -370,21 +370,11 @@ SrsFlvEncoder::~SrsFlvEncoder()
370 #endif 370 #endif
371 } 371 }
372 372
373 -int SrsFlvEncoder::initialize(SrsFileWriter* fr) 373 +int SrsFlvEncoder::initialize(ISrsWriter* fw)
374 { 374 {
375 - int ret = ERROR_SUCCESS;  
376 -  
377 - srs_assert(fr);  
378 -  
379 - if (!fr->is_open()) {  
380 - ret = ERROR_KERNEL_FLV_STREAM_CLOSED;  
381 - srs_warn("stream is not open for encoder. ret=%d", ret);  
382 - return ret;  
383 - }  
384 -  
385 - reader = fr;  
386 -  
387 - return ret; 375 + srs_assert(fw);
  376 + writer = fw;
  377 + return ERROR_SUCCESS;
388 } 378 }
389 379
390 int SrsFlvEncoder::write_header() 380 int SrsFlvEncoder::write_header()
@@ -416,14 +406,14 @@ int SrsFlvEncoder::write_header(char flv_header[9]) @@ -416,14 +406,14 @@ int SrsFlvEncoder::write_header(char flv_header[9])
416 int ret = ERROR_SUCCESS; 406 int ret = ERROR_SUCCESS;
417 407
418 // write data. 408 // write data.
419 - if ((ret = reader->write(flv_header, 9, NULL)) != ERROR_SUCCESS) { 409 + if ((ret = writer->write(flv_header, 9, NULL)) != ERROR_SUCCESS) {
420 srs_error("write flv header failed. ret=%d", ret); 410 srs_error("write flv header failed. ret=%d", ret);
421 return ret; 411 return ret;
422 } 412 }
423 413
424 // previous tag size. 414 // previous tag size.
425 char pts[] = { (char)0x00, (char)0x00, (char)0x00, (char)0x00 }; 415 char pts[] = { (char)0x00, (char)0x00, (char)0x00, (char)0x00 };
426 - if ((ret = reader->write(pts, 4, NULL)) != ERROR_SUCCESS) { 416 + if ((ret = writer->write(pts, 4, NULL)) != ERROR_SUCCESS) {
427 return ret; 417 return ret;
428 } 418 }
429 419
@@ -566,7 +556,7 @@ int SrsFlvEncoder::write_tags(SrsSharedPtrMessage** msgs, int count) @@ -566,7 +556,7 @@ int SrsFlvEncoder::write_tags(SrsSharedPtrMessage** msgs, int count)
566 iovs += 3; 556 iovs += 3;
567 } 557 }
568 558
569 - if ((ret = reader->writev(iovss, nb_iovss, NULL)) != ERROR_SUCCESS) { 559 + if ((ret = writer->writev(iovss, nb_iovss, NULL)) != ERROR_SUCCESS) {
570 if (!srs_is_client_gracefully_close(ret)) { 560 if (!srs_is_client_gracefully_close(ret)) {
571 srs_error("write flv tags failed. ret=%d", ret); 561 srs_error("write flv tags failed. ret=%d", ret);
572 } 562 }
@@ -697,7 +687,7 @@ int SrsFlvEncoder::write_tag(char* header, int header_size, char* tag, int tag_s @@ -697,7 +687,7 @@ int SrsFlvEncoder::write_tag(char* header, int header_size, char* tag, int tag_s
697 iovs[2].iov_base = pre_size; 687 iovs[2].iov_base = pre_size;
698 iovs[2].iov_len = SRS_FLV_PREVIOUS_TAG_SIZE; 688 iovs[2].iov_len = SRS_FLV_PREVIOUS_TAG_SIZE;
699 689
700 - if ((ret = reader->writev(iovs, 3, NULL)) != ERROR_SUCCESS) { 690 + if ((ret = writer->writev(iovs, 3, NULL)) != ERROR_SUCCESS) {
701 if (!srs_is_client_gracefully_close(ret)) { 691 if (!srs_is_client_gracefully_close(ret)) {
702 srs_error("write flv tag failed. ret=%d", ret); 692 srs_error("write flv tag failed. ret=%d", ret);
703 } 693 }
@@ -718,21 +708,11 @@ SrsFlvDecoder::~SrsFlvDecoder() @@ -718,21 +708,11 @@ SrsFlvDecoder::~SrsFlvDecoder()
718 srs_freep(tag_stream); 708 srs_freep(tag_stream);
719 } 709 }
720 710
721 -int SrsFlvDecoder::initialize(SrsFileReader* fr) 711 +int SrsFlvDecoder::initialize(ISrsReader* fr)
722 { 712 {
723 - int ret = ERROR_SUCCESS;  
724 -  
725 srs_assert(fr); 713 srs_assert(fr);
726 -  
727 - if (!fr->is_open()) {  
728 - ret = ERROR_KERNEL_FLV_STREAM_CLOSED;  
729 - srs_warn("stream is not open for decoder. ret=%d", ret);  
730 - return ret;  
731 - }  
732 -  
733 reader = fr; 714 reader = fr;
734 -  
735 - return ret; 715 + return ERROR_SUCCESS;
736 } 716 }
737 717
738 int SrsFlvDecoder::read_header(char header[9]) 718 int SrsFlvDecoder::read_header(char header[9])
@@ -842,20 +822,24 @@ SrsFlvVodStreamDecoder::~SrsFlvVodStreamDecoder() @@ -842,20 +822,24 @@ SrsFlvVodStreamDecoder::~SrsFlvVodStreamDecoder()
842 srs_freep(tag_stream); 822 srs_freep(tag_stream);
843 } 823 }
844 824
845 -int SrsFlvVodStreamDecoder::initialize(SrsFileReader* fr) 825 +int SrsFlvVodStreamDecoder::initialize(ISrsReader* fr)
846 { 826 {
847 int ret = ERROR_SUCCESS; 827 int ret = ERROR_SUCCESS;
848 828
849 srs_assert(fr); 829 srs_assert(fr);
  830 + reader = dynamic_cast<SrsFileReader*>(fr);
  831 + if (!reader) {
  832 + ret = ERROR_EXPECT_FILE_IO;
  833 + srs_error("stream is not file io. ret=%d", ret);
  834 + return ret;
  835 + }
850 836
851 - if (!fr->is_open()) { 837 + if (!reader->is_open()) {
852 ret = ERROR_KERNEL_FLV_STREAM_CLOSED; 838 ret = ERROR_KERNEL_FLV_STREAM_CLOSED;
853 srs_warn("stream is not open for decoder. ret=%d", ret); 839 srs_warn("stream is not open for decoder. ret=%d", ret);
854 return ret; 840 return ret;
855 } 841 }
856 842
857 - reader = fr;  
858 -  
859 return ret; 843 return ret;
860 } 844 }
861 845
@@ -37,7 +37,8 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @@ -37,7 +37,8 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
37 #endif 37 #endif
38 38
39 class SrsBuffer; 39 class SrsBuffer;
40 -class SrsFileWriter; 40 +class ISrsWriter;
  41 +class ISrsReader;
41 class SrsFileReader; 42 class SrsFileReader;
42 43
43 #define SRS_FLV_TAG_HEADER_SIZE 11 44 #define SRS_FLV_TAG_HEADER_SIZE 11
@@ -442,7 +443,7 @@ public: @@ -442,7 +443,7 @@ public:
442 class SrsFlvEncoder 443 class SrsFlvEncoder
443 { 444 {
444 private: 445 private:
445 - SrsFileWriter* reader; 446 + ISrsWriter* writer;
446 private: 447 private:
447 SrsBuffer* tag_stream; 448 SrsBuffer* tag_stream;
448 char tag_header[SRS_FLV_TAG_HEADER_SIZE]; 449 char tag_header[SRS_FLV_TAG_HEADER_SIZE];
@@ -453,9 +454,9 @@ public: @@ -453,9 +454,9 @@ public:
453 /** 454 /**
454 * initialize the underlayer file stream. 455 * initialize the underlayer file stream.
455 * @remark user can initialize multiple times to encode multiple flv files. 456 * @remark user can initialize multiple times to encode multiple flv files.
456 - * @remark, user must free the @param fr, flv encoder never close/free it. 457 + * @remark, user must free the @param fw, flv encoder never close/free it.
457 */ 458 */
458 - virtual int initialize(SrsFileWriter* fr); 459 + virtual int initialize(ISrsWriter* fw);
459 public: 460 public:
460 /** 461 /**
461 * write flv header. 462 * write flv header.
@@ -520,7 +521,7 @@ private: @@ -520,7 +521,7 @@ private:
520 class SrsFlvDecoder 521 class SrsFlvDecoder
521 { 522 {
522 private: 523 private:
523 - SrsFileReader* reader; 524 + ISrsReader* reader;
524 private: 525 private:
525 SrsBuffer* tag_stream; 526 SrsBuffer* tag_stream;
526 public: 527 public:
@@ -530,9 +531,9 @@ public: @@ -530,9 +531,9 @@ public:
530 /** 531 /**
531 * initialize the underlayer file stream 532 * initialize the underlayer file stream
532 * @remark user can initialize multiple times to decode multiple flv files. 533 * @remark user can initialize multiple times to decode multiple flv files.
533 - * @remark user must free the @param fr, flv decoder never close/free it. 534 + * @remark user must free the @param fr, flv decoder never close/free it
534 */ 535 */
535 - virtual int initialize(SrsFileReader* fr); 536 + virtual int initialize(ISrsReader* fr);
536 public: 537 public:
537 /** 538 /**
538 * read the flv header, donot including the 4bytes previous tag size. 539 * read the flv header, donot including the 4bytes previous tag size.
@@ -576,7 +577,7 @@ public: @@ -576,7 +577,7 @@ public:
576 * @remark user can initialize multiple times to decode multiple flv files. 577 * @remark user can initialize multiple times to decode multiple flv files.
577 * @remark user must free the @param fr, flv decoder never close/free it. 578 * @remark user must free the @param fr, flv decoder never close/free it.
578 */ 579 */
579 - virtual int initialize(SrsFileReader* fr); 580 + virtual int initialize(ISrsReader* fr);
580 public: 581 public:
581 /** 582 /**
582 * read the flv header and its size. 583 * read the flv header and its size.