no commit message
This commit is contained in:
@@ -0,0 +1,240 @@
|
||||
package ckaction.player {
|
||||
import org.mangui.hls.HLS;
|
||||
import org.mangui.hls.event.HLSEvent;
|
||||
import org.mangui.hls.utils.Params2Settings;
|
||||
import org.mangui.hls.constant.HLSPlayStates;
|
||||
import org.mangui.hls.model.Level;
|
||||
import flash.display.Stage;
|
||||
import flash.events.NetStatusEvent;
|
||||
import org.mangui.hls.HLSSettings;
|
||||
import flash.media.SoundTransform;
|
||||
import ckaction.C.C;
|
||||
import flash.events.Event;
|
||||
|
||||
public class httpm3u8 {
|
||||
public var videoUrl: String = "";
|
||||
|
||||
public var netStatus: Function = null,
|
||||
streamSendOut: Function = null,
|
||||
error: Function = null; //发送流状态的函数,发送流的函数,统一用来报错的函数
|
||||
public var definitionList: Function = null,
|
||||
definitionNow: Function = null;
|
||||
public var speedFun:Function=null;
|
||||
public var stage: Stage = null;
|
||||
public var usehardwareeecoder:Boolean=false;
|
||||
private var hls: HLS = null;
|
||||
private var isClear: Boolean = false; //默认不清除
|
||||
private var vWidth: int = 0,
|
||||
vHeight: int = 0,
|
||||
time: Number = 0,
|
||||
duration: Number = 0,
|
||||
bytesTotal: int = 0,
|
||||
bytesLoaded: int = 0;
|
||||
private var urlArr: Array = [];
|
||||
public function httpm3u8() {
|
||||
// constructor code
|
||||
}
|
||||
public function load(eve: Boolean = true): void {
|
||||
if (C.CONFIG["flashvars"]["debug"]) {
|
||||
org.mangui.hls.HLSSettings.logInfo = true;
|
||||
org.mangui.hls.HLSSettings.logDebug2 = true;
|
||||
org.mangui.hls.HLSSettings.logWarn = true;
|
||||
org.mangui.hls.HLSSettings.logError = true;
|
||||
}
|
||||
org.mangui.hls.HLSSettings.maxBufferLength = C.CONFIG["config"]["m3u8MaxBufferLength"];
|
||||
if (isClear) { //如果已被清除,则不进行下面的动作
|
||||
return;
|
||||
}
|
||||
hls = new HLS();
|
||||
hls.stage = stage;
|
||||
hls.addEventListener(HLSEvent.PLAYBACK_COMPLETE, completeHandler);
|
||||
hls.addEventListener(HLSEvent.ERROR, errorHandler);
|
||||
hls.addEventListener(HLSEvent.MANIFEST_LOADED, manifestHandler);
|
||||
hls.addEventListener(HLSEvent.MEDIA_TIME, mediaTimeHandler);
|
||||
hls.addEventListener(HLSEvent.PLAYBACK_STATE, stateHandler);
|
||||
hls.addEventListener(HLSEvent.FRAGMENT_LOADING, fragmentHandler);
|
||||
hls.addEventListener(HLSEvent.FRAGMENT_PLAYING, fragmentPlayingHandler);
|
||||
hls.addEventListener(HLSEvent.ID3_UPDATED, ID3Handler);
|
||||
hls.addEventListener(HLSEvent.FRAGMENT_LOADED, fragmentLoadedHandler);
|
||||
hls.addEventListener(HLSEvent.LOADED_BYTES,loadedBytesHandler);
|
||||
hls.stream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
|
||||
try{
|
||||
hls.stream.useHardwareDecoder=usehardwareeecoder;
|
||||
}
|
||||
catch(error:Event){
|
||||
|
||||
}
|
||||
hls.load(videoUrl);
|
||||
}
|
||||
private function fragmentLoadedHandler(event: HLSEvent): void {
|
||||
if (bytesLoaded < bytesTotal) {
|
||||
bytesLoaded++;
|
||||
}
|
||||
}
|
||||
private function loadedBytesHandler(event: HLSEvent): void {
|
||||
trace("加载量:",event.loadedBytes);
|
||||
speedFun(event.loadedBytes);
|
||||
}
|
||||
private function completeHandler(event: HLSEvent): void {
|
||||
//trace("hls:completeHandler", event);
|
||||
}
|
||||
private function errorHandler(event: HLSEvent): void {
|
||||
//trace("hls:errorHandler", event);
|
||||
error(C.CONFIG["language"]["error"]["streamNotFound"]);
|
||||
clear();
|
||||
}
|
||||
private function manifestHandler(event: HLSEvent): void { //可以播放了
|
||||
trace("可以进行播放====");
|
||||
var i: int = 0;
|
||||
var len: int = event.levels.length;
|
||||
while (i < len) {
|
||||
//trace("==",event.levels[i].url);
|
||||
urlArr.push(event.levels[i].url);
|
||||
i++;
|
||||
}
|
||||
trace(event.levels[hls.startLevel].url);
|
||||
if (urlArr.length > 1) {
|
||||
definitionList(urlArr, hls.startLevel);
|
||||
}
|
||||
bytesTotal = event.levels[hls.startLevel].fragments.length;
|
||||
if (isClear) {
|
||||
return;
|
||||
}
|
||||
hls.stream.play();
|
||||
duration = event.levels[hls.startLevel].duration;
|
||||
netStatus("NetConnection.Connect.Success");
|
||||
}
|
||||
private function mediaTimeHandler(event: HLSEvent): void {
|
||||
//监听时间改变
|
||||
time = Math.max(0, event.mediatime.position);
|
||||
|
||||
}
|
||||
private function stateHandler(event: HLSEvent) {
|
||||
if (event.level < urlArr.length - 1) {
|
||||
definitionNow(event.level);
|
||||
}
|
||||
switch (event.state) {
|
||||
case HLSPlayStates.PLAYING_BUFFERING:
|
||||
break;
|
||||
case HLSPlayStates.PAUSED_BUFFERING:
|
||||
break;
|
||||
case HLSPlayStates.PLAYING:
|
||||
break;
|
||||
case HLSPlayStates.PAUSED:
|
||||
break;
|
||||
case HLSPlayStates.IDLE: //播放结束
|
||||
netStatus("NetStream.Play.Stop");
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
private function fragmentHandler(event: HLSEvent): void {
|
||||
//trace("hls:fragmentHandler", event.playMetrics)
|
||||
}
|
||||
private function ID3Handler(event: HLSEvent) {
|
||||
//trace("hls:ID3Handler", event);
|
||||
}
|
||||
private function netStatusHandler(event: NetStatusEvent): void {
|
||||
//trace("========",event.info.code);
|
||||
netStatus(event.info.code);
|
||||
}
|
||||
private function fragmentPlayingHandler(event: HLSEvent): void {
|
||||
if (vWidth == 0 && vHeight == 0) {
|
||||
vWidth = event.playMetrics.video_width;
|
||||
vHeight = event.playMetrics.video_height;
|
||||
hls.stream.pause();
|
||||
var metaDataObj: Object = {
|
||||
netStream: hls.stream,
|
||||
type: "[object HLSNetStream]",
|
||||
metaData: {
|
||||
width: vWidth,
|
||||
height: vHeight,
|
||||
duration: duration,
|
||||
bytesTotal: bytesTotal
|
||||
|
||||
}
|
||||
};
|
||||
//模拟发送监听状态
|
||||
netStatus("NetStream.Play.Start");
|
||||
streamSendOut(metaDataObj);
|
||||
}
|
||||
trace("hls:fragmentPlayingHandler", event);
|
||||
|
||||
}
|
||||
public function videoVolume(val: Number = 0): void { //修改音量
|
||||
var v: SoundTransform = hls.stream.soundTransform;
|
||||
v.volume = val;
|
||||
if (hls.stream) {
|
||||
hls.stream.soundTransform = v;
|
||||
}
|
||||
|
||||
}
|
||||
public function videoSeek(time: Number = 0): void {
|
||||
if (hls.stream) {
|
||||
var n: int = time/(duration / bytesTotal);
|
||||
if (bytesLoaded < n) {
|
||||
bytesLoaded = n;
|
||||
}
|
||||
hls.stream.seek(time);
|
||||
}
|
||||
}
|
||||
//提供给外部调用使用
|
||||
public function getTime(): Number {
|
||||
return time;
|
||||
}
|
||||
public function getDuration(): Number {
|
||||
return duration;
|
||||
}
|
||||
public function getBytesLoaded(): Number {
|
||||
return bytesLoaded;
|
||||
}
|
||||
public function getBytesTotal(): Number {
|
||||
return bytesTotal;
|
||||
}
|
||||
public function getBufferTime(): Number {
|
||||
if (hls.stream != null) {
|
||||
return hls.stream.bufferTime;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
public function getBufferLength(): Number {
|
||||
if (hls.stream != null) {
|
||||
return hls.stream.bufferLength;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
public function videoPlay(): void {
|
||||
trace("==执行了m3u8-videoPlay");
|
||||
if (hls.stream != null) {
|
||||
hls.stream.resume();
|
||||
}
|
||||
}
|
||||
public function videoPause(): void {
|
||||
if (hls.stream != null) {
|
||||
hls.stream.pause();
|
||||
}
|
||||
}
|
||||
//提供给外部调用结束
|
||||
public function clear(): void {
|
||||
isClear = true;
|
||||
if (hls) {
|
||||
hls.removeEventListener(HLSEvent.PLAYBACK_COMPLETE, completeHandler);
|
||||
hls.removeEventListener(HLSEvent.ERROR, errorHandler);
|
||||
hls.removeEventListener(HLSEvent.MANIFEST_LOADED, manifestHandler);
|
||||
hls.removeEventListener(HLSEvent.MEDIA_TIME, mediaTimeHandler);
|
||||
hls.removeEventListener(HLSEvent.PLAYBACK_STATE, stateHandler);
|
||||
hls.removeEventListener(HLSEvent.FRAGMENT_LOADING, fragmentHandler);
|
||||
hls.removeEventListener(HLSEvent.FRAGMENT_PLAYING, fragmentPlayingHandler);
|
||||
hls.removeEventListener(HLSEvent.ID3_UPDATED, ID3Handler);
|
||||
hls.removeEventListener(HLSEvent.FRAGMENT_LOADED, fragmentLoadedHandler);
|
||||
hls.removeEventListener(HLSEvent.LOADED_BYTES,loadedBytesHandler);
|
||||
hls.stream.removeEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
|
||||
hls.stream.close();
|
||||
hls = null;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user