Skip to content

Commit

Permalink
Fix ossrs#2570, remove useless audio track info in PMT when no audio
Browse files Browse the repository at this point in the history
  • Loading branch information
root authored and root committed Nov 25, 2021
1 parent 535dbe3 commit 6558010
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 14 deletions.
2 changes: 1 addition & 1 deletion trunk/src/app/srs_app_config.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2773,7 +2773,7 @@ srs_error_t SrsConfig::check_normal_config()
}

// TODO: FIXME: remove it in future.
if (m == "hls_storage" || m == "hls_mount") {
if (m == "hls_acodec" || m == "hls_vcodec") {
srs_warn("HLS codec is removed in SRS4+, read https://github.com/ossrs/srs/issues/2570.");
}
}
Expand Down
41 changes: 29 additions & 12 deletions trunk/src/kernel/srs_kernel_ts.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2610,7 +2610,11 @@ SrsTsContextWriter::SrsTsContextWriter(ISrsStreamWriter* w, SrsTsContext* c, Srs

SrsTsContextWriter::~SrsTsContextWriter()
{
flush_all_msg();
srs_error_t err = srs_success;
err = flush_all_msg();
if ( err != srs_success) {
srs_warn("err in flush msg in cache!");
}
}

srs_error_t SrsTsContextWriter::write_audio(SrsTsMessage* audio)
Expand All @@ -2627,16 +2631,20 @@ srs_error_t SrsTsContextWriter::write_audio(SrsTsMessage* audio)
ts_msg_cache_for_verify_codec.push_back(audio->detach());
return err;
} else {
flush_all_msg();
err = flush_all_msg();
ts_cache_msg_verifying_done = true;
}
} else {
//video codec is verified
flush_all_msg();
err = flush_all_msg();
ts_cache_msg_verifying_done = true;
}
}


if(err != srs_success) {
return err;
}

srs_info("hls: write audio pts=%" PRId64 ", dts=%" PRId64 ", size=%d",
audio->pts, audio->dts, audio->PES_packet_length);

Expand All @@ -2662,16 +2670,20 @@ srs_error_t SrsTsContextWriter::write_video(SrsTsMessage* video)
ts_msg_cache_for_verify_codec.push_back(video->detach());
return err;
} else {
flush_all_msg();
err = flush_all_msg();
ts_cache_msg_verifying_done = true;
}
} else {
//video codec is verified
flush_all_msg();
err = flush_all_msg();
ts_cache_msg_verifying_done = true;
}
}

if(err != srs_success) {
return err;
}

srs_info("hls: write video pts=%" PRId64 ", dts=%" PRId64 ", size=%d",
video->pts, video->dts, video->PES_packet_length);

Expand All @@ -2683,7 +2695,7 @@ srs_error_t SrsTsContextWriter::write_video(SrsTsMessage* video)
return err;
}

void SrsTsContextWriter::flush_all_msg()
srs_error_t SrsTsContextWriter::flush_all_msg()
{
srs_error_t err = srs_success;
int idx=0;
Expand All @@ -2692,12 +2704,17 @@ void SrsTsContextWriter::flush_all_msg()
if ( size > 0) {
for (idx=0; idx<size; idx++) {
msg = ts_msg_cache_for_verify_codec.at(idx);
if (msg) {
if ( msg ) {
err = context->encode(writer, msg, vcodec, acodec);
if ( err != srs_success ) {
srs_error("ts encode err, info:%s", srs_error_desc(err).c_str());
srs_error_reset(err);
if ( err != srs_success) {
break;
}
}
}

for (idx=0; idx<size; idx++) {
msg = ts_msg_cache_for_verify_codec.at(idx);
if ( msg ) {
srs_freep(msg);
}
}
Expand All @@ -2706,7 +2723,7 @@ void SrsTsContextWriter::flush_all_msg()
ts_msg_cache_for_verify_codec.clear();
}

return;
return err;
}

SrsVideoCodecId SrsTsContextWriter::video_codec()
Expand Down
2 changes: 1 addition & 1 deletion trunk/src/kernel/srs_kernel_ts.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -1256,7 +1256,7 @@ class SrsTsContextWriter
std::vector<SrsTsMessage*> ts_msg_cache_for_verify_codec;
bool ts_cache_msg_verifying_done;
private:
virtual void flush_all_msg();
virtual srs_error_t flush_all_msg();
public:
SrsTsContextWriter(ISrsStreamWriter* w, SrsTsContext* c, SrsAudioCodecId ac, SrsVideoCodecId vc);
virtual ~SrsTsContextWriter();
Expand Down

0 comments on commit 6558010

Please sign in to comment.