no commit message

This commit is contained in:
niandeng
2020-09-17 18:40:01 +08:00
parent 4382915d09
commit d957abceaa
283 changed files with 86935 additions and 63 deletions
+240
View File
@@ -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;
}
}
}
}