diff --git a/mediaPlayer/MediaPlayer.cpp b/mediaPlayer/MediaPlayer.cpp index efe0497d9..d2cb8f2e4 100644 --- a/mediaPlayer/MediaPlayer.cpp +++ b/mediaPlayer/MediaPlayer.cpp @@ -101,6 +101,7 @@ namespace Cicada { listener.LoadingStart = loadingStartCallback; listener.LoadingEnd = loadingEndCallback; listener.LoadingProgress = loadingProgressCallback; + listener.Seeking = PlayerSeeking; listener.SeekEnd = PlayerSeekEnd; listener.SubtitleShow = subtitleShowCallback; listener.SubtitleHide = subtitleHideCallback; @@ -893,6 +894,17 @@ namespace Cicada { } } + void MediaPlayer::PlayerSeeking(int64_t seekInCache, void *userData) + { + GET_MEDIA_PLAYER +#ifdef ENABLE_CACHE_MODULE + if (player->mCacheManager != nullptr && seekInCache == 0) { + //not seek in cache + player->mCacheManager->stop("cache stopped by seek"); + } +#endif + } + void MediaPlayer::PlayerSeekEnd(int64_t seekInCache, void *userData) { GET_MEDIA_PLAYER @@ -904,12 +916,6 @@ namespace Cicada { //when seek, reset and open abrmanager player->mAbrManager->Reset(); player->mAbrManager->Start(); -#ifdef ENABLE_CACHE_MODULE - if (player->mCacheManager != nullptr && seekInCache == 0) { - //not seek in cache - player->mCacheManager->stop("cache stopped by seek"); - } -#endif if (player->mCollector) { player->mCollector->ReportSeekEnd(); } diff --git a/mediaPlayer/MediaPlayer.h b/mediaPlayer/MediaPlayer.h index 6ff111f97..4cf320f46 100644 --- a/mediaPlayer/MediaPlayer.h +++ b/mediaPlayer/MediaPlayer.h @@ -350,6 +350,8 @@ namespace Cicada { static void streamChangedSucCallback(int64_t type, const void *Info, void *userData); + static void PlayerSeeking(int64_t seekInCache, void *userData); + static void PlayerSeekEnd(int64_t seekInCache, void *userData); static void PlayerStatusChanged(int64_t oldStatus, int64_t newStatus, void *userData); diff --git a/mediaPlayer/SuperMediaPlayer.cpp b/mediaPlayer/SuperMediaPlayer.cpp index f57f3507d..9c2d14254 100644 --- a/mediaPlayer/SuperMediaPlayer.cpp +++ b/mediaPlayer/SuperMediaPlayer.cpp @@ -3873,6 +3873,8 @@ namespace Cicada { //flush packet queue mSeekInCache = SeekInCache(seekPos); + mPNotifier->NotifySeeking(mSeekInCache); + if (mSeekNeedCatch && !HAVE_VIDEO) { mSeekNeedCatch = false; } diff --git a/mediaPlayer/native_cicada_player_def.h b/mediaPlayer/native_cicada_player_def.h index 83a7b6fbd..9c467b967 100644 --- a/mediaPlayer/native_cicada_player_def.h +++ b/mediaPlayer/native_cicada_player_def.h @@ -83,6 +83,7 @@ typedef struct playerListener_t { playerVoidCallback LoadingEnd; playerVoidCallback AutoPlayStart; + playerType1Callback Seeking; playerType1Callback SeekEnd; playerType1Callback PositionUpdate; playerType1Callback BufferPositionUpdate; diff --git a/mediaPlayer/player_notifier.cpp b/mediaPlayer/player_notifier.cpp index e32ce4836..0a1e653f3 100644 --- a/mediaPlayer/player_notifier.cpp +++ b/mediaPlayer/player_notifier.cpp @@ -331,6 +331,15 @@ namespace Cicada { pushEvent(event); } + void PlayerNotifier::NotifySeeking(bool seekInCache) { + if (!mEnable) { + return; + } + + auto *event = new player_event(seekInCache ? 1 : 0 , mListener.Seeking); + pushEvent(event); + } + void PlayerNotifier::NotifySeekEnd(bool seekInCache) { if (!mEnable || mListener.SeekEnd == nullptr) { diff --git a/mediaPlayer/player_notifier.h b/mediaPlayer/player_notifier.h index fbf00d0ec..dae597b08 100644 --- a/mediaPlayer/player_notifier.h +++ b/mediaPlayer/player_notifier.h @@ -77,6 +77,9 @@ namespace Cicada { void NotifyAutoPlayStart(); void NotifyVideoRendered(int64_t timeMs, int64_t pts); + + void NotifySeeking(bool seekInCache); + private: void NotifyVoidEvent(playerVoidCallback listener);