winlin

fix ts audio bug, aac adts header and PES_packet_length fixed

@@ -1941,6 +1941,10 @@ public: @@ -1941,6 +1941,10 @@ public:
1941 layer = (syncword >> 1) & 0x03; 1941 layer = (syncword >> 1) & 0x03;
1942 ID = (syncword >> 3) & 0x01; 1942 ID = (syncword >> 3) & 0x01;
1943 syncword = (syncword >> 4) & 0x0FFF; 1943 syncword = (syncword >> 4) & 0x0FFF;
  1944 + if (syncword != 0xfff) {
  1945 + trace("ts+aac invalid sync word. expect 0xfff, actual %#x", syncword);
  1946 + return -1;
  1947 + }
1944 1948
1945 // adts_variable_header 1949 // adts_variable_header
1946 int64_t temp = 0; 1950 int64_t temp = 0;
@@ -2228,7 +2232,7 @@ int main(int argc, char** argv) @@ -2228,7 +2232,7 @@ int main(int argc, char** argv)
2228 2232
2229 if ((ret = consume(msg, &aac_muxer)) != 0) { 2233 if ((ret = consume(msg, &aac_muxer)) != 0) {
2230 trace("demuxer+consume parse and consume message failed. ret=%d", ret); 2234 trace("demuxer+consume parse and consume message failed. ret=%d", ret);
2231 - break; 2235 + return -1;
2232 } 2236 }
2233 2237
2234 srs_freep(msg); 2238 srs_freep(msg);
@@ -560,6 +560,9 @@ int SrsTSMuxer::write_audio(u_int32_t time, SrsCodec* codec, SrsCodecSample* sam @@ -560,6 +560,9 @@ int SrsTSMuxer::write_audio(u_int32_t time, SrsCodec* codec, SrsCodecSample* sam
560 return ret; 560 return ret;
561 } 561 }
562 562
  563 + // the frame length is the AAC raw data plus the adts header size.
  564 + int32_t frame_length = size + 7;
  565 +
563 // AAC-ADTS 566 // AAC-ADTS
564 // 6.2 Audio Data Transport Stream, ADTS 567 // 6.2 Audio Data Transport Stream, ADTS
565 // in aac-iso-13818-7.pdf, page 26. 568 // in aac-iso-13818-7.pdf, page 26.
@@ -593,12 +596,14 @@ int SrsTSMuxer::write_audio(u_int32_t time, SrsCodec* codec, SrsCodecSample* sam @@ -593,12 +596,14 @@ int SrsTSMuxer::write_audio(u_int32_t time, SrsCodec* codec, SrsCodecSample* sam
593 // sampling_frequency_index 4bits 596 // sampling_frequency_index 4bits
594 adts_header[2] |= (codec->aac_sample_rate << 2) & 0x3c; 597 adts_header[2] |= (codec->aac_sample_rate << 2) & 0x3c;
595 // channel_configuration 3bits 598 // channel_configuration 3bits
596 - adts_header[2] |= (codec->aac_channels >> 1) & 0x01;  
597 - adts_header[3] = (codec->aac_channels << 5) & 0xc0; 599 + adts_header[2] |= (codec->aac_channels >> 2) & 0x01;
  600 + adts_header[3] = (codec->aac_channels << 6) & 0xc0;
598 // frame_length 13bits 601 // frame_length 13bits
599 - adts_header[3] |= (size >> 11) & 0x03;  
600 - adts_header[4] = (size >> 3) & 0xff;  
601 - adts_header[5] = (size << 5) & 0xcf; 602 + adts_header[3] |= (frame_length >> 11) & 0x03;
  603 + adts_header[4] = (frame_length >> 3) & 0xff;
  604 + adts_header[5] = ((frame_length << 5) & 0xe0);
  605 + // adts_buffer_fullness; //11bits
  606 + adts_header[5] |= 0x1f;
602 607
603 // copy to audio buffer 608 // copy to audio buffer
604 audio_buffer->append(adts_header, sizeof(adts_header)); 609 audio_buffer->append(adts_header, sizeof(adts_header));