JPG output now retries several seek points if the first is not available for some reason
This commit is contained in:
parent
8b73260194
commit
5150a2ec32
1 changed files with 21 additions and 4 deletions
|
@ -77,9 +77,21 @@ namespace Mist{
|
||||||
}
|
}
|
||||||
|
|
||||||
uint64_t seekPos = M.getFirstms(mainTrack) + (M.getLastms(mainTrack) - M.getFirstms(mainTrack)) / 2;
|
uint64_t seekPos = M.getFirstms(mainTrack) + (M.getLastms(mainTrack) - M.getFirstms(mainTrack)) / 2;
|
||||||
|
bool didSeek = false;
|
||||||
|
size_t retries = 10;
|
||||||
|
while (!didSeek && --retries){
|
||||||
MEDIUM_MSG("VoD seek to %" PRIu64 "ms", seekPos);
|
MEDIUM_MSG("VoD seek to %" PRIu64 "ms", seekPos);
|
||||||
uint32_t targetKey = M.getKeyIndexForTime(mainTrack, seekPos);
|
uint32_t targetKey = M.getKeyIndexForTime(mainTrack, seekPos);
|
||||||
seek(M.getTimeForKeyIndex(mainTrack, targetKey));
|
didSeek = seek(M.getTimeForKeyIndex(mainTrack, targetKey));
|
||||||
|
if (!didSeek){
|
||||||
|
selectDefaultTracks();
|
||||||
|
mainTrack = getMainSelectedTrack();
|
||||||
|
}
|
||||||
|
seekPos = M.getFirstms(mainTrack) + (M.getLastms(mainTrack) - M.getFirstms(mainTrack)) * (((double)retries)/10.0);
|
||||||
|
}
|
||||||
|
if (!didSeek){
|
||||||
|
onFail("Could not seek to location for image");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void OutJPG::init(Util::Config *cfg){
|
void OutJPG::init(Util::Config *cfg){
|
||||||
|
@ -209,6 +221,11 @@ namespace Mist{
|
||||||
}
|
}
|
||||||
|
|
||||||
initialSeek();
|
initialSeek();
|
||||||
|
size_t mainTrack = getMainSelectedTrack();
|
||||||
|
if (mainTrack == INVALID_TRACK_ID){
|
||||||
|
FAIL_MSG("Could not select valid track");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
int fin = -1, fout = -1, ferr = 2;
|
int fin = -1, fout = -1, ferr = 2;
|
||||||
pid_t ffmpeg = -1;
|
pid_t ffmpeg = -1;
|
||||||
|
@ -253,7 +270,7 @@ namespace Mist{
|
||||||
|
|
||||||
// Send H264 init data in Annex B format
|
// Send H264 init data in Annex B format
|
||||||
MP4::AVCC avccbox;
|
MP4::AVCC avccbox;
|
||||||
avccbox.setPayload(M.getInit(getMainSelectedTrack()));
|
avccbox.setPayload(M.getInit(mainTrack));
|
||||||
ffconn.SendNow(avccbox.asAnnexB());
|
ffconn.SendNow(avccbox.asAnnexB());
|
||||||
INSANE_MSG("Sent init data to ffmpeg...");
|
INSANE_MSG("Sent init data to ffmpeg...");
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue