Files
moeplayer/source/org/mangui/hls/demux/DemuxHelper.as
T
2020-09-17 18:40:01 +08:00

67 lines
3.1 KiB
ActionScript

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package org.mangui.hls.demux {
import flash.utils.ByteArray;
import org.mangui.hls.model.Level;
CONFIG::LOGGING {
import org.mangui.hls.utils.Log;
}
public class DemuxHelper {
public static function probe(data : ByteArray,
level : Level,
audioselect : Function,
progress : Function,
complete : Function,
error : Function,
videometadata : Function,
id3tagfound : Function,
audioOnly : Boolean) : Demuxer {
data.position = 0;
CONFIG::LOGGING {
Log.debug("probe fragment type");
}
var aac_match : Boolean = AACDemuxer.probe(data);
var mp3_match : Boolean = MP3Demuxer.probe(data);
var ts_match : Boolean = TSDemuxer.probe(data);
CONFIG::LOGGING {
Log.debug("AAC/MP3/TS match:" + aac_match + "/" + mp3_match + "/" + ts_match);
}
/* prioritize level info :
* if ts_match && codec_avc => TS demuxer
* if aac_match && codec_aac => AAC demuxer
* if mp3_match && codec_mp3 => MP3 demuxer
* if no codec info in Manifest, use fallback order : AAC/MP3/TS
*/
if (ts_match && level.codec_h264) {
CONFIG::LOGGING {
Log.debug("TS match + H264 signaled in Manifest, use TS demuxer");
}
return new TSDemuxer(audioselect, progress, complete, error, videometadata, audioOnly);
} else if (aac_match && level.codec_aac) {
CONFIG::LOGGING {
Log.debug("AAC match + AAC signaled in Manifest, use AAC demuxer");
}
return new AACDemuxer(audioselect, progress, complete, error, id3tagfound);
} else if (mp3_match && level.codec_mp3) {
CONFIG::LOGGING {
Log.debug("MP3 match + MP3 signaled in Manifest, use MP3 demuxer");
}
return new MP3Demuxer(audioselect, progress, complete, error, id3tagfound);
} else if (aac_match) {
return new AACDemuxer(audioselect, progress, complete, error, id3tagfound);
} else if (mp3_match) {
return new MP3Demuxer(audioselect, progress, complete, error, id3tagfound);
} else if (ts_match) {
return new TSDemuxer(audioselect, progress, complete, error, videometadata, audioOnly);
} else {
CONFIG::LOGGING {
Log.debug("probe fails");
}
return null;
}
}
}
}