mohe_native_player 1.10.21 copy "mohe_native_player: ^1.10.21" to clipboard
mohe_native_player: ^1.10.21 copied to clipboard

A Flutter native video player plugin for iOS and Android with full-featured controls, HLS/DASH support, danmaku, DLNA casting, PiP, and more.

1.10.21 #

  • fix(ios): prevent short-drama playback from auto-entering PiP after PiP is disabled and the app goes to background.

1.10.20 #

  • fix(ios): preserve Flutter-hidden native control bar state when entering landscape fullscreen, preventing duplicate progress bars when Flutter renders its own controls.

1.10.19 #

  • fix(ios): hide the portrait back button during fullscreen so it no longer duplicates the landscape control-bar back button.
  • fix(ios): refresh mediaInfo when presentationSize arrives after readyToPlay, and reset stale media metadata during engine/video switches.
  • fix(android): show cellular generation text next to the landscape status-bar cellular icon.

1.10.18 #

  • fix(ios): restore the mediaInfo event after sync overwrite.
  • fix(ios): reset mediaInfo on VLC fallback and guard vlcAdapterReadyToPlay handling.
  • sync(ios): update bundled iLookPlayerCore to ilook-ios-player v1.0.497.

1.10.17 #

  • fix(android): remove the duplicated ShortDramaImmersiveCoordinator.forceRestore(Activity) method so mohe_native_player compiles on Android.

1.10.16 #

  • fix(android): restoreSystemUI now calls ShortDramaImmersiveCoordinator.forceRestore() to unconditionally reset immersive state and restore system bars, preventing permanent status-bar hide when refCount is imbalanced.
  • fix(ios): default isPiPEnabled to YES, aligning with native player defaults.
  • fix(ios): detect AVPlayerItemStatusFailed in recoverFromBackgroundIfNeeded and escalate to recoverAfterLongBackground (replaceCurrentItem) so a background-failed item no longer blocks recovery.
  • feat(ios): add isLayerReadyForDisplay property to FFmpegDecryptPlayer / DecryptFileAVPlayer for callers to detect AVPlayer render channel health after background.

1.10.13 #

  • fix(ios): add instance guards to all VLC/FFmpeg delegate callbacks — prevents stale engine instances from firing error events, corrupting seek/loading UI state, or leaking CMSampleBuffers on engine switch.

1.10.12 #

  • feat(ios): add mediaInfo event (fires once when both duration and video size are available), aligning with Android behavior. All three engines (FFmpeg / AVPlayer / VLC) supported.
  • feat(ios): PiP handoff session — preserves background playback state across episode switches during PiP, fixing black-screen freeze on didStopPictureInPicture.
  • feat(ios): recoverAfterLongBackground uses replaceCurrentItemWithPlayerItem to rebuild the RemoteXPC render channel after long background/PiP.
  • fix(ios): memory-warning handler now only evicts paused instances, preserving playing and stalling instances.
  • fix(ios): stall recovery re-applies user playback rate via playbackLikelyToKeepUp KVO.
  • fix(ios): lockcomplete duplicate-fire guard; volume KVO dedup for multi-instance short-drama.
  • feat(ios/android): PlayerController.restoreSystemUI() — restore system bars after exiting short-drama immersive mode (Android functional; iOS no-op).
  • fix(dart): commands issued before the platform channel is ready are now queued and flushed automatically, eliminating initialization race conditions.

1.10.11 #

  • fix(android): fix PiP aspect ratio flash and incorrect view restore on Samsung One UI. setPictureInPictureParams() now only fires for the active PiP player; layout restore always uses MATCH_PARENT so the view fills the container regardless of when reparenting occurred.

1.10.10 #

  • fix(android): drama videos rendered shrunk inside landscape PiP on certain OEM ROMs (Flutter HC PlatformViewWrapper rebounding inline-mode layout params before TextureView could push the correct frame). Proactively re-assert MATCH_PARENT layout params across multiple frames after reparenting, and force PiP-mode onMeasure to honor the parent container size regardless of explicit-pixel layout params.
  • feat(android): add PlayerController.restoreSystemUI() API. Exiting short-drama immersive no longer auto-restores system bars — the host app should now call restoreSystemUI() explicitly after popping the short-drama route. View destroy still emergency-restores when this view is the last immersive holder.
  • feat(ios): lock-screen / control-center "Now Playing" card via MPNowPlayingInfoCenter + MPRemoteCommandCenter. New RPCs setNowPlayingEnabled / setCoverImage; default enabled. iOS-only feature.

1.10.9 #

  • fix: unify list-style episode selection with episodeselect and remove the legacy list-item event path.
  • fix(android): add PiP play/pause action state handling and resume an existing PiP player after screen-off recovery.

1.10.8 #

  • fix(android): start the localhost HLS server when an existing encrypted HLS cache is hit, so cached short-drama playback uses the local index.m3u8 directly instead of falling back to the legacy MP4 path.

1.10.7 #

  • feat(android): implement runtime PlayerController.setFitMode(...), allowing contain/cover switches without rebuilding the platform view.
  • feat(android): emit a one-shot mediaInfo event after duration and video size are both available.

1.10.6 #

  • fix(android): report encrypted HLS source duration as soon as FFmpeg discovers it, so Flutter can receive the short-drama total duration before HLS remuxing finishes.
  • fix(android): only auto-enter PiP after an explicit user-leave signal, while screen-off/background stops pause playback instead.

1.10.5 #

  • fix(android): ignore provisional HLS live-window duration until the real VOD duration is known, preventing short-drama progress jumps and premature next-episode switching on slow networks.
  • fix(android): hand off the PiP video owner when short-drama auto-play moves to the next episode, so PiP continues showing the video instead of the whole Activity.

1.10.4 #

  • feat(android): fire videosizechange event to Flutter when first valid video size arrives, matching iOS. Detail payload {width, height}. Subscribers receive it via PlayerController.eventStream.

1.10.3 #

  • fix(android): ship consumer ProGuard rules so JNI-resolved methods on OkHttpStreamingIO and FFmpegHlsRemuxer$CancelChecker / $ProgressListener survive host R8/minify. Without this, host apps with minifyEnabled true crash on entering encrypted HLS playback with java.lang.NoSuchMethodError: no non-static method "...readBytes([BI)I".

1.10.2 #

  • feat: expose PlayerController.getCurrentVideoDisplayInfo() for native video display metadata.
  • fix(ios): sync native player core updates for encrypted playback, fullscreen cleanup, PiP state, and initial seek handling.
  • fix(android): align FFmpeg HLS remux bridge with the updated decrypt core callback signature.

1.10.1 #

  • fix(android): notify the encrypted player of the first rendered frame when playback enters PLAYING.

1.10.0 #

  • feat(android): add encrypted HLS streaming playback with FFmpeg remuxing and local segment serving.
  • feat(android): enable MP4/MPEG-TS/HLS muxer support in bundled FFmpeg libraries.
  • fix(android): harden FFmpeg/JNI, streaming I/O, local HTTP server, and memory-pressure handling for playback stability.

1.9.0 #

  • feat(ios): add HLS streaming preload support for encrypted playback.
  • fix(flutter): clean up fullscreen gesture overlay analyzer issues before release.

1.8.1 #

  • fix(android): PlayerPlatformView.dispose now calls restoreFromPiP to prevent PiP window leak on view destroy.
  • fix(android): immersive short drama mode — fix top status bar black strip on OnePlus / ColorOS devices.
  • fix(android): landscape pause ad → portrait transition — hideAllSelectors no longer calls removeAllViews, preventing layout disappear.
  • fix(android): prevent MPEG4Writer FORTIFY abort — add Annex-B structure validation before writing.
  • fix(android): fix DFEncryptedPlayer resource leak — shutdown now enforces main-thread dispatch.

1.8.0 #

  • feat: add PlayerController.setFitMode(PlayerFitMode) — switch fill mode at runtime without rebuilding the widget.
  • feat(ios): fire videosizechange event with {width, height} on video ready and VLC video size change.
  • feat(ios): ad mode now allows videosizechange event through (previously blocked).
  • fix(android): danmaku settings panel — SeekBar thumb clipped on landscape; add padding equal to thumb radius and disable clipChildren on parent containers; add WindowInsets listener for display cutout / waterfall right safe-inset.
  • chore(ios): bump ILOOK_PLAYER_VERSION to 1.0.359.

1.7.0 #

  • feat: add PlayerFitMode enum (contain / cover) and PlayerView.fitMode parameter — passed via creationParams to native layer; cover = fill screen (short drama), contain = letterbox (default).
  • feat(ios): sync native core to v1.0.348 — isHostFlutter flag blocks shortDrama auto-fullscreen black screen; setupViewWithFrame:attributes: dispatches creationParams fit-mode to setFitMode:.
  • feat(ios): FullscreenManager enhancements for Flutter hosting — suppresses auto-rotate on isHostFlutter, correct safe-area handling in FullscreenPlayerViewController.
  • feat(android): setPlayerMode(shortDrama) enters immersive fullscreen (hides status/nav bar, adds KEEP_SCREEN_ON); ShortDramaImmersiveCoordinator uses activity-level ref counting so multiple PlayerView instances cooperate.
  • feat(android): creationParams fit-mode mapped to CENTER_CROP (cover) or FIT_CENTER (contain) on TextureView.

1.6.0 #

  • feat: add PlayerPreload / PreloadRequest Dart API — priority-based video preload with preload, cancel, cancelExcept, configure, shutdownAllPlayers.
  • feat(android): add ILookPreloadManager / ILookPreloadTask / ILookCacheKey — Android preload system aligned with iOS, with disk cache, priority queue, and inflight preemption.
  • feat(android): PlayerPlugin adds plugin-level globalChannel for shutdownAllPlayers, preloadVideos, cancelPreload, cancelPreloadExcept, configurePreload.
  • feat(android): DFEncryptedPlayer add full lifecycle — setDataSource, prepare, start, pause, stop, seekTo, getState, getDuration, getCurrentPosition.
  • fix(android): FFDecryptMuxer stability improvements.

1.5.1 #

  • feat(ios): sync ILookPlayerCore to v1.0.322 — enable FFmpeg Class Cluster (auto-routes to DecryptFileAVPlayer), add offline-encryption engine (DFEnc* / DFURLSessionSourceDownloader / FFVideoPacketQueue).
  • feat: playWithAds adds optional landingUrl parameter for "了解详情" ad tap-through.
  • feat: expose shutdownAllPlayers via global Flutter channel for batch player cleanup.
  • fix(android): add setControlBarVisible support on Android to align with iOS v1.4.0 — fixes MissingPluginException that broke short-drama playback.

1.5.1 #

  • feat: add setBarrageSettings({displayAreaRatio, opacity, fontSize, speedLevel}) — batch configure danmaku display parameters in one call.
  • feat: add setPiPEnabled(bool) — enable or disable PiP at runtime.
  • feat(ios): new ILookPreloadManager / ILookPreloadTask — priority-based video preload system with configurable concurrency and disk cache limit.
  • feat(ios): expose preload API via Flutter plugin channel (preloadVideos, cancelPreload, cancelPreloadExcept, configurePreload).
  • chore(ios): bump ILOOK_PLAYER_VERSION to 1.0.330.

1.4.0 #

  • feat: add setControlBarVisible(bool) — show/hide the control bar (play/pause, progress, etc.). When hidden, tap gestures will not reveal controls.
  • feat(ios): PlayerUIManager respects controlBarHidden in both showControlsWithAutoHide and toggleLandscapeControls.
  • feat(ios): add methodSignatureForSelector / forwardInvocation guard in TestComponent to prevent crashes when a native method is missing after sync.sh.

1.3.3 #

  • fix(ios/pip): align PiP lifecycle with original uni-app implementation to fix double-video on background.
    • Remove manual startPictureInPicture in sceneWillDeactivate (app still visible).
    • applicationWillResignActive only sets isPiPStartPending flag.
    • applicationDidEnterBackground starts AVPlayer PiP manually.
    • SampleBuffer PiP (VLC/FFmpeg) relies on system canStartPictureInPictureAutomaticallyFromInline.
    • Add isPiPStartPending guard, pause protection, and failedToStart fallback.

1.3.2 #

  • fix(ios/pip): disable canStartPictureInPictureAutomaticallyFromInline for AVPlayer PiP to prevent double-video during app switch animation; SampleBuffer PiP still uses auto-start as required.
  • fix(ios/pip): add FFmpeg player path to isBuffering and seekableTimeRanges PiP delegate callbacks.
  • fix(ios/pip): fix PiP setPlaying delegate to handle VLC, FFmpeg, and no-player cases independently.
  • chore(ios): comment out verbose [BarrageSpeed] debug NSLogs in BarrageManager, BarrageRenderer, and BarrageScheduler.

1.3.1 #

  • chore(ios): clarify gravityRotationAllowed naming comment to explain why it differs from the exported setGravityRotationEnabled: method name.

1.3.0 #

  • feat: PlayerView now accepts a mode parameter (PlayerMode.normal / PlayerMode.shortDrama). In short drama mode, Flutter gesture recognizers are not registered so outer PageView can handle vertical swipes natively.
  • feat(ios): short drama mode disables double-tap and long-press gestures to prevent UITapGestureRecognizer.delaysTouchesEnded from blocking Flutter's VerticalDragGestureRecognizer.
  • fix(ios): gravity rotation no longer starts automatically on player init — must be explicitly enabled via setGravityRotationEnabled(true).
  • fix(ios): reset motion manager orientation state on stop to prevent stale landscape/portrait state on next start.

1.2.1 #

  • fix(ios): back button hidden state was being reset by internal UI refresh — add portraitBackButtonHidden property and respect user override across showControls and fullscreen transitions.
  • fix(android): align Android short drama mode with iOS — setPlayerMode(SHORT_DRAMA) now hides back button by default; explicit setPortraitBackButtonVisible calls take priority over mode defaults.

1.2.0 #

  • feat: add playerMode (normal / shortDrama) — short drama mode disables mid-video pan gestures.
  • feat: add backButtonInsets — customize portrait back button position to avoid Dynamic Island.
  • feat: add seekToSeconds — precise seek for both normal and short drama modes.
  • fix: sync adMode priority fix — ad mode now takes precedence over shortDrama, keeping pan gesture enabled during ads.
  • feat(android): add playerMode, backButtonInsets, and seekToSeconds support on Android.

1.1.1 #

  • Fix: restore gravity rotation detection — startDeviceMotionUpdatesToQueue was accidentally commented out, causing auto-rotation to stop working.
  • Fix: add setGravityRotationEnabled and setPortraitBackButtonVisible bridge methods to iOS Flutter bridge.

1.0.1 #

  • Add missing Android entry point: PlayerPlugin.java, AndroidManifest.xml.
  • Add full Android Java sources: managers, views, models, utils, DanmakuFlameMaster library.

1.0.0 #

  • Rename package from nova_native_player to mohe_native_player.
  • Fix unused field, unused method, and unnecessary import warnings.

0.0.1 #

  • Initial release.
  • Native video player for iOS and Android.
  • HLS/DASH streaming support.
  • Full playback controls, danmaku, DLNA, PiP, fullscreen.
2
likes
0
points
1.4k
downloads

Publisher

unverified uploader

Weekly Downloads

A Flutter native video player plugin for iOS and Android with full-featured controls, HLS/DASH support, danmaku, DLNA casting, PiP, and more.

Repository

License

unknown (license)

Dependencies

flutter, screen_brightness, volume_controller

More

Packages that depend on mohe_native_player

Packages that implement mohe_native_player