|
|
@@ -84,6 +84,7 @@ struct PayloadContext { |
|
|
|
uint8_t *mlti_data; |
|
|
|
unsigned int mlti_data_size; |
|
|
|
char buffer[RTP_MAX_PACKET_LENGTH + FF_INPUT_BUFFER_PADDING_SIZE]; |
|
|
|
int audio_pkt_cnt[MAX_STREAMS]; /**< remaining audio packets in rmdec */ |
|
|
|
}; |
|
|
|
|
|
|
|
void |
|
|
@@ -294,9 +295,8 @@ rdt_parse_packet (PayloadContext *rdt, AVStream *st, |
|
|
|
{ |
|
|
|
int seq = 1, res; |
|
|
|
ByteIOContext pb; |
|
|
|
RMContext *rm = rdt->rmctx->priv_data; |
|
|
|
|
|
|
|
if (rm->audio_pkt_cnt == 0) { |
|
|
|
if (rdt->audio_pkt_cnt == 0) { |
|
|
|
int pos; |
|
|
|
|
|
|
|
init_put_byte(&pb, buf, len, 0, NULL, NULL, NULL, NULL); |
|
|
@@ -306,7 +306,8 @@ rdt_parse_packet (PayloadContext *rdt, AVStream *st, |
|
|
|
pos = url_ftell(&pb); |
|
|
|
if (res < 0) |
|
|
|
return res; |
|
|
|
if (rm->audio_pkt_cnt > 0 && |
|
|
|
rdt->audio_pkt_cnt[st->id] = res; |
|
|
|
if (rdt->audio_pkt_cnt[st->id] > 0 && |
|
|
|
st->codec->codec_id == CODEC_ID_AAC) { |
|
|
|
memcpy (rdt->buffer, buf + pos, len - pos); |
|
|
|
rdt->rmctx->pb = av_alloc_put_byte (rdt->buffer, len - pos, 0, |
|
|
@@ -314,14 +315,14 @@ rdt_parse_packet (PayloadContext *rdt, AVStream *st, |
|
|
|
} |
|
|
|
} else { |
|
|
|
ff_rm_retrieve_cache (rdt->rmctx, rdt->rmctx->pb, st, pkt); |
|
|
|
if (rm->audio_pkt_cnt == 0 && |
|
|
|
if (rdt->audio_pkt_cnt[st->id] == 0 && |
|
|
|
st->codec->codec_id == CODEC_ID_AAC) |
|
|
|
av_freep(&rdt->rmctx->pb); |
|
|
|
} |
|
|
|
pkt->stream_index = st->index; |
|
|
|
pkt->pts = *timestamp; |
|
|
|
|
|
|
|
return rm->audio_pkt_cnt > 0; |
|
|
|
return rdt->audio_pkt_cnt[st->id] > 0; |
|
|
|
} |
|
|
|
|
|
|
|
int |
|
|
|