mirror of
https://github.com/ossrs/srs.git
synced 2025-03-09 15:49:59 +00:00
Merge branch '2.0release' into develop
This commit is contained in:
commit
922adaf59f
4 changed files with 24 additions and 10 deletions
|
@ -13,6 +13,7 @@ RMB 500-999
|
|||
* [2015-xx-xx xx:xx] xxx
|
||||
|
||||
RMB 100-499
|
||||
* [2015-03-29 11-07] 姚伟斌
|
||||
* [2015-03-14 20:21] 万伟
|
||||
* [2015-03-11 09:44] 叶发养
|
||||
* [2015-02-08 21:10] 韩友洪
|
||||
|
|
|
@ -563,11 +563,11 @@ int SrsHlsMuxer::_refresh_m3u8(string m3u8_file)
|
|||
|
||||
// #EXTM3U\n
|
||||
// #EXT-X-VERSION:3\n
|
||||
// #EXT-X-ALLOW-CACHE:NO\n
|
||||
// #EXT-X-ALLOW-CACHE:YES\n
|
||||
std::stringstream ss;
|
||||
ss << "#EXTM3U" << SRS_CONSTS_LF
|
||||
<< "#EXT-X-VERSION:3" << SRS_CONSTS_LF
|
||||
<< "#EXT-X-ALLOW-CACHE:NO" << SRS_CONSTS_LF;
|
||||
<< "#EXT-X-ALLOW-CACHE:YES" << SRS_CONSTS_LF;
|
||||
srs_verbose("write m3u8 header success.");
|
||||
|
||||
// #EXT-X-MEDIA-SEQUENCE:4294967295\n
|
||||
|
|
|
@ -1265,10 +1265,15 @@ int SrsTsPayloadPES::decode(SrsStream* stream, SrsTsMessage** ppmsg)
|
|||
msg = new SrsTsMessage(channel, packet);
|
||||
channel->msg = msg;
|
||||
}
|
||||
|
||||
// we must cache the fresh state of msg,
|
||||
// for the PES_packet_length is 0, the first payload_unit_start_indicator always 1,
|
||||
// so should check for the fresh and not completed it.
|
||||
bool is_fresh_msg = msg->fresh();
|
||||
|
||||
// check when fresh, the payload_unit_start_indicator
|
||||
// should be 1 for the fresh msg.
|
||||
if (msg->fresh() && !packet->payload_unit_start_indicator) {
|
||||
if (is_fresh_msg && !packet->payload_unit_start_indicator) {
|
||||
ret = ERROR_STREAM_CASTER_TS_PSE;
|
||||
srs_error("ts: PES fresh packet length=%d, us=%d, cc=%d. ret=%d",
|
||||
msg->PES_packet_length, packet->payload_unit_start_indicator, packet->continuity_counter,
|
||||
|
@ -1278,7 +1283,7 @@ int SrsTsPayloadPES::decode(SrsStream* stream, SrsTsMessage** ppmsg)
|
|||
|
||||
// check when not fresh and PES_packet_length>0,
|
||||
// the payload_unit_start_indicator should never be 1 when not completed.
|
||||
if (!msg->fresh() && msg->PES_packet_length > 0
|
||||
if (!is_fresh_msg && msg->PES_packet_length > 0
|
||||
&& !msg->completed(packet->payload_unit_start_indicator)
|
||||
&& packet->payload_unit_start_indicator
|
||||
) {
|
||||
|
@ -1295,7 +1300,7 @@ int SrsTsPayloadPES::decode(SrsStream* stream, SrsTsMessage** ppmsg)
|
|||
}
|
||||
|
||||
// check the continuity counter
|
||||
if (!msg->fresh()) {
|
||||
if (!is_fresh_msg) {
|
||||
// late-incoming or duplicated continuity, drop message.
|
||||
// @remark check overflow, the counter plus 1 should greater when invalid.
|
||||
if (msg->continuity_counter >= packet->continuity_counter
|
||||
|
@ -1322,7 +1327,7 @@ int SrsTsPayloadPES::decode(SrsStream* stream, SrsTsMessage** ppmsg)
|
|||
msg->continuity_counter = packet->continuity_counter;
|
||||
|
||||
// for the PES_packet_length(0), reap when completed.
|
||||
if (!msg->fresh() && msg->completed(packet->payload_unit_start_indicator)) {
|
||||
if (!is_fresh_msg && msg->completed(packet->payload_unit_start_indicator)) {
|
||||
// reap previous PES packet.
|
||||
*ppmsg = msg;
|
||||
channel->msg = NULL;
|
||||
|
@ -1358,7 +1363,7 @@ int SrsTsPayloadPES::decode(SrsStream* stream, SrsTsMessage** ppmsg)
|
|||
packet_start_code_prefix &= 0xFFFFFF;
|
||||
if (packet_start_code_prefix != 0x01) {
|
||||
ret = ERROR_STREAM_CASTER_TS_PSE;
|
||||
srs_error("ts: demux PSE start code failed, expect=0x01, actual=%#x. ret=%d", packet_start_code_prefix, ret);
|
||||
srs_error("ts: demux PES start code failed, expect=0x01, actual=%#x. ret=%d", packet_start_code_prefix, ret);
|
||||
return ret;
|
||||
}
|
||||
int pos_packet = stream->pos();
|
||||
|
@ -1380,7 +1385,7 @@ int SrsTsPayloadPES::decode(SrsStream* stream, SrsTsMessage** ppmsg)
|
|||
// 3B flags.
|
||||
if (!stream->require(3)) {
|
||||
ret = ERROR_STREAM_CASTER_TS_PSE;
|
||||
srs_error("ts: demux PSE flags failed. ret=%d", ret);
|
||||
srs_error("ts: demux PES flags failed. ret=%d", ret);
|
||||
return ret;
|
||||
}
|
||||
// 1B
|
||||
|
@ -1419,7 +1424,7 @@ int SrsTsPayloadPES::decode(SrsStream* stream, SrsTsMessage** ppmsg)
|
|||
nb_required += PES_extension_flag? 1:0;
|
||||
if (!stream->require(nb_required)) {
|
||||
ret = ERROR_STREAM_CASTER_TS_PSE;
|
||||
srs_error("ts: demux PSE payload failed. ret=%d", ret);
|
||||
srs_error("ts: demux PES payload failed. ret=%d", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -1638,6 +1643,13 @@ int SrsTsPayloadPES::decode(SrsStream* stream, SrsTsMessage** ppmsg)
|
|||
srs_warn("ts: drop the pes packet %dB for stream_id=%#x", nb_drop, stream_id);
|
||||
}
|
||||
}
|
||||
|
||||
// when fresh and the PES_packet_length is 0,
|
||||
// the payload_unit_start_indicator always be 1,
|
||||
// the message should never EOF for the first packet.
|
||||
if (is_fresh_msg && msg->PES_packet_length == 0) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
// check msg, reap when completed.
|
||||
if (msg->completed(packet->payload_unit_start_indicator)) {
|
||||
|
|
|
@ -438,6 +438,7 @@ int SrsRawAacStream::adts_demux(SrsStream* stream, char** pframe, int* pnb_frame
|
|||
codec.frame_length = frame_length;
|
||||
|
||||
// @see srs_audio_write_raw_frame().
|
||||
// TODO: FIXME: maybe need to resample audio.
|
||||
codec.sound_format = 10; // AAC
|
||||
if (sampling_frequency_index <= 0x0c && sampling_frequency_index > 0x0a) {
|
||||
codec.sound_rate = SrsCodecAudioSampleRate5512;
|
||||
|
@ -451,7 +452,7 @@ int SrsRawAacStream::adts_demux(SrsStream* stream, char** pframe, int* pnb_frame
|
|||
codec.sound_rate = SrsCodecAudioSampleRate44100;
|
||||
srs_warn("adts invalid sample rate for flv, rate=%#x", sampling_frequency_index);
|
||||
}
|
||||
codec.sound_size = srs_max(0, srs_min(1, channel_configuration - 1));
|
||||
codec.sound_type = srs_max(0, srs_min(1, channel_configuration - 1));
|
||||
// TODO: FIXME: finger it out the sound size by adts.
|
||||
codec.sound_size = 1; // 0(8bits) or 1(16bits).
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue