67 lines
3.1 KiB
ActionScript
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;
|
|
}
|
|
}
|
|
}
|
|
}
|