mirror of
https://github.com/AirenSoft/OvenMediaEngine.git
synced 2025-03-14 09:57:40 +00:00
Fixed timebase of scheduled channel
This commit is contained in:
@ -199,7 +199,7 @@ namespace pvd
|
||||
track->SetMediaType(cmn::MediaType::Video);
|
||||
|
||||
// Set Timebase to 1/1000 fixed
|
||||
track->SetTimeBase(1, 1000);
|
||||
track->SetTimeBase(1, kScheduledVideoTimebase);
|
||||
|
||||
stream->AddTrack(track);
|
||||
}
|
||||
@ -213,9 +213,7 @@ namespace pvd
|
||||
auto public_name = ov::String::FormatString("Audio_%d", track->GetId());
|
||||
track->SetPublicName(public_name);
|
||||
track->SetMediaType(cmn::MediaType::Audio);
|
||||
|
||||
// Set Timebase to 1/1000 fixed
|
||||
track->SetTimeBase(1, 1000);
|
||||
track->SetTimeBase(1, kScheduledAudioTimebase);
|
||||
|
||||
stream->AddTrack(track);
|
||||
}
|
||||
@ -235,9 +233,7 @@ namespace pvd
|
||||
track->SetLanguage(audio_map_item.GetLanguage());
|
||||
track->SetCharacteristics(audio_map_item.GetCharacteristics());
|
||||
track->SetMediaType(cmn::MediaType::Audio);
|
||||
|
||||
// Set Timebase to 1/1000 fixed
|
||||
track->SetTimeBase(1, 1000);
|
||||
track->SetTimeBase(1, kScheduledAudioTimebase);
|
||||
|
||||
stream->AddTrack(track);
|
||||
}
|
||||
|
@ -776,7 +776,7 @@ namespace pvd
|
||||
auto old_track = GetTrack(audio_track_id);
|
||||
|
||||
new_track->SetId(audio_track_id);
|
||||
new_track->SetTimeBase(1, new_track->GetSampleRate());
|
||||
new_track->SetTimeBase(1, kScheduledAudioTimebase);
|
||||
new_track->SetPublicName(old_track->GetPublicName());
|
||||
new_track->SetLanguage(old_track->GetLanguage());
|
||||
new_track->SetCharacteristics(old_track->GetCharacteristics());
|
||||
@ -963,9 +963,11 @@ namespace pvd
|
||||
auto duration = media_packet->GetDuration();
|
||||
|
||||
// origin timebase to track timebase
|
||||
pts = ((pts * (double)origin_tb.GetNum()) / (double)origin_tb.GetDen()) * track->GetTimeBase().GetTimescale();
|
||||
dts = ((dts * (double)origin_tb.GetNum()) / (double)origin_tb.GetDen()) * track->GetTimeBase().GetTimescale();
|
||||
duration = ((duration * (double)origin_tb.GetNum()) / (double)origin_tb.GetDen()) * track->GetTimeBase().GetTimescale();
|
||||
pts = (((double)pts * (double)origin_tb.GetNum()) / (double)origin_tb.GetDen()) * track->GetTimeBase().GetTimescale();
|
||||
dts = (((double)dts * (double)origin_tb.GetNum()) / (double)origin_tb.GetDen()) * track->GetTimeBase().GetTimescale();
|
||||
duration = static_cast<double>(duration) * (static_cast<double>(origin_tb.GetNum()) / static_cast<double>(origin_tb.GetDen()) * track->GetTimeBase().GetTimescale());
|
||||
|
||||
logtd("Scheduled Channel : %s/%s: Track %d, origin dts : %lld, pts %lld, dts %lld, duration %lld, tb %f", GetApplicationName(), GetName().CStr(), track_id, dts, pts, dts, duration, track->GetTimeBase().GetExpr());
|
||||
|
||||
if (track_first_packet_map.find(track_id) == track_first_packet_map.end())
|
||||
{
|
||||
@ -1175,7 +1177,7 @@ namespace pvd
|
||||
auto old_track = GetTrack(audio_track_id);
|
||||
|
||||
new_track->SetId(audio_track_id);
|
||||
new_track->SetTimeBase(1, new_track->GetSampleRate());
|
||||
new_track->SetTimeBase(1, kScheduledAudioTimebase);
|
||||
new_track->SetPublicName(old_track->GetPublicName());
|
||||
new_track->SetLanguage(old_track->GetLanguage());
|
||||
new_track->SetCharacteristics(old_track->GetCharacteristics());
|
||||
|
@ -23,6 +23,7 @@ namespace pvd
|
||||
constexpr int kScheduledDataTrackId = 200;
|
||||
|
||||
constexpr int kScheduledVideoTimebase = 90000;
|
||||
constexpr int kScheduledAudioTimebase = 90000;
|
||||
|
||||
class ScheduledStream : public Stream
|
||||
{
|
||||
|
Reference in New Issue
Block a user