|
@@ -4,6 +4,16 @@ import { VideoItem } from '../viewmodel/VideoItem';
|
|
|
import { LengthMetrics, SegmentButton,SegmentButtonOptions } from '@kit.ArkUI';
|
|
import { LengthMetrics, SegmentButton,SegmentButtonOptions } from '@kit.ArkUI';
|
|
|
import { getWebdavVideoItems, getWebdavCurrentPlayIndex } from '../pages/WebDavMainPage';
|
|
import { getWebdavVideoItems, getWebdavCurrentPlayIndex } from '../pages/WebDavMainPage';
|
|
|
import { getNavidromeVideoItems, getNavidromeCurrentPlayIndex } from '../common/util/NavidromePlaylistStore';
|
|
import { getNavidromeVideoItems, getNavidromeCurrentPlayIndex } from '../common/util/NavidromePlaylistStore';
|
|
|
|
|
+import {
|
|
|
|
|
+ ImplOnBufferingUpdateListener,
|
|
|
|
|
+ ImplOnCompletionListener,
|
|
|
|
|
+ ImplOnErrorListener,
|
|
|
|
|
+ ImplOnInfoListener,
|
|
|
|
|
+ ImplOnPreparedListener,
|
|
|
|
|
+ ImplOnSeekCompleteListener,
|
|
|
|
|
+ ImplOnTimedTextListener,
|
|
|
|
|
+ ImplOnVideoSizeChangedListener
|
|
|
|
|
+} from '../common/IjkPlayerListenerImpls';
|
|
|
import {
|
|
import {
|
|
|
ButtonFancyModifier,
|
|
ButtonFancyModifier,
|
|
|
ImageFancyModifier,
|
|
ImageFancyModifier,
|
|
@@ -48,6 +58,8 @@ import { effectKit } from '@kit.ArkGraphics2D';
|
|
|
import { ColorConversion } from '../common/util/ColorConversion';
|
|
import { ColorConversion } from '../common/util/ColorConversion';
|
|
|
import { Lyric, LyricController, LyricParser, LyricView2 } from '@seagazer/cclyric';
|
|
import { Lyric, LyricController, LyricParser, LyricView2 } from '@seagazer/cclyric';
|
|
|
import { AvSessionController } from '../controller/AvSessionController';
|
|
import { AvSessionController } from '../controller/AvSessionController';
|
|
|
|
|
+import { EqualizerManager } from '../common/util/EqualizerManager';
|
|
|
|
|
+import { EqualizerViewWithCallback } from './EqualizerView';
|
|
|
import { CastController, CastControllerCallbacks } from '../controller/CastController';
|
|
import { CastController, CastControllerCallbacks } from '../controller/CastController';
|
|
|
import { repairAudioMetadata, convertDsfToWav, getApiLyric,changeMusicCover} from '../common/util/MusicTagUtils';
|
|
import { repairAudioMetadata, convertDsfToWav, getApiLyric,changeMusicCover} from '../common/util/MusicTagUtils';
|
|
|
import { extractHwMediaMetadata, FFMpegTags,Utility } from '../common/util/Utility';
|
|
import { extractHwMediaMetadata, FFMpegTags,Utility } from '../common/util/Utility';
|
|
@@ -810,6 +822,7 @@ export struct LocalMusic {
|
|
|
PreferencesUtil.putSync('isFirstTiped',false)
|
|
PreferencesUtil.putSync('isFirstTiped',false)
|
|
|
}
|
|
}
|
|
|
this.initSetting()
|
|
this.initSetting()
|
|
|
|
|
+ this.syncEqualizerUi();
|
|
|
this.UNKONWN = Utility.resourceToString(this.context, $r('app.string.unknown'));
|
|
this.UNKONWN = Utility.resourceToString(this.context, $r('app.string.unknown'));
|
|
|
Utility.getAppName(getContext(this)).then((appName: string) => {
|
|
Utility.getAppName(getContext(this)).then((appName: string) => {
|
|
|
this.appName = appName
|
|
this.appName = appName
|
|
@@ -850,6 +863,16 @@ export struct LocalMusic {
|
|
|
this.doUpdateData()
|
|
this.doUpdateData()
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
|
|
+ let eventEqualizerChanged: emitter.InnerEvent = { eventId: EventConstants.EVENT_EQUALIZER_CHANGED }
|
|
|
|
|
+ emitter.on(eventEqualizerChanged, () => {
|
|
|
|
|
+ this.syncEqualizerUi();
|
|
|
|
|
+ if (this.mIjkMediaPlayer) {
|
|
|
|
|
+ const equalizerManager = EqualizerManager.getInstance();
|
|
|
|
|
+ equalizerManager.applyToPlayer(this.mIjkMediaPlayer);
|
|
|
|
|
+ this.markEqualizerApplied();
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
// 监听歌单播放请求事件
|
|
// 监听歌单播放请求事件
|
|
|
let eventPlaylistPlay: emitter.InnerEvent = { eventId: EventConstants.EVENT_PLAYLIST_PLAY }
|
|
let eventPlaylistPlay: emitter.InnerEvent = { eventId: EventConstants.EVENT_PLAYLIST_PLAY }
|
|
|
emitter.on(eventPlaylistPlay, async (eventData: emitter.EventData) => {
|
|
emitter.on(eventPlaylistPlay, async (eventData: emitter.EventData) => {
|
|
@@ -1872,6 +1895,7 @@ export struct LocalMusic {
|
|
|
emitter.off(EventConstants.EVENT_SWIPE_BACK_UPDATE);
|
|
emitter.off(EventConstants.EVENT_SWIPE_BACK_UPDATE);
|
|
|
emitter.off(EventConstants.EVENT_SETTING_UPDATE);
|
|
emitter.off(EventConstants.EVENT_SETTING_UPDATE);
|
|
|
emitter.off(EventConstants.EVENT_WEBDAV_METADATA_UPDATED);
|
|
emitter.off(EventConstants.EVENT_WEBDAV_METADATA_UPDATED);
|
|
|
|
|
+ emitter.off(EventConstants.EVENT_EQUALIZER_CHANGED);
|
|
|
this.mDestroyPage = true;
|
|
this.mDestroyPage = true;
|
|
|
this.mIjkMediaPlayer.setScreenOnWhilePlaying(false);
|
|
this.mIjkMediaPlayer.setScreenOnWhilePlaying(false);
|
|
|
if (this.CONTROL_PlayStatus != PlayStatus.INIT) {
|
|
if (this.CONTROL_PlayStatus != PlayStatus.INIT) {
|
|
@@ -3162,6 +3186,15 @@ export struct LocalMusic {
|
|
|
backgroundColor:Color.Transparent,
|
|
backgroundColor:Color.Transparent,
|
|
|
title: { title: 'AB循环' }
|
|
title: { title: 'AB循环' }
|
|
|
})
|
|
})
|
|
|
|
|
+ .bindSheet($$this.isEqualizerSheet, this.EqualizerSheet(), {
|
|
|
|
|
+ height: this.isLandscape ? '90%' : '65%',
|
|
|
|
|
+ dragBar: true,
|
|
|
|
|
+ showClose: true,
|
|
|
|
|
+ preferType: this.currentBreakpoint !== BreakpointTypeEnum.SM ? SheetType.CENTER : SheetType.BOTTOM,
|
|
|
|
|
+ blurStyle: BlurStyle.Thin,
|
|
|
|
|
+ backgroundColor: Color.Transparent,
|
|
|
|
|
+ title: { title: '均衡器' }
|
|
|
|
|
+ })
|
|
|
|
|
|
|
|
Stack() {
|
|
Stack() {
|
|
|
|
|
|
|
@@ -10683,6 +10716,9 @@ export struct LocalMusic {
|
|
|
@Builder
|
|
@Builder
|
|
|
BottomControl() {
|
|
BottomControl() {
|
|
|
Column() {
|
|
Column() {
|
|
|
|
|
+ if (!this.isPhoneLan() && !this.curDisplayIsHiCar) {
|
|
|
|
|
+ this.EqualizerQuickBar()
|
|
|
|
|
+ }
|
|
|
this.TopPlayProgressView()
|
|
this.TopPlayProgressView()
|
|
|
//播放 暂停,下一首,上一首
|
|
//播放 暂停,下一首,上一首
|
|
|
this.playCenterView()
|
|
this.playCenterView()
|
|
@@ -10698,6 +10734,67 @@ export struct LocalMusic {
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ @Builder
|
|
|
|
|
+ private EqualizerQuickBar(): void {
|
|
|
|
|
+ Row() {
|
|
|
|
|
+ Row() {
|
|
|
|
|
+ SymbolGlyph($r('sys.symbol.waveform'))
|
|
|
|
|
+ .fontSize(16)
|
|
|
|
|
+ .fontColor([this.themeColor])
|
|
|
|
|
+ Text('均衡器')
|
|
|
|
|
+ .fontSize(12)
|
|
|
|
|
+ .fontColor(Color.White)
|
|
|
|
|
+ .margin({ left: 6 })
|
|
|
|
|
+ }
|
|
|
|
|
+ .onClick(() => {
|
|
|
|
|
+ this.isEqualizerSheet = true;
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ Blank()
|
|
|
|
|
+
|
|
|
|
|
+ Toggle({ type: ToggleType.Switch, isOn: this.eqCurrentEnabled })
|
|
|
|
|
+ .selectedColor(this.themeColor)
|
|
|
|
|
+ .switchPointColor(Color.White)
|
|
|
|
|
+ .width(42)
|
|
|
|
|
+ .height(22)
|
|
|
|
|
+ .onChange((isOn: boolean) => {
|
|
|
|
|
+ const equalizerManager = EqualizerManager.getInstance();
|
|
|
|
|
+ equalizerManager.enabled = isOn;
|
|
|
|
|
+ this.syncEqualizerUi();
|
|
|
|
|
+ if (this.mIjkMediaPlayer) {
|
|
|
|
|
+ equalizerManager.applyToPlayer(this.mIjkMediaPlayer);
|
|
|
|
|
+ this.markEqualizerApplied();
|
|
|
|
|
+ }
|
|
|
|
|
+ })
|
|
|
|
|
+
|
|
|
|
|
+ Text(this.eqCurrentPresetName)
|
|
|
|
|
+ .fontSize(10)
|
|
|
|
|
+ .fontColor(Color.White)
|
|
|
|
|
+ .margin({ left: 8 })
|
|
|
|
|
+
|
|
|
|
|
+ Text(this.eqAppliedAt > 0 ? '已生效' : '未应用')
|
|
|
|
|
+ .fontSize(10)
|
|
|
|
|
+ .fontColor(this.eqAppliedAt > 0 ? this.themeColor : Color.White)
|
|
|
|
|
+ .margin({ left: 8 })
|
|
|
|
|
+
|
|
|
|
|
+ Button('应用')
|
|
|
|
|
+ .fontSize(11)
|
|
|
|
|
+ .fontColor(Color.White)
|
|
|
|
|
+ .backgroundColor(this.eqAppliedAt > 0 ? this.themeColor : '#666666')
|
|
|
|
|
+ .height(24)
|
|
|
|
|
+ .padding({ left: 10, right: 10 })
|
|
|
|
|
+ .borderRadius(12)
|
|
|
|
|
+ .enabled(!this.eqApplying && this.CONTROL_PlayStatus !== PlayStatus.INIT)
|
|
|
|
|
+ .onClick(() => {
|
|
|
|
|
+ this.applyEqualizerToCurrentPlayback();
|
|
|
|
|
+ })
|
|
|
|
|
+ }
|
|
|
|
|
+ .width(this.isLandscape ? '88%' : '95%')
|
|
|
|
|
+ .padding({ left: 12, right: 12, top: 6, bottom: 6 })
|
|
|
|
|
+ .backgroundColor('rgba(0,0,0,0.32)')
|
|
|
|
|
+ .borderRadius(12)
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
@Builder
|
|
@Builder
|
|
|
playMenuBuilder(){
|
|
playMenuBuilder(){
|
|
|
Image($r('app.media.menu'))
|
|
Image($r('app.media.menu'))
|
|
@@ -12875,6 +12972,8 @@ export struct LocalMusic {
|
|
|
|
|
|
|
|
{ id: 9, image: $r('app.media.volume_white'), title: '调整音量' },
|
|
{ id: 9, image: $r('app.media.volume_white'), title: '调整音量' },
|
|
|
|
|
|
|
|
|
|
+ { id: 24, image: $r('app.media.volume_white'), title: '均衡器' },
|
|
|
|
|
+
|
|
|
// { id: 6, image: $r('app.media.memory'), title: '记忆播放' },
|
|
// { id: 6, image: $r('app.media.memory'), title: '记忆播放' },
|
|
|
|
|
|
|
|
|
|
|
|
@@ -12978,6 +13077,9 @@ export struct LocalMusic {
|
|
|
case 20://AB循环
|
|
case 20://AB循环
|
|
|
this.isABSheet = !this.isABSheet
|
|
this.isABSheet = !this.isABSheet
|
|
|
break;
|
|
break;
|
|
|
|
|
+ case 24://均衡器
|
|
|
|
|
+ this.isEqualizerSheet = !this.isEqualizerSheet
|
|
|
|
|
+ break;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
}
|
|
}
|
|
@@ -12988,6 +13090,11 @@ export struct LocalMusic {
|
|
|
@State jumpATime:number = 0
|
|
@State jumpATime:number = 0
|
|
|
@State jumpBTime:number = 0
|
|
@State jumpBTime:number = 0
|
|
|
@State isABSheet:boolean = false
|
|
@State isABSheet:boolean = false
|
|
|
|
|
+ @State isEqualizerSheet: boolean = false
|
|
|
|
|
+ @State eqApplying: boolean = false
|
|
|
|
|
+ @State eqAppliedAt: number = 0
|
|
|
|
|
+ @State eqCurrentPresetName: string = '正常'
|
|
|
|
|
+ @State eqCurrentEnabled: boolean = false
|
|
|
|
|
|
|
|
@Builder
|
|
@Builder
|
|
|
ABLoopSheet() {
|
|
ABLoopSheet() {
|
|
@@ -13026,6 +13133,105 @@ export struct LocalMusic {
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ private syncEqualizerUi(): void {
|
|
|
|
|
+ const equalizerManager = EqualizerManager.getInstance();
|
|
|
|
|
+ this.eqCurrentEnabled = equalizerManager.enabled;
|
|
|
|
|
+ this.eqCurrentPresetName = equalizerManager.getPresetDisplayName(equalizerManager.currentPresetId);
|
|
|
|
|
+ if (this.CONTROL_PlayStatus === PlayStatus.INIT) {
|
|
|
|
|
+ this.eqAppliedAt = 0;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private markEqualizerApplied(): void {
|
|
|
|
|
+ const equalizerManager = EqualizerManager.getInstance();
|
|
|
|
|
+ this.eqCurrentEnabled = equalizerManager.enabled;
|
|
|
|
|
+ this.eqCurrentPresetName = equalizerManager.getPresetDisplayName(equalizerManager.currentPresetId);
|
|
|
|
|
+ this.eqAppliedAt = Date.now();
|
|
|
|
|
+ this.eqApplying = false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private applyEqualizerToCurrentPlayback(): void {
|
|
|
|
|
+ if (this.eqApplying) {
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ if (this.castControllerWrapper && this.isCastPlaying) {
|
|
|
|
|
+ ToastUtil.showToast('投播模式暂不支持实时均衡器');
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ if (!this.currentSong || !this.mIjkMediaPlayer) {
|
|
|
|
|
+ ToastUtil.showToast('暂无可应用的播放');
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
+ this.eqApplying = true;
|
|
|
|
|
+ try {
|
|
|
|
|
+ const equalizerManager = EqualizerManager.getInstance();
|
|
|
|
|
+ equalizerManager.applyToPlayer(this.mIjkMediaPlayer);
|
|
|
|
|
+ this.markEqualizerApplied();
|
|
|
|
|
+ ToastUtil.showToast('均衡器已实时生效');
|
|
|
|
|
+ } catch (error) {
|
|
|
|
|
+ this.eqApplying = false;
|
|
|
|
|
+ Logger.warn(TAG, `heanup 应用均衡器失败: ${(error as Error).message}`);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Builder
|
|
|
|
|
+ private EqualizerApplyStatusBar(): void {
|
|
|
|
|
+ Row() {
|
|
|
|
|
+ Column() {
|
|
|
|
|
+ Text(`均衡器:${this.eqCurrentEnabled ? '开' : '关'} · ${this.eqCurrentPresetName}`)
|
|
|
|
|
+ .fontSize(12)
|
|
|
|
|
+ .fontColor($r('app.color.text_color'))
|
|
|
|
|
+ Text(this.eqAppliedAt > 0 ? '当前播放:已生效' : '当前播放:未应用')
|
|
|
|
|
+ .fontSize(10)
|
|
|
|
|
+ .fontColor(this.eqAppliedAt > 0 ? this.themeColor : Color.Gray)
|
|
|
|
|
+ }
|
|
|
|
|
+ .alignItems(HorizontalAlign.Start)
|
|
|
|
|
+
|
|
|
|
|
+ Blank()
|
|
|
|
|
+
|
|
|
|
|
+ Button('重新应用')
|
|
|
|
|
+ .fontSize(12)
|
|
|
|
|
+ .fontColor(Color.White)
|
|
|
|
|
+ .backgroundColor('#666666')
|
|
|
|
|
+ .height(28)
|
|
|
|
|
+ .padding({ left: 14, right: 14 })
|
|
|
|
|
+ .borderRadius(14)
|
|
|
|
|
+ .enabled(!this.eqApplying && this.CONTROL_PlayStatus !== PlayStatus.INIT)
|
|
|
|
|
+ .onClick(() => {
|
|
|
|
|
+ this.applyEqualizerToCurrentPlayback();
|
|
|
|
|
+ })
|
|
|
|
|
+ }
|
|
|
|
|
+ .width('100%')
|
|
|
|
|
+ .padding({ left: 12, right: 12, top: 8, bottom: 8 })
|
|
|
|
|
+ .backgroundColor($r('app.color.settings_background_main'))
|
|
|
|
|
+ .borderRadius(12)
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ @Builder
|
|
|
|
|
+ EqualizerSheet() {
|
|
|
|
|
+ Column() {
|
|
|
|
|
+ Column() {
|
|
|
|
|
+ EqualizerViewWithCallback({
|
|
|
|
|
+ onEqualizerChanged: () => {
|
|
|
|
|
+ this.syncEqualizerUi();
|
|
|
|
|
+ if (this.mIjkMediaPlayer) {
|
|
|
|
|
+ const equalizerManager = EqualizerManager.getInstance();
|
|
|
|
|
+ equalizerManager.applyToPlayer(this.mIjkMediaPlayer);
|
|
|
|
|
+ this.markEqualizerApplied();
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ })
|
|
|
|
|
+ }
|
|
|
|
|
+ .margin({ top: 8 })
|
|
|
|
|
+
|
|
|
|
|
+ Column() {
|
|
|
|
|
+ this.EqualizerApplyStatusBar()
|
|
|
|
|
+ }
|
|
|
|
|
+ .margin({ top: 8 })
|
|
|
|
|
+ }
|
|
|
|
|
+ .padding({ left: 12, right: 12, bottom: 20 })
|
|
|
|
|
+ .width('100%')
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
//开始AB循环
|
|
//开始AB循环
|
|
|
startABLoop(){
|
|
startABLoop(){
|
|
@@ -13745,8 +13951,8 @@ export struct LocalMusic {
|
|
|
this.mIjkMediaPlayer.reset();
|
|
this.mIjkMediaPlayer.reset();
|
|
|
}
|
|
}
|
|
|
this.CONTROL_PlayStatus = PlayStatus.PLAY;
|
|
this.CONTROL_PlayStatus = PlayStatus.PLAY;
|
|
|
- //设置debug模式
|
|
|
|
|
- this.mIjkMediaPlayer.setDebug(false);
|
|
|
|
|
|
|
+ //设置debug模式(用于EQ日志采集)
|
|
|
|
|
+ this.mIjkMediaPlayer.setDebug(true);
|
|
|
//初始化配置
|
|
//初始化配置
|
|
|
this.mIjkMediaPlayer.native_setup();
|
|
this.mIjkMediaPlayer.native_setup();
|
|
|
// 初始化配置后需要重新设置音频流音量,否则音量为默认值1.0 针对dsf格式设置最大值1.0
|
|
// 初始化配置后需要重新设置音频流音量,否则音量为默认值1.0 针对dsf格式设置最大值1.0
|
|
@@ -13899,8 +14105,8 @@ export struct LocalMusic {
|
|
|
LogUtils.getInstance().LOGI('getSpeed--' + Speed)
|
|
LogUtils.getInstance().LOGI('getSpeed--' + Speed)
|
|
|
//是否开启循环播放
|
|
//是否开启循环播放
|
|
|
// this.mIjkMediaPlayer.setLoopCount(this.loop);
|
|
// this.mIjkMediaPlayer.setLoopCount(this.loop);
|
|
|
- let mOnVideoSizeChangedListener: OnVideoSizeChangedListener = {
|
|
|
|
|
- onVideoSizeChanged: (width: number, height: number, sar_num: number, sar_den: number) => {
|
|
|
|
|
|
|
+ let mOnVideoSizeChangedListener: OnVideoSizeChangedListener = new ImplOnVideoSizeChangedListener(
|
|
|
|
|
+ (width: number, height: number, sar_num: number, sar_den: number) => {
|
|
|
if (height === 0) {
|
|
if (height === 0) {
|
|
|
return;
|
|
return;
|
|
|
}
|
|
}
|
|
@@ -13919,10 +14125,10 @@ export struct LocalMusic {
|
|
|
|
|
|
|
|
that.hideLoadIng();
|
|
that.hideLoadIng();
|
|
|
}
|
|
}
|
|
|
- }
|
|
|
|
|
|
|
+ );
|
|
|
this.mIjkMediaPlayer.setOnVideoSizeChangedListener(mOnVideoSizeChangedListener);
|
|
this.mIjkMediaPlayer.setOnVideoSizeChangedListener(mOnVideoSizeChangedListener);
|
|
|
- let mOnPreparedListener: OnPreparedListener = {
|
|
|
|
|
- onPrepared: async () => {
|
|
|
|
|
|
|
+ let mOnPreparedListener: OnPreparedListener = new ImplOnPreparedListener(
|
|
|
|
|
+ async () => {
|
|
|
LogUtils.getInstance().LOGI("setOnPreparedListener-->go");
|
|
LogUtils.getInstance().LOGI("setOnPreparedListener-->go");
|
|
|
// 隐藏加载进度
|
|
// 隐藏加载进度
|
|
|
this.isPlayerLoading = false;
|
|
this.isPlayerLoading = false;
|
|
@@ -14149,17 +14355,17 @@ export struct LocalMusic {
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
- }
|
|
|
|
|
|
|
+ );
|
|
|
this.mIjkMediaPlayer.setOnPreparedListener(mOnPreparedListener);
|
|
this.mIjkMediaPlayer.setOnPreparedListener(mOnPreparedListener);
|
|
|
|
|
|
|
|
- let mOnTimedTextListener: OnTimedTextListener = {
|
|
|
|
|
- onTimedText: () => {
|
|
|
|
|
|
|
+ let mOnTimedTextListener: OnTimedTextListener = new ImplOnTimedTextListener(
|
|
|
|
|
+ (text: string) => {
|
|
|
}
|
|
}
|
|
|
- }
|
|
|
|
|
|
|
+ );
|
|
|
this.mIjkMediaPlayer.setOnTimedTextListener(mOnTimedTextListener)
|
|
this.mIjkMediaPlayer.setOnTimedTextListener(mOnTimedTextListener)
|
|
|
|
|
|
|
|
- let mOnCompletionListener: OnCompletionListener = {
|
|
|
|
|
- onCompletion: () => {
|
|
|
|
|
|
|
+ let mOnCompletionListener: OnCompletionListener = new ImplOnCompletionListener(
|
|
|
|
|
+ () => {
|
|
|
|
|
|
|
|
LogUtils.getInstance().LOGI("OnCompletionListener-->go")
|
|
LogUtils.getInstance().LOGI("OnCompletionListener-->go")
|
|
|
if (this.playType == 0) { //0:连续播放 1:单片重复播放 2:正常播放
|
|
if (this.playType == 0) { //0:连续播放 1:单片重复播放 2:正常播放
|
|
@@ -14189,11 +14395,11 @@ export struct LocalMusic {
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
- }
|
|
|
|
|
|
|
+ );
|
|
|
this.mIjkMediaPlayer.setOnCompletionListener(mOnCompletionListener);
|
|
this.mIjkMediaPlayer.setOnCompletionListener(mOnCompletionListener);
|
|
|
|
|
|
|
|
- let mOnBufferingUpdateListener: OnBufferingUpdateListener = {
|
|
|
|
|
- onBufferingUpdate: (percent: number) => {
|
|
|
|
|
|
|
+ let mOnBufferingUpdateListener: OnBufferingUpdateListener = new ImplOnBufferingUpdateListener(
|
|
|
|
|
+ (percent: number) => {
|
|
|
|
|
|
|
|
LogUtils.getInstance().LOGI("OnBufferingUpdateListener-->go:" + percent);
|
|
LogUtils.getInstance().LOGI("OnBufferingUpdateListener-->go:" + percent);
|
|
|
let MediaInfo = this.mIjkMediaPlayer.getMediaInfo()
|
|
let MediaInfo = this.mIjkMediaPlayer.getMediaInfo()
|
|
@@ -14216,11 +14422,11 @@ export struct LocalMusic {
|
|
|
let Looping = this.mIjkMediaPlayer.isLooping()
|
|
let Looping = this.mIjkMediaPlayer.isLooping()
|
|
|
LogUtils.getInstance().LOGI('isLooping---' + Looping);
|
|
LogUtils.getInstance().LOGI('isLooping---' + Looping);
|
|
|
}
|
|
}
|
|
|
- }
|
|
|
|
|
|
|
+ );
|
|
|
this.mIjkMediaPlayer.setOnBufferingUpdateListener(mOnBufferingUpdateListener);
|
|
this.mIjkMediaPlayer.setOnBufferingUpdateListener(mOnBufferingUpdateListener);
|
|
|
|
|
|
|
|
- let mOnSeekCompleteListener: OnSeekCompleteListener = {
|
|
|
|
|
- onSeekComplete: () => {
|
|
|
|
|
|
|
+ let mOnSeekCompleteListener: OnSeekCompleteListener = new ImplOnSeekCompleteListener(
|
|
|
|
|
+ () => {
|
|
|
LogUtils.getInstance().LOGI("OnSeekCompleteListener-->go");
|
|
LogUtils.getInstance().LOGI("OnSeekCompleteListener-->go");
|
|
|
console.info('onecold startPlayOrResumePlay 10643')
|
|
console.info('onecold startPlayOrResumePlay 10643')
|
|
|
// seek 完成,延迟恢复播放,确保 ijkplayer 内部状态完全稳定
|
|
// seek 完成,延迟恢复播放,确保 ijkplayer 内部状态完全稳定
|
|
@@ -14232,20 +14438,20 @@ export struct LocalMusic {
|
|
|
}, 200); // 延迟200ms,确保ijkplayer内部状态稳定
|
|
}, 200); // 延迟200ms,确保ijkplayer内部状态稳定
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
- }
|
|
|
|
|
|
|
+ );
|
|
|
this.mIjkMediaPlayer.setOnSeekCompleteListener(mOnSeekCompleteListener);
|
|
this.mIjkMediaPlayer.setOnSeekCompleteListener(mOnSeekCompleteListener);
|
|
|
|
|
|
|
|
- let mOnInfoListener: OnInfoListener = {
|
|
|
|
|
- onInfo: (what: number, extra: number) => {
|
|
|
|
|
|
|
+ let mOnInfoListener: OnInfoListener = new ImplOnInfoListener(
|
|
|
|
|
+ (what: number, extra: number) => {
|
|
|
LogUtils.getInstance().LOGI("OnInfoListener-->go:" + what + "===" + extra);
|
|
LogUtils.getInstance().LOGI("OnInfoListener-->go:" + what + "===" + extra);
|
|
|
that.hideLoadIng();
|
|
that.hideLoadIng();
|
|
|
}
|
|
}
|
|
|
- }
|
|
|
|
|
|
|
+ );
|
|
|
this.mIjkMediaPlayer.setOnInfoListener(mOnInfoListener);
|
|
this.mIjkMediaPlayer.setOnInfoListener(mOnInfoListener);
|
|
|
|
|
|
|
|
|
|
|
|
|
- let mOnErrorListener: OnErrorListener = {
|
|
|
|
|
- onError: (what: number, extra: number) => {
|
|
|
|
|
|
|
+ let mOnErrorListener: OnErrorListener = new ImplOnErrorListener(
|
|
|
|
|
+ (what: number, extra: number) => {
|
|
|
// 隐藏加载进度
|
|
// 隐藏加载进度
|
|
|
this.isPlayerLoading = false;
|
|
this.isPlayerLoading = false;
|
|
|
this.stopProgressTask();
|
|
this.stopProgressTask();
|
|
@@ -14297,13 +14503,24 @@ export struct LocalMusic {
|
|
|
}
|
|
}
|
|
|
that.hideLoadIng();
|
|
that.hideLoadIng();
|
|
|
}
|
|
}
|
|
|
- }
|
|
|
|
|
|
|
+ );
|
|
|
|
|
|
|
|
|
|
|
|
|
this.mIjkMediaPlayer.setOnErrorListener(mOnErrorListener);
|
|
this.mIjkMediaPlayer.setOnErrorListener(mOnErrorListener);
|
|
|
|
|
|
|
|
this.mIjkMediaPlayer.setMessageListener();
|
|
this.mIjkMediaPlayer.setMessageListener();
|
|
|
|
|
|
|
|
|
|
+ // 应用均衡器设置
|
|
|
|
|
+ try {
|
|
|
|
|
+ const equalizerManager = EqualizerManager.getInstance();
|
|
|
|
|
+ equalizerManager.applyToPlayer(this.mIjkMediaPlayer);
|
|
|
|
|
+ Logger.info(TAG, 'heanup 均衡器设置已应用');
|
|
|
|
|
+ this.markEqualizerApplied();
|
|
|
|
|
+ } catch (eqError) {
|
|
|
|
|
+ Logger.warn(TAG, `heanup 应用均衡器失败: ${(eqError as Error).message}`);
|
|
|
|
|
+ this.eqApplying = false;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
this.mIjkMediaPlayer.prepareAsync();
|
|
this.mIjkMediaPlayer.prepareAsync();
|
|
|
|
|
|
|
|
this.mIjkMediaPlayer.start();
|
|
this.mIjkMediaPlayer.start();
|