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
|
* [2015-xx-xx xx:xx] xxx
|
||||||
|
|
||||||
RMB 100-499
|
RMB 100-499
|
||||||
|
* [2015-03-29 11-07] 姚伟斌
|
||||||
* [2015-03-14 20:21] 万伟
|
* [2015-03-14 20:21] 万伟
|
||||||
* [2015-03-11 09:44] 叶发养
|
* [2015-03-11 09:44] 叶发养
|
||||||
* [2015-02-08 21:10] 韩友洪
|
* [2015-02-08 21:10] 韩友洪
|
||||||
|
|
|
@ -563,11 +563,11 @@ int SrsHlsMuxer::_refresh_m3u8(string m3u8_file)
|
||||||
|
|
||||||
// #EXTM3U\n
|
// #EXTM3U\n
|
||||||
// #EXT-X-VERSION:3\n
|
// #EXT-X-VERSION:3\n
|
||||||
// #EXT-X-ALLOW-CACHE:NO\n
|
// #EXT-X-ALLOW-CACHE:YES\n
|
||||||
std::stringstream ss;
|
std::stringstream ss;
|
||||||
ss << "#EXTM3U" << SRS_CONSTS_LF
|
ss << "#EXTM3U" << SRS_CONSTS_LF
|
||||||
<< "#EXT-X-VERSION:3" << 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.");
|
srs_verbose("write m3u8 header success.");
|
||||||
|
|
||||||
// #EXT-X-MEDIA-SEQUENCE:4294967295\n
|
// #EXT-X-MEDIA-SEQUENCE:4294967295\n
|
||||||
|
|
|
@ -1265,10 +1265,15 @@ int SrsTsPayloadPES::decode(SrsStream* stream, SrsTsMessage** ppmsg)
|
||||||
msg = new SrsTsMessage(channel, packet);
|
msg = new SrsTsMessage(channel, packet);
|
||||||
channel->msg = msg;
|
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
|
// check when fresh, the payload_unit_start_indicator
|
||||||
// should be 1 for the fresh msg.
|
// 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;
|
ret = ERROR_STREAM_CASTER_TS_PSE;
|
||||||
srs_error("ts: PES fresh packet length=%d, us=%d, cc=%d. ret=%d",
|
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,
|
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,
|
// check when not fresh and PES_packet_length>0,
|
||||||
// the payload_unit_start_indicator should never be 1 when not completed.
|
// 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)
|
&& !msg->completed(packet->payload_unit_start_indicator)
|
||||||
&& 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
|
// check the continuity counter
|
||||||
if (!msg->fresh()) {
|
if (!is_fresh_msg) {
|
||||||
// late-incoming or duplicated continuity, drop message.
|
// late-incoming or duplicated continuity, drop message.
|
||||||
// @remark check overflow, the counter plus 1 should greater when invalid.
|
// @remark check overflow, the counter plus 1 should greater when invalid.
|
||||||
if (msg->continuity_counter >= packet->continuity_counter
|
if (msg->continuity_counter >= packet->continuity_counter
|
||||||
|
@ -1322,7 +1327,7 @@ int SrsTsPayloadPES::decode(SrsStream* stream, SrsTsMessage** ppmsg)
|
||||||
msg->continuity_counter = packet->continuity_counter;
|
msg->continuity_counter = packet->continuity_counter;
|
||||||
|
|
||||||
// for the PES_packet_length(0), reap when completed.
|
// 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.
|
// reap previous PES packet.
|
||||||
*ppmsg = msg;
|
*ppmsg = msg;
|
||||||
channel->msg = NULL;
|
channel->msg = NULL;
|
||||||
|
@ -1358,7 +1363,7 @@ int SrsTsPayloadPES::decode(SrsStream* stream, SrsTsMessage** ppmsg)
|
||||||
packet_start_code_prefix &= 0xFFFFFF;
|
packet_start_code_prefix &= 0xFFFFFF;
|
||||||
if (packet_start_code_prefix != 0x01) {
|
if (packet_start_code_prefix != 0x01) {
|
||||||
ret = ERROR_STREAM_CASTER_TS_PSE;
|
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;
|
return ret;
|
||||||
}
|
}
|
||||||
int pos_packet = stream->pos();
|
int pos_packet = stream->pos();
|
||||||
|
@ -1380,7 +1385,7 @@ int SrsTsPayloadPES::decode(SrsStream* stream, SrsTsMessage** ppmsg)
|
||||||
// 3B flags.
|
// 3B flags.
|
||||||
if (!stream->require(3)) {
|
if (!stream->require(3)) {
|
||||||
ret = ERROR_STREAM_CASTER_TS_PSE;
|
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;
|
return ret;
|
||||||
}
|
}
|
||||||
// 1B
|
// 1B
|
||||||
|
@ -1419,7 +1424,7 @@ int SrsTsPayloadPES::decode(SrsStream* stream, SrsTsMessage** ppmsg)
|
||||||
nb_required += PES_extension_flag? 1:0;
|
nb_required += PES_extension_flag? 1:0;
|
||||||
if (!stream->require(nb_required)) {
|
if (!stream->require(nb_required)) {
|
||||||
ret = ERROR_STREAM_CASTER_TS_PSE;
|
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;
|
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);
|
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.
|
// check msg, reap when completed.
|
||||||
if (msg->completed(packet->payload_unit_start_indicator)) {
|
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;
|
codec.frame_length = frame_length;
|
||||||
|
|
||||||
// @see srs_audio_write_raw_frame().
|
// @see srs_audio_write_raw_frame().
|
||||||
|
// TODO: FIXME: maybe need to resample audio.
|
||||||
codec.sound_format = 10; // AAC
|
codec.sound_format = 10; // AAC
|
||||||
if (sampling_frequency_index <= 0x0c && sampling_frequency_index > 0x0a) {
|
if (sampling_frequency_index <= 0x0c && sampling_frequency_index > 0x0a) {
|
||||||
codec.sound_rate = SrsCodecAudioSampleRate5512;
|
codec.sound_rate = SrsCodecAudioSampleRate5512;
|
||||||
|
@ -451,7 +452,7 @@ int SrsRawAacStream::adts_demux(SrsStream* stream, char** pframe, int* pnb_frame
|
||||||
codec.sound_rate = SrsCodecAudioSampleRate44100;
|
codec.sound_rate = SrsCodecAudioSampleRate44100;
|
||||||
srs_warn("adts invalid sample rate for flv, rate=%#x", sampling_frequency_index);
|
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.
|
// TODO: FIXME: finger it out the sound size by adts.
|
||||||
codec.sound_size = 1; // 0(8bits) or 1(16bits).
|
codec.sound_size = 1; // 0(8bits) or 1(16bits).
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue