├── examples ├── ios │ ├── .gitignore │ ├── FSPlayerDemo │ │ ├── en.lproj │ │ │ └── InfoPlist.strings │ │ ├── Default.png │ │ ├── Default@2x.png │ │ ├── Default-568h@2x.png │ │ ├── XCAssets │ │ │ ├── AppIcons.xcassets │ │ │ │ ├── Contents.json │ │ │ │ └── AppIcon.appiconset │ │ │ │ │ ├── iTunesArtwork@2x.png │ │ │ │ │ └── Contents.json │ │ │ ├── MoviePlayerImages.xcassets │ │ │ │ └── MoviePlayer │ │ │ │ │ ├── Contents.json │ │ │ │ │ ├── btn_player_play.imageset │ │ │ │ │ ├── btn_player_play.png │ │ │ │ │ ├── btn_player_play@2x.png │ │ │ │ │ └── Contents.json │ │ │ │ │ ├── btn_player_pause.imageset │ │ │ │ │ ├── btn_player_pause.png │ │ │ │ │ ├── btn_player_pause@2x.png │ │ │ │ │ └── Contents.json │ │ │ │ │ ├── player_top_control_bg.imageset │ │ │ │ │ ├── player_top_control_bg.png │ │ │ │ │ ├── player_top_control_bg@2x.png │ │ │ │ │ └── Contents.json │ │ │ │ │ └── player_bottom_control_bg.imageset │ │ │ │ │ ├── player_bottom_control_bg.png │ │ │ │ │ ├── player_bottom_control_bg@2x.png │ │ │ │ │ └── Contents.json │ │ │ └── LaunchImages.xcassets │ │ │ │ └── LaunchImage.launchimage │ │ │ │ ├── iphone_ios7_640_1136.png │ │ │ │ ├── iphone_ios7_640_960.png │ │ │ │ └── Contents.json │ │ ├── Images.xcassets │ │ │ ├── LaunchImage.launchimage │ │ │ │ ├── Default.png │ │ │ │ ├── Default@2x.png │ │ │ │ ├── Default-568h@2x.png │ │ │ │ └── Contents.json │ │ │ └── AppIcon.appiconset │ │ │ │ └── Contents.json │ │ ├── main.m │ │ ├── ViewController │ │ │ ├── Barcode.h │ │ │ ├── FSDemoMainViewController.h │ │ │ ├── FSQRCodeScanViewController.h │ │ │ ├── FSDemoInputURLViewController.h │ │ │ ├── FSDemoLocalFolderViewController.h │ │ │ ├── FSDemoSampleViewController.h │ │ │ ├── FSDemoHistory.h │ │ │ ├── FSCommon.h │ │ │ ├── FSQRCodeScanViewController.xib │ │ │ ├── FSMediaControl.h │ │ │ └── FSMoviePlayerViewController.h │ │ ├── AppIcons.xcassets │ │ │ └── AppIcon.appiconset │ │ │ │ └── Contents.json │ │ ├── FSAppDelegate.h │ │ ├── FSPlayerDemo.pch │ │ └── FSPlayerDemo-Info.plist │ ├── FSPlayer.xcodeproj │ │ └── project.xcworkspace │ │ │ └── contents.xcworkspacedata │ ├── FSPlayerDemo.xcworkspace │ │ └── contents.xcworkspacedata │ ├── FSPlayerDemo.xcodeproj │ │ └── project.xcworkspace │ │ │ └── contents.xcworkspacedata │ ├── generate-fsplayer.sh │ └── build-framework.sh ├── macos │ ├── FSPlayerMacDemo │ │ ├── Assets.xcassets │ │ │ ├── Contents.json │ │ │ ├── info.imageset │ │ │ │ ├── info.pdf │ │ │ │ └── Contents.json │ │ │ ├── menu.imageset │ │ │ │ ├── menu.pdf │ │ │ │ └── Contents.json │ │ │ ├── next.imageset │ │ │ │ ├── next.png │ │ │ │ └── Contents.json │ │ │ ├── play.imageset │ │ │ │ ├── play.png │ │ │ │ └── Contents.json │ │ │ ├── knob_big.imageset │ │ │ │ ├── 矩形2.pdf │ │ │ │ └── Contents.json │ │ │ ├── pause.imageset │ │ │ │ ├── pause.png │ │ │ │ └── Contents.json │ │ │ ├── info_hover.imageset │ │ │ │ ├── info.pdf │ │ │ │ └── Contents.json │ │ │ ├── knob_small.imageset │ │ │ │ ├── 矩形1.pdf │ │ │ │ └── Contents.json │ │ │ ├── previous.imageset │ │ │ │ ├── previous.png │ │ │ │ └── Contents.json │ │ │ ├── AppIcon.appiconset │ │ │ │ ├── icon_16x16.png │ │ │ │ ├── icon_32x32.png │ │ │ │ ├── icon_128x128.png │ │ │ │ ├── icon_16x16@2x.png │ │ │ │ ├── icon_256x256.png │ │ │ │ ├── icon_32x32@2x.png │ │ │ │ ├── icon_512x512.png │ │ │ │ ├── icon_128x128@2x.png │ │ │ │ ├── icon_256x256@2x.png │ │ │ │ ├── icon_512x512@2x.png │ │ │ │ └── Contents.json │ │ │ ├── switch-on.imageset │ │ │ │ ├── switch-on.pdf │ │ │ │ └── Contents.json │ │ │ ├── menu_hover.imageset │ │ │ │ ├── menu_hover.pdf │ │ │ │ └── Contents.json │ │ │ └── switch-off.imageset │ │ │ │ ├── switch-off.pdf │ │ │ │ └── Contents.json │ │ ├── main.m │ │ ├── CustomView │ │ │ ├── MRTextField.h │ │ │ ├── MRBaseView.h │ │ │ ├── MRTextInfoViewController.h │ │ │ ├── MRBaseView.m │ │ │ ├── SHBaseView.h │ │ │ ├── MRProgressSlider.h │ │ │ ├── MRTextField.m │ │ │ └── MRProgressIndicator.h │ │ ├── MRActionKit │ │ │ ├── MRActionProcessor+Private.h │ │ │ ├── MRActionKit.h │ │ │ ├── MRActionProcessorInternal.h │ │ │ ├── MRActionProcessor+Private.m │ │ │ ├── MRActionManager.h │ │ │ ├── MRActionProcessor.h │ │ │ ├── MRActionItem.h │ │ │ └── MRActionProcessor.m │ │ ├── ViewController │ │ │ ├── WindowController.h │ │ │ ├── MRRootViewController.h │ │ │ ├── MRAutoTestViewController.h │ │ │ ├── MRInputURLViewController.h │ │ │ ├── MRPlaylistViewController.h │ │ │ ├── MRStatisticalViewController.h │ │ │ ├── MultiRenderSample.h │ │ │ ├── MRRenderViewAuxProxy.h │ │ │ ├── WindowController.m │ │ │ ├── MRPlaylistRowView.h │ │ │ ├── MRPlayerSettingsViewController.h │ │ │ ├── MRPlayerSettingsView.h │ │ │ ├── MultiRenderSample.xib │ │ │ └── MRPlaylistViewController.m │ │ ├── AppDelegate.h │ │ ├── MRUtil │ │ │ ├── MRGlobalNotification.m │ │ │ ├── NSString+Ex.h │ │ │ ├── MRUtil.h │ │ │ ├── NSFileManager+Sandbox.h │ │ │ ├── MRUtil+SystemPanel.h │ │ │ ├── MRGlobalNotification.h │ │ │ └── NSString+Ex.m │ │ ├── DragView │ │ │ └── MRDragView.h │ │ ├── FSPlayerMacDemo.entitlements │ │ └── PrefixHeader.pch │ ├── FSPlayer.xcodeproj │ │ └── project.xcworkspace │ │ │ └── contents.xcworkspacedata │ ├── FSPlayerMacDemo.xcworkspace │ │ └── contents.xcworkspacedata │ ├── FSPlayerMacDemo.xcodeproj │ │ └── project.xcworkspace │ │ │ └── contents.xcworkspacedata │ ├── generate-fsplayer.sh │ └── build-framework.sh ├── tvos │ ├── FSPlayerTVDemo │ │ ├── Assets.xcassets │ │ │ ├── Contents.json │ │ │ ├── App Icon & Top Shelf Image.brandassets │ │ │ │ ├── App Icon.imagestack │ │ │ │ │ ├── Back.imagestacklayer │ │ │ │ │ │ ├── Contents.json │ │ │ │ │ │ └── Content.imageset │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ ├── Front.imagestacklayer │ │ │ │ │ │ ├── Contents.json │ │ │ │ │ │ └── Content.imageset │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ ├── Middle.imagestacklayer │ │ │ │ │ │ ├── Contents.json │ │ │ │ │ │ └── Content.imageset │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ └── Contents.json │ │ │ │ ├── App Icon - App Store.imagestack │ │ │ │ │ ├── Back.imagestacklayer │ │ │ │ │ │ ├── Contents.json │ │ │ │ │ │ └── Content.imageset │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ ├── Front.imagestacklayer │ │ │ │ │ │ ├── Contents.json │ │ │ │ │ │ └── Content.imageset │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ ├── Middle.imagestacklayer │ │ │ │ │ │ ├── Contents.json │ │ │ │ │ │ └── Content.imageset │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ └── Contents.json │ │ │ │ ├── Top Shelf Image.imageset │ │ │ │ │ └── Contents.json │ │ │ │ ├── Top Shelf Image Wide.imageset │ │ │ │ │ └── Contents.json │ │ │ │ └── Contents.json │ │ │ └── AccentColor.colorset │ │ │ │ └── Contents.json │ │ ├── ViewController.h │ │ ├── AppDelegate.h │ │ ├── main.m │ │ ├── Base.lproj │ │ │ ├── LaunchScreen.storyboard │ │ │ └── Main.storyboard │ │ └── AppDelegate.m │ ├── FSPlayer.xcodeproj │ │ └── project.xcworkspace │ │ │ └── contents.xcworkspacedata │ ├── FSPlayerTVDemo.xcodeproj │ │ └── project.xcworkspace │ │ │ └── contents.xcworkspacedata │ ├── FSPlayerTVDemo.xcworkspace │ │ └── contents.xcworkspacedata │ ├── generate-fsplayer.sh │ └── build-framework.sh └── xcframewrok │ ├── make-podspec.sh │ └── template.spec.json ├── .gitmodules ├── module-ios.modulemap ├── module-macos.modulemap ├── module-tvos.modulemap ├── Donate.md ├── ijkmedia ├── ijksdl │ ├── ios │ │ └── FSSDLHudViewCell.h │ ├── metal │ │ ├── FSMetalView.h │ │ ├── FSMetalOffscreenRendering.h │ │ ├── FSMetalPipelineMeta.h │ │ ├── FSMetalFBO.h │ │ ├── FSMetalSubtitlePipeline.h │ │ └── FSMetalRenderer.h │ ├── mac │ │ ├── FSHudRowView.h │ │ └── FSSDLGLView.h │ ├── apple │ │ ├── ijk_vout_common.m │ │ ├── ijksdl_thread_ios.h │ │ ├── ijksdl_ios.h │ │ ├── ijksdl_gpu_opengl_macos.h │ │ ├── ijksdl_aout_ios_audiounit.h │ │ ├── ijksdl_gpu_metal.h │ │ ├── FSSDLAudioUnitController.h │ │ ├── ijk_vout_common.h │ │ ├── FSSDLAudioQueueController.h │ │ ├── ijksdl_gpu_opengl_fbo_macos.h │ │ ├── ijksdl_gpu_opengl_renderer_macos.h │ │ ├── FSSDLAudioKit.h │ │ ├── FSSDLHudControl.h │ │ ├── ijksdl_gpu_opengl_shader_compiler.h │ │ ├── FSSDLThread.h │ │ ├── ijksdl_vout_overlay_ffmpeg_hw.h │ │ ├── ijksdl_vout_overlay_ffmpeg.h │ │ └── ijksdl_thread_ios.m │ ├── ijksdl_inc_internal.h │ ├── ijksdl_stdinc.c │ ├── ijksdl_error.h │ ├── ijksdl_error.c │ ├── ijksdl_video.h │ ├── ijksdl_class.h │ ├── ffmpeg │ │ ├── ijksdl_inc_ffmpeg.h │ │ ├── ijksdl_image_convert.h │ │ └── ijksdl_vout_overlay_ffmpeg.h │ ├── ijksdl_rectangle.h │ ├── ijksdl.h │ ├── ijksdl_stdinc.h │ ├── ijksdl_extra_log.h │ ├── ijksdl_audio.c │ └── gles2 │ │ └── color_matrix.h ├── ijkplayer │ ├── ff_version.c │ ├── ijkavformat │ │ ├── ijkioprotocol.h │ │ └── ijkavformat.h │ ├── apple │ │ ├── pipeline │ │ │ └── ffpipeline_ios.h │ │ └── ijkplayer_ios.h │ ├── pipeline │ │ ├── ffpipeline_ffplay.h │ │ └── ffpipenode_ffplay_vdec.h │ ├── ff_fferror.h │ ├── ff_version.h │ ├── ff_recorder.h │ ├── ff_muxer.h │ ├── ijkavutil │ │ ├── ijkutils.h │ │ └── ijkstl.h │ ├── config.h │ ├── ff_packet_list.h │ ├── ff_subtitle_ex.h │ ├── ijkplayer_internal.h │ └── ff_ffpipenode.h ├── tools │ ├── mr_stream_peek.h │ └── mr_stream_component.h └── wrapper │ └── apple │ ├── FSAudioRendering.h │ ├── FSMediaModule.h │ ├── FSVideoRenderView.h │ ├── FSAudioRendering.m │ ├── FSNotificationManager.h │ ├── FSKVOController.h │ ├── FSPlayerKit.h │ └── FSVideoRenderView.m ├── deploy.sh ├── .gitignore ├── version.sh ├── doc └── preflight_checklist.md └── CHANGELOG.md /examples/ios/.gitignore: -------------------------------------------------------------------------------- 1 | xcuserdata 2 | xcshareddata 3 | *.xccheckout 4 | -------------------------------------------------------------------------------- /examples/ios/FSPlayerDemo/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | -------------------------------------------------------------------------------- /examples/ios/FSPlayerDemo/Default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/debugly/fsplayer/HEAD/examples/ios/FSPlayerDemo/Default.png -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "FFToolChain"] 2 | path = FFToolChain 3 | url = https://github.com/debugly/MRFFToolChainBuildShell.git 4 | -------------------------------------------------------------------------------- /examples/ios/FSPlayerDemo/Default@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/debugly/fsplayer/HEAD/examples/ios/FSPlayerDemo/Default@2x.png -------------------------------------------------------------------------------- /examples/ios/FSPlayerDemo/Default-568h@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/debugly/fsplayer/HEAD/examples/ios/FSPlayerDemo/Default-568h@2x.png -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /examples/tvos/FSPlayerTVDemo/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /examples/ios/FSPlayerDemo/XCAssets/AppIcons.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /module-ios.modulemap: -------------------------------------------------------------------------------- 1 | framework module FSPlayer { 2 | umbrella header "FSPlayerKit.h" 3 | header "FSPlayerDef.h" 4 | 5 | export * 6 | module * { export * } 7 | } 8 | -------------------------------------------------------------------------------- /examples/ios/FSPlayerDemo/XCAssets/MoviePlayerImages.xcassets/MoviePlayer/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /module-macos.modulemap: -------------------------------------------------------------------------------- 1 | framework module FSPlayer { 2 | umbrella header "FSPlayerKit.h" 3 | header "FSPlayerDef.h" 4 | 5 | export * 6 | module * { export * } 7 | } 8 | -------------------------------------------------------------------------------- /module-tvos.modulemap: -------------------------------------------------------------------------------- 1 | framework module FSPlayer { 2 | umbrella header "FSPlayerKit.h" 3 | header "FSPlayerDef.h" 4 | 5 | export * 6 | module * { export * } 7 | } 8 | -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/Assets.xcassets/info.imageset/info.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/debugly/fsplayer/HEAD/examples/macos/FSPlayerMacDemo/Assets.xcassets/info.imageset/info.pdf -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/Assets.xcassets/menu.imageset/menu.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/debugly/fsplayer/HEAD/examples/macos/FSPlayerMacDemo/Assets.xcassets/menu.imageset/menu.pdf -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/Assets.xcassets/next.imageset/next.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/debugly/fsplayer/HEAD/examples/macos/FSPlayerMacDemo/Assets.xcassets/next.imageset/next.png -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/Assets.xcassets/play.imageset/play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/debugly/fsplayer/HEAD/examples/macos/FSPlayerMacDemo/Assets.xcassets/play.imageset/play.png -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/Assets.xcassets/knob_big.imageset/矩形2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/debugly/fsplayer/HEAD/examples/macos/FSPlayerMacDemo/Assets.xcassets/knob_big.imageset/矩形2.pdf -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/Assets.xcassets/pause.imageset/pause.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/debugly/fsplayer/HEAD/examples/macos/FSPlayerMacDemo/Assets.xcassets/pause.imageset/pause.png -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/Assets.xcassets/info_hover.imageset/info.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/debugly/fsplayer/HEAD/examples/macos/FSPlayerMacDemo/Assets.xcassets/info_hover.imageset/info.pdf -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/Assets.xcassets/knob_small.imageset/矩形1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/debugly/fsplayer/HEAD/examples/macos/FSPlayerMacDemo/Assets.xcassets/knob_small.imageset/矩形1.pdf -------------------------------------------------------------------------------- /examples/ios/FSPlayerDemo/Images.xcassets/LaunchImage.launchimage/Default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/debugly/fsplayer/HEAD/examples/ios/FSPlayerDemo/Images.xcassets/LaunchImage.launchimage/Default.png -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/Assets.xcassets/previous.imageset/previous.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/debugly/fsplayer/HEAD/examples/macos/FSPlayerMacDemo/Assets.xcassets/previous.imageset/previous.png -------------------------------------------------------------------------------- /examples/ios/FSPlayerDemo/Images.xcassets/LaunchImage.launchimage/Default@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/debugly/fsplayer/HEAD/examples/ios/FSPlayerDemo/Images.xcassets/LaunchImage.launchimage/Default@2x.png -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/Assets.xcassets/AppIcon.appiconset/icon_16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/debugly/fsplayer/HEAD/examples/macos/FSPlayerMacDemo/Assets.xcassets/AppIcon.appiconset/icon_16x16.png -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/Assets.xcassets/AppIcon.appiconset/icon_32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/debugly/fsplayer/HEAD/examples/macos/FSPlayerMacDemo/Assets.xcassets/AppIcon.appiconset/icon_32x32.png -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/Assets.xcassets/switch-on.imageset/switch-on.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/debugly/fsplayer/HEAD/examples/macos/FSPlayerMacDemo/Assets.xcassets/switch-on.imageset/switch-on.pdf -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/Assets.xcassets/AppIcon.appiconset/icon_128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/debugly/fsplayer/HEAD/examples/macos/FSPlayerMacDemo/Assets.xcassets/AppIcon.appiconset/icon_128x128.png -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/Assets.xcassets/AppIcon.appiconset/icon_16x16@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/debugly/fsplayer/HEAD/examples/macos/FSPlayerMacDemo/Assets.xcassets/AppIcon.appiconset/icon_16x16@2x.png -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/Assets.xcassets/AppIcon.appiconset/icon_256x256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/debugly/fsplayer/HEAD/examples/macos/FSPlayerMacDemo/Assets.xcassets/AppIcon.appiconset/icon_256x256.png -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/Assets.xcassets/AppIcon.appiconset/icon_32x32@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/debugly/fsplayer/HEAD/examples/macos/FSPlayerMacDemo/Assets.xcassets/AppIcon.appiconset/icon_32x32@2x.png -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/Assets.xcassets/AppIcon.appiconset/icon_512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/debugly/fsplayer/HEAD/examples/macos/FSPlayerMacDemo/Assets.xcassets/AppIcon.appiconset/icon_512x512.png -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/Assets.xcassets/menu_hover.imageset/menu_hover.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/debugly/fsplayer/HEAD/examples/macos/FSPlayerMacDemo/Assets.xcassets/menu_hover.imageset/menu_hover.pdf -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/Assets.xcassets/switch-off.imageset/switch-off.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/debugly/fsplayer/HEAD/examples/macos/FSPlayerMacDemo/Assets.xcassets/switch-off.imageset/switch-off.pdf -------------------------------------------------------------------------------- /examples/ios/FSPlayerDemo/Images.xcassets/LaunchImage.launchimage/Default-568h@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/debugly/fsplayer/HEAD/examples/ios/FSPlayerDemo/Images.xcassets/LaunchImage.launchimage/Default-568h@2x.png -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/Assets.xcassets/AppIcon.appiconset/icon_128x128@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/debugly/fsplayer/HEAD/examples/macos/FSPlayerMacDemo/Assets.xcassets/AppIcon.appiconset/icon_128x128@2x.png -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/Assets.xcassets/AppIcon.appiconset/icon_256x256@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/debugly/fsplayer/HEAD/examples/macos/FSPlayerMacDemo/Assets.xcassets/AppIcon.appiconset/icon_256x256@2x.png -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/Assets.xcassets/AppIcon.appiconset/icon_512x512@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/debugly/fsplayer/HEAD/examples/macos/FSPlayerMacDemo/Assets.xcassets/AppIcon.appiconset/icon_512x512@2x.png -------------------------------------------------------------------------------- /examples/tvos/FSPlayerTVDemo/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Back.imagestacklayer/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /examples/tvos/FSPlayerTVDemo/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Front.imagestacklayer/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /examples/tvos/FSPlayerTVDemo/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Middle.imagestacklayer/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /examples/ios/FSPlayerDemo/XCAssets/AppIcons.xcassets/AppIcon.appiconset/iTunesArtwork@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/debugly/fsplayer/HEAD/examples/ios/FSPlayerDemo/XCAssets/AppIcons.xcassets/AppIcon.appiconset/iTunesArtwork@2x.png -------------------------------------------------------------------------------- /examples/tvos/FSPlayerTVDemo/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Back.imagestacklayer/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /examples/tvos/FSPlayerTVDemo/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Front.imagestacklayer/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /examples/ios/FSPlayer.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /examples/macos/FSPlayer.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /examples/tvos/FSPlayer.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /examples/tvos/FSPlayerTVDemo/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Middle.imagestacklayer/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /examples/ios/FSPlayerDemo.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /examples/tvos/FSPlayerTVDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /examples/tvos/FSPlayerTVDemo.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /examples/tvos/FSPlayerTVDemo/Assets.xcassets/AccentColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "idiom" : "universal" 5 | } 6 | ], 7 | "info" : { 8 | "author" : "xcode", 9 | "version" : 1 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /examples/ios/FSPlayerDemo/XCAssets/LaunchImages.xcassets/LaunchImage.launchimage/iphone_ios7_640_1136.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/debugly/fsplayer/HEAD/examples/ios/FSPlayerDemo/XCAssets/LaunchImages.xcassets/LaunchImage.launchimage/iphone_ios7_640_1136.png -------------------------------------------------------------------------------- /examples/ios/FSPlayerDemo/XCAssets/LaunchImages.xcassets/LaunchImage.launchimage/iphone_ios7_640_960.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/debugly/fsplayer/HEAD/examples/ios/FSPlayerDemo/XCAssets/LaunchImages.xcassets/LaunchImage.launchimage/iphone_ios7_640_960.png -------------------------------------------------------------------------------- /examples/ios/FSPlayerDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /examples/tvos/FSPlayerTVDemo/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // FSPlayerTVDemo 4 | // 5 | // Created by debugly on 2024/5/23. 6 | // 7 | 8 | #import 9 | 10 | @interface ViewController : UIViewController 11 | 12 | 13 | @end 14 | 15 | -------------------------------------------------------------------------------- /examples/ios/FSPlayerDemo/XCAssets/MoviePlayerImages.xcassets/MoviePlayer/btn_player_play.imageset/btn_player_play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/debugly/fsplayer/HEAD/examples/ios/FSPlayerDemo/XCAssets/MoviePlayerImages.xcassets/MoviePlayer/btn_player_play.imageset/btn_player_play.png -------------------------------------------------------------------------------- /examples/ios/FSPlayerDemo/XCAssets/MoviePlayerImages.xcassets/MoviePlayer/btn_player_pause.imageset/btn_player_pause.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/debugly/fsplayer/HEAD/examples/ios/FSPlayerDemo/XCAssets/MoviePlayerImages.xcassets/MoviePlayer/btn_player_pause.imageset/btn_player_pause.png -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/Assets.xcassets/info.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "info.pdf", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/Assets.xcassets/knob_big.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "矩形2.pdf", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/Assets.xcassets/menu.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "menu.pdf", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /examples/ios/FSPlayerDemo/XCAssets/MoviePlayerImages.xcassets/MoviePlayer/btn_player_pause.imageset/btn_player_pause@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/debugly/fsplayer/HEAD/examples/ios/FSPlayerDemo/XCAssets/MoviePlayerImages.xcassets/MoviePlayer/btn_player_pause.imageset/btn_player_pause@2x.png -------------------------------------------------------------------------------- /examples/ios/FSPlayerDemo/XCAssets/MoviePlayerImages.xcassets/MoviePlayer/btn_player_play.imageset/btn_player_play@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/debugly/fsplayer/HEAD/examples/ios/FSPlayerDemo/XCAssets/MoviePlayerImages.xcassets/MoviePlayer/btn_player_play.imageset/btn_player_play@2x.png -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/Assets.xcassets/info_hover.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "info.pdf", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/Assets.xcassets/knob_small.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "矩形1.pdf", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/Assets.xcassets/menu_hover.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "menu_hover.pdf", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/Assets.xcassets/switch-off.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "switch-off.pdf", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/Assets.xcassets/switch-on.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "switch-on.pdf", 5 | "idiom" : "universal" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /examples/ios/FSPlayerDemo/XCAssets/MoviePlayerImages.xcassets/MoviePlayer/player_top_control_bg.imageset/player_top_control_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/debugly/fsplayer/HEAD/examples/ios/FSPlayerDemo/XCAssets/MoviePlayerImages.xcassets/MoviePlayer/player_top_control_bg.imageset/player_top_control_bg.png -------------------------------------------------------------------------------- /examples/ios/FSPlayerDemo/XCAssets/MoviePlayerImages.xcassets/MoviePlayer/player_top_control_bg.imageset/player_top_control_bg@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/debugly/fsplayer/HEAD/examples/ios/FSPlayerDemo/XCAssets/MoviePlayerImages.xcassets/MoviePlayer/player_top_control_bg.imageset/player_top_control_bg@2x.png -------------------------------------------------------------------------------- /examples/ios/FSPlayerDemo/XCAssets/MoviePlayerImages.xcassets/MoviePlayer/player_bottom_control_bg.imageset/player_bottom_control_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/debugly/fsplayer/HEAD/examples/ios/FSPlayerDemo/XCAssets/MoviePlayerImages.xcassets/MoviePlayer/player_bottom_control_bg.imageset/player_bottom_control_bg.png -------------------------------------------------------------------------------- /examples/ios/FSPlayerDemo/XCAssets/MoviePlayerImages.xcassets/MoviePlayer/player_bottom_control_bg.imageset/player_bottom_control_bg@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/debugly/fsplayer/HEAD/examples/ios/FSPlayerDemo/XCAssets/MoviePlayerImages.xcassets/MoviePlayer/player_bottom_control_bg.imageset/player_bottom_control_bg@2x.png -------------------------------------------------------------------------------- /examples/tvos/FSPlayerTVDemo/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Back.imagestacklayer/Content.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "tv" 5 | } 6 | ], 7 | "info" : { 8 | "author" : "xcode", 9 | "version" : 1 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /examples/tvos/FSPlayerTVDemo/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Front.imagestacklayer/Content.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "tv" 5 | } 6 | ], 7 | "info" : { 8 | "author" : "xcode", 9 | "version" : 1 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /examples/tvos/FSPlayerTVDemo/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "tv" 5 | } 6 | ], 7 | "info" : { 8 | "author" : "xcode", 9 | "version" : 1 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // FSPlayerMacDemo 4 | // 5 | // Created by debugly on 2019/6/25. 6 | // Copyright © 2019 FSPlayer Mac. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | int main(int argc, const char * argv[]) { 12 | return NSApplicationMain(argc, argv); 13 | } 14 | -------------------------------------------------------------------------------- /examples/tvos/FSPlayerTVDemo/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // FSPlayerTVDemo 4 | // 5 | // Created by debugly on 2024/5/23. 6 | // 7 | 8 | #import 9 | 10 | @interface AppDelegate : UIResponder 11 | 12 | @property (strong, nonatomic) UIWindow *window; 13 | 14 | 15 | @end 16 | 17 | -------------------------------------------------------------------------------- /Donate.md: -------------------------------------------------------------------------------- 1 | 2 | ## Donate 3 | 4 | 维护本项目花费了大量时间和精力,帮助了很多 iOS/macOS/tvOS 开发者们。 5 | 6 | 为了让本项目长存,给其他开发人员提供更多的帮助,你应该支持作者,请他喝杯咖啡。 7 | 8 | ![donate.jpg](https://i.postimg.cc/xdVqnBLp/IMG-7481.jpg) 9 | 10 | ## 捐赠列表 11 | 12 | 感谢以下朋友,下面是付款是付款时留下的备注: 13 | 14 | - 海阔天也空 15 | - 小猪猪 16 | - 1996GJ 17 | - zdw19840929 18 | - pcccccc 19 | - oyjcmyn 20 | - huabaobao2017 -------------------------------------------------------------------------------- /examples/ios/FSPlayerDemo/XCAssets/AppIcons.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "iTunesArtwork@2x.png", 5 | "idiom" : "universal", 6 | "platform" : "ios", 7 | "size" : "1024x1024" 8 | } 9 | ], 10 | "info" : { 11 | "author" : "xcode", 12 | "version" : 1 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/CustomView/MRTextField.h: -------------------------------------------------------------------------------- 1 | // 2 | // MRTextField.h 3 | // FSPlayerMacDemo 4 | // 5 | // Created by Reach Matt on 2025/4/15. 6 | // Copyright © 2025 FSPlayer. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface MRTextField : NSTextField 14 | 15 | @end 16 | 17 | NS_ASSUME_NONNULL_END 18 | -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/MRActionKit/MRActionProcessor+Private.h: -------------------------------------------------------------------------------- 1 | // 2 | // MRActionProcessor+Private.h 3 | // MRPlayer 4 | // 5 | // Created by debugly on 2019/8/5. 6 | // Copyright © 2022 debugly. All rights reserved. 7 | // 8 | 9 | #import "MRActionProcessor.h" 10 | 11 | @interface MRActionProcessor (Private) 12 | 13 | - (MRActionHandler)handlerForPath:(NSString *)path; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/ViewController/WindowController.h: -------------------------------------------------------------------------------- 1 | // 2 | // WindowController.h 3 | // FSPlayerDemo 4 | // 5 | // Created by debugly on 2021/11/2. 6 | // Copyright © 2021 debugly. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface WindowController : NSWindowController 14 | 15 | @end 16 | 17 | NS_ASSUME_NONNULL_END 18 | -------------------------------------------------------------------------------- /ijkmedia/ijksdl/ios/FSSDLHudViewCell.h: -------------------------------------------------------------------------------- 1 | // 2 | // FSSDLHudViewCell.h 3 | // FSMediaPlayer 4 | // 5 | // Created by Zhang Rui on 15/12/14. 6 | // Copyright © 2015年 bilibili. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface FSSDLHudViewCell : UITableViewCell 12 | 13 | - (id)init; 14 | 15 | - (void)setHudValue:(NSString *)value forKey:(NSString *)key; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/MRActionKit/MRActionKit.h: -------------------------------------------------------------------------------- 1 | // 2 | // MRActionKit.h 3 | // MRFoundation 4 | // 5 | // Created by debugly on 2019/8/5. 6 | // Copyright © 2022 debugly. All rights reserved. 7 | // 8 | 9 | #ifndef MRActionKit_h 10 | #define MRActionKit_h 11 | 12 | #import "MRActionItem.h" 13 | #import "MRActionProcessor.h" 14 | #import "MRActionManager.h" 15 | 16 | #endif /* MRActionKit_h */ 17 | -------------------------------------------------------------------------------- /examples/tvos/FSPlayerTVDemo/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Back.imagestacklayer/Content.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "tv", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "tv", 9 | "scale" : "2x" 10 | } 11 | ], 12 | "info" : { 13 | "author" : "xcode", 14 | "version" : 1 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /examples/tvos/FSPlayerTVDemo/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Front.imagestacklayer/Content.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "tv", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "tv", 9 | "scale" : "2x" 10 | } 11 | ], 12 | "info" : { 13 | "author" : "xcode", 14 | "version" : 1 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /examples/tvos/FSPlayerTVDemo/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "tv", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "tv", 9 | "scale" : "2x" 10 | } 11 | ], 12 | "info" : { 13 | "author" : "xcode", 14 | "version" : 1 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // FSPlayerMacDemo 4 | // 5 | // Created by debugly on 2019/6/25. 6 | // Copyright © 2019 FSPlayer Mac. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : NSObject 12 | 13 | - (void)openDocument:(id)sender; 14 | - (void)enableComputerSleep:(BOOL)enable; 15 | 16 | @end 17 | 18 | -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/ViewController/MRRootViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // MRRootViewController.h 3 | // FSPlayerMacDemo 4 | // 5 | // Created by debugly on 2021/11/1. 6 | // Copyright © 2021 FSPlayer Mac. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface MRRootViewController : NSViewController 14 | 15 | @end 16 | 17 | NS_ASSUME_NONNULL_END 18 | -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/ViewController/MRAutoTestViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // MRAutoTestViewController.h 3 | // FSPlayerMacDemo 4 | // 5 | // Created by debugly on 2024/1/15. 6 | // Copyright © 2024 FSPlayer Mac. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface MRAutoTestViewController : NSViewController 14 | 15 | @end 16 | 17 | NS_ASSUME_NONNULL_END 18 | -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/ViewController/MRInputURLViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // MRInputURLViewController.h 3 | // FSPlayerMacDemo 4 | // 5 | // Created by Reach Matt on 2025/4/15. 6 | // Copyright © 2025 FSPlayer. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface MRInputURLViewController : NSViewController 14 | 15 | @end 16 | 17 | NS_ASSUME_NONNULL_END 18 | -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/ViewController/MRPlaylistViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // MRPlaylistViewController.h 3 | // FSPlayerMacDemo 4 | // 5 | // Created by debugly on 2024/1/24. 6 | // Copyright © 2024 FSPlayer Mac. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface MRPlaylistViewController : NSViewController 14 | 15 | @end 16 | 17 | NS_ASSUME_NONNULL_END 18 | -------------------------------------------------------------------------------- /examples/tvos/FSPlayerTVDemo/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | }, 6 | "layers" : [ 7 | { 8 | "filename" : "Front.imagestacklayer" 9 | }, 10 | { 11 | "filename" : "Middle.imagestacklayer" 12 | }, 13 | { 14 | "filename" : "Back.imagestacklayer" 15 | } 16 | ] 17 | } 18 | -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/ViewController/MRStatisticalViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // MRStatisticalViewController.h 3 | // FSPlayerMacDemo 4 | // 5 | // Created by debugly on 2024/1/15. 6 | // Copyright © 2024 FSPlayer Mac. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface MRStatisticalViewController : NSViewController 14 | 15 | @end 16 | 17 | NS_ASSUME_NONNULL_END 18 | -------------------------------------------------------------------------------- /examples/ios/FSPlayerDemo/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // FSMediaDemo 4 | // 5 | // Created by ZhangRui on 13-9-19. 6 | // Copyright (c) 2013年 bilibili. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | #import "FSAppDelegate.h" 12 | 13 | int main(int argc, char *argv[]) 14 | { 15 | @autoreleasepool { 16 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([FSAppDelegate class])); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/CustomView/MRBaseView.h: -------------------------------------------------------------------------------- 1 | // 2 | // MRBaseView.h 3 | // FSPlayerMacDemo 4 | // 5 | // Created by debugly on 2022/2/25. 6 | // Copyright © 2022 FSPlayer Mac. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface MRBaseView : NSView 14 | 15 | @property (nonatomic,assign) IBInspectable CGFloat cornerRadius; 16 | 17 | @end 18 | 19 | NS_ASSUME_NONNULL_END 20 | -------------------------------------------------------------------------------- /examples/tvos/FSPlayerTVDemo/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | }, 6 | "layers" : [ 7 | { 8 | "filename" : "Front.imagestacklayer" 9 | }, 10 | { 11 | "filename" : "Middle.imagestacklayer" 12 | }, 13 | { 14 | "filename" : "Back.imagestacklayer" 15 | } 16 | ] 17 | } 18 | -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/MRUtil/MRGlobalNotification.m: -------------------------------------------------------------------------------- 1 | // 2 | // MRGlobalNotification.m 3 | // FSPlayerDemo 4 | // 5 | // Created by debugly on 2019/3/14. 6 | // Copyright © 2019 debugly. All rights reserved. 7 | // 8 | 9 | #import "MRGlobalNotification.h" 10 | 11 | DEFINE_CONST_STRING(kPlayExplorerMovieNotificationName_G); 12 | DEFINE_CONST_STRING(kPlayNetMovieNotificationName_G); 13 | 14 | @implementation MRGlobalNotification 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/Assets.xcassets/next.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "next.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/Assets.xcassets/play.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "play.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/MRActionKit/MRActionProcessorInternal.h: -------------------------------------------------------------------------------- 1 | // 2 | // MRActionProcessorInternal.h 3 | // MRPlayer 4 | // 5 | // Created by debugly on 2019/8/5. 6 | // Copyright © 2022 debugly. All rights reserved. 7 | // 8 | 9 | #import "MRActionProcessor.h" 10 | 11 | @interface MRActionProcessor () 12 | 13 | @property (nonatomic, strong) NSDictionary *acitonHandlerMap; 14 | @property (nonatomic, copy, readwrite) NSString *scheme; 15 | 16 | @end 17 | -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/Assets.xcassets/pause.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "pause.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/ViewController/MultiRenderSample.h: -------------------------------------------------------------------------------- 1 | // 2 | // MultiRenderSample.h 3 | // FSPlayerMacDemo 4 | // 5 | // Created by debugly on 2023/4/6. 6 | // Copyright © 2023 FSPlayer Mac. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface MultiRenderSample : NSViewController 14 | 15 | @property (nonatomic, strong) NSURL *contentURL; 16 | 17 | @end 18 | 19 | NS_ASSUME_NONNULL_END 20 | -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/Assets.xcassets/previous.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "previous.png", 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/MRUtil/NSString+Ex.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSString+Ex.h 3 | // FSPlayerDemo 4 | // 5 | // Created by debugly on 2023/6/15. 6 | // Copyright © 2023 debugly. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface NSString (Ex) 14 | 15 | - (NSString *)md5Hash; 16 | - (NSString *)percentEncoding; 17 | - (NSString *)percentDecoding; 18 | 19 | @end 20 | 21 | NS_ASSUME_NONNULL_END 22 | -------------------------------------------------------------------------------- /ijkmedia/ijksdl/metal/FSMetalView.h: -------------------------------------------------------------------------------- 1 | // 2 | // FSMetalView.h 3 | // FFmpegTutorial-macOS 4 | // 5 | // Created by debugly on 2022/11/22. 6 | // Copyright © 2022 debugly's Awesome FFmpeg Tutotial. All rights reserved. 7 | // 8 | 9 | #import "FSVideoRenderingProtocol.h" 10 | @import MetalKit; 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | NS_CLASS_AVAILABLE(10_13, 11_0) 15 | @interface FSMetalView : MTKView 16 | 17 | @end 18 | 19 | NS_ASSUME_NONNULL_END 20 | -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/CustomView/MRTextInfoViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // MRTextInfoViewController.h 3 | // FSPlayerMacDemo 4 | // 5 | // Created by debugly on 2023/5/25. 6 | // Copyright © 2023 FSPlayer Mac. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface MRTextInfoViewController : NSViewController 14 | 15 | - (instancetype)initWithText:(NSString *)text; 16 | - (void)updateText:(NSString *)text; 17 | 18 | @end 19 | 20 | NS_ASSUME_NONNULL_END 21 | -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/MRActionKit/MRActionProcessor+Private.m: -------------------------------------------------------------------------------- 1 | // 2 | // MRActionProcessor+Private.m 3 | // MRPlayer 4 | // 5 | // Created by debugly on 2019/8/5. 6 | // Copyright © 2022 debugly. All rights reserved. 7 | // 8 | 9 | #import "MRActionProcessor+Private.h" 10 | #import "MRActionProcessorInternal.h" 11 | 12 | @implementation MRActionProcessor (Private) 13 | 14 | - (MRActionHandler)handlerForPath:(NSString *)path 15 | { 16 | return [self.acitonHandlerMap objectForKey:path]; 17 | } 18 | 19 | @end 20 | -------------------------------------------------------------------------------- /examples/ios/FSPlayerDemo/ViewController/Barcode.h: -------------------------------------------------------------------------------- 1 | // 2 | // Barcode.h 3 | // featurebuild 4 | // 5 | // Created by Jake Widmer on 10/5/13. 6 | // Copyright (c) 2013 Jake Widmer. All rights reserved. 7 | // 8 | 9 | #import 10 | #import 11 | 12 | @interface Barcode : NSObject 13 | 14 | + (Barcode * )processMetadataObject:(AVMetadataMachineReadableCodeObject*) code; 15 | - (NSString *) getBarcodeType; 16 | - (NSString *) getBarcodeData; 17 | - (void) printBarcodeData; 18 | @end 19 | -------------------------------------------------------------------------------- /examples/tvos/FSPlayerTVDemo/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // FSPlayerTVDemo 4 | // 5 | // Created by ifox on 2025/5/2. 6 | // 7 | 8 | #import 9 | #import "AppDelegate.h" 10 | 11 | int main(int argc, char * argv[]) { 12 | NSString * appDelegateClassName; 13 | @autoreleasepool { 14 | // Setup code that might create autoreleased objects goes here. 15 | appDelegateClassName = NSStringFromClass([AppDelegate class]); 16 | } 17 | return UIApplicationMain(argc, argv, nil, appDelegateClassName); 18 | } 19 | -------------------------------------------------------------------------------- /examples/tvos/FSPlayerTVDemo/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "tv", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "tv", 9 | "scale" : "2x" 10 | }, 11 | { 12 | "idiom" : "tv-marketing", 13 | "scale" : "1x" 14 | }, 15 | { 16 | "idiom" : "tv-marketing", 17 | "scale" : "2x" 18 | } 19 | ], 20 | "info" : { 21 | "author" : "xcode", 22 | "version" : 1 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /examples/ios/FSPlayerDemo/XCAssets/MoviePlayerImages.xcassets/MoviePlayer/btn_player_pause.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "btn_player_pause.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "btn_player_pause@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /examples/ios/FSPlayerDemo/XCAssets/MoviePlayerImages.xcassets/MoviePlayer/btn_player_play.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "btn_player_play.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "btn_player_play@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /examples/tvos/FSPlayerTVDemo/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "tv", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "tv", 9 | "scale" : "2x" 10 | }, 11 | { 12 | "idiom" : "tv-marketing", 13 | "scale" : "1x" 14 | }, 15 | { 16 | "idiom" : "tv-marketing", 17 | "scale" : "2x" 18 | } 19 | ], 20 | "info" : { 21 | "author" : "xcode", 22 | "version" : 1 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /examples/ios/FSPlayerDemo/XCAssets/MoviePlayerImages.xcassets/MoviePlayer/player_top_control_bg.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "player_top_control_bg.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "player_top_control_bg@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /examples/ios/FSPlayerDemo/XCAssets/MoviePlayerImages.xcassets/MoviePlayer/player_bottom_control_bg.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "player_bottom_control_bg.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "player_bottom_control_bg@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/MRActionKit/MRActionManager.h: -------------------------------------------------------------------------------- 1 | // 2 | // MRActionManager.h 3 | // MRPlayer 4 | // 5 | // Created by debugly on 2019/8/2. 6 | // Copyright © 2022 debugly. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @class MRActionProcessor,MRActionItem; 12 | @interface MRActionManager : NSObject 13 | 14 | + (BOOL)handleActionWithURL:(NSString *)url error:(NSError **)error; 15 | + (BOOL)handleActionWithItem:(MRActionItem *)item error:(NSError *__autoreleasing *)error; 16 | + (void)registerProcessor:(MRActionProcessor *)processor; 17 | 18 | @end 19 | -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/ViewController/MRRenderViewAuxProxy.h: -------------------------------------------------------------------------------- 1 | // 2 | // MRRenderViewAuxProxy.h 3 | // FSPlayerMacDemo 4 | // 5 | // Created by debugly on 2023/4/6. 6 | // Copyright © 2023 FSPlayer Mac. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface MRRenderViewAuxProxy : NSView 14 | 15 | - (void)addRenderView:(NSView *)view; 16 | - (void)removeRenderView:(NSView *)view; 17 | 18 | @end 19 | 20 | NS_ASSUME_NONNULL_END 21 | -------------------------------------------------------------------------------- /deploy.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # deploy lastest tag and master branch to github. 3 | 4 | branch="${1:-master}" 5 | 6 | url=$(git remote get-url github >/dev/null 2>&1) 7 | 8 | if [[ $? -ne 0 ]]; then 9 | echo 'add github remote' 10 | git remote add github git@github.com:debugly/ijkplayer.git 11 | fi 12 | 13 | echo '=== will fetch github tags ===' 14 | git fetch github --tag 15 | echo "=== will push $branch branch to github ===" 16 | git push github $branch 17 | tag=$(git describe --abbrev=0 --tags) 18 | echo "=== latest tag is ${tag} ===" 19 | #git push github ${tag} --force 20 | git remote remove github -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/MRActionKit/MRActionProcessor.h: -------------------------------------------------------------------------------- 1 | // 2 | // MRActionProcessor.h 3 | // MRPlayer 4 | // 5 | // Created by debugly on 2019/8/5. 6 | // Copyright © 2022 debugly. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @class MRActionItem; 12 | 13 | typedef void (^MRActionHandler)(MRActionItem *item); 14 | 15 | @interface MRActionProcessor : NSObject 16 | 17 | @property (nonatomic, copy, readonly) NSString *scheme; 18 | 19 | - (instancetype)initWithScheme:(NSString *)scheme; 20 | 21 | - (void)registerHandler:(MRActionHandler)handler forPath:(NSString *)path; 22 | 23 | @end 24 | -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/DragView/MRDragView.h: -------------------------------------------------------------------------------- 1 | // 2 | // MRDragView.h 3 | // FFmpegTutorial-macOS 4 | // 5 | // Created by debugly on 2020/12/2. 6 | // 7 | 8 | #import 9 | 10 | NS_ASSUME_NONNULL_BEGIN 11 | 12 | @protocol MRDragViewDelegate 13 | 14 | - (NSDragOperation)acceptDragOperation:(NSArray *)list; 15 | //默认追加,按下option替换 16 | - (void)handleDragFileList:(NSArray *)fileUrls append:(BOOL)append; 17 | 18 | @end 19 | 20 | @interface MRDragView : NSView 21 | 22 | @property (weak, nonatomic) IBOutlet id delegate; 23 | 24 | @end 25 | 26 | NS_ASSUME_NONNULL_END 27 | -------------------------------------------------------------------------------- /ijkmedia/ijksdl/mac/FSHudRowView.h: -------------------------------------------------------------------------------- 1 | // 2 | // FSHudRowView.h 3 | // FFmpegTutorial-macOS 4 | // 5 | // Created by debugly on 2020/11/27. 6 | // 7 | 8 | #import 9 | 10 | NS_ASSUME_NONNULL_BEGIN 11 | 12 | typedef enum : NSUInteger { 13 | KSeparactorStyleFull, 14 | KSeparactorStyleHeadPadding, 15 | KSeparactorStyleNone, 16 | } KSeparactorStyle; 17 | 18 | @interface FSHudRowView : NSTableRowView 19 | 20 | @property KSeparactorStyle sepStyle; 21 | 22 | - (void)updateTitle:(NSString *)title; 23 | - (void)updateDetail:(NSString *)title; 24 | 25 | @end 26 | 27 | NS_ASSUME_NONNULL_END 28 | -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/MRUtil/MRUtil.h: -------------------------------------------------------------------------------- 1 | // 2 | // MRUtil.h 3 | // FFmpegTutorial-macOS 4 | // 5 | // Created by debugly on 2020/12/2. 6 | // 7 | 8 | #import 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface MRUtil : NSObject 14 | 15 | + (NSArray *)audioType; 16 | + (NSArray *)videoType; 17 | + (NSArray *)subtitleType; 18 | + (NSArray *)pictureType; 19 | + (NSArray *)acceptMediaType; 20 | 21 | + (BOOL)saveImageToFile:(CGImageRef)img path:(NSString *)imgPath; 22 | + (NSArray *)parseXPlayList:(NSURL*)url; 23 | 24 | @end 25 | 26 | NS_ASSUME_NONNULL_END 27 | -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/CustomView/MRBaseView.m: -------------------------------------------------------------------------------- 1 | // 2 | // MRBaseView.m 3 | // FSPlayerMacDemo 4 | // 5 | // Created by debugly on 2022/2/25. 6 | // Copyright © 2022 FSPlayer Mac. All rights reserved. 7 | // 8 | 9 | #import "MRBaseView.h" 10 | #import 11 | 12 | @implementation MRBaseView 13 | 14 | IB_DESIGNABLE; 15 | 16 | - (void)setCornerRadius:(CGFloat)radius 17 | { 18 | if (_cornerRadius != radius) { 19 | _cornerRadius = radius; 20 | if (_cornerRadius > 0) { 21 | [self setWantsLayer:YES]; 22 | self.layer.cornerRadius = radius; 23 | self.layer.masksToBounds = YES; 24 | } 25 | } 26 | } 27 | 28 | @end 29 | -------------------------------------------------------------------------------- /examples/ios/FSPlayerDemo/XCAssets/LaunchImages.xcassets/LaunchImage.launchimage/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "extent" : "full-screen", 5 | "filename" : "iphone_ios7_640_960.png", 6 | "idiom" : "iphone", 7 | "minimum-system-version" : "7.0", 8 | "orientation" : "portrait", 9 | "scale" : "2x" 10 | }, 11 | { 12 | "extent" : "full-screen", 13 | "filename" : "iphone_ios7_640_1136.png", 14 | "idiom" : "iphone", 15 | "minimum-system-version" : "7.0", 16 | "orientation" : "portrait", 17 | "scale" : "2x", 18 | "subtype" : "retina4" 19 | } 20 | ], 21 | "info" : { 22 | "author" : "xcode", 23 | "version" : 1 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/ViewController/WindowController.m: -------------------------------------------------------------------------------- 1 | // 2 | // WindowController.m 3 | // FSPlayerDemo 4 | // 5 | // Created by debugly on 2021/11/2. 6 | // Copyright © 2021 debugly. All rights reserved. 7 | // 8 | 9 | #import "WindowController.h" 10 | 11 | @interface WindowController () 12 | 13 | @end 14 | 15 | @implementation WindowController 16 | 17 | - (void)keyDown:(NSEvent *)event 18 | { 19 | if (self.window.contentViewController) { 20 | if ([self.window.contentViewController respondsToSelector:@selector(keyDown:)]) { 21 | [self.window.contentViewController keyDown:event]; 22 | return; 23 | } 24 | } 25 | return [super keyDown:event]; 26 | } 27 | 28 | @end 29 | -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/FSPlayerMacDemo.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | com.apple.security.files.downloads.read-only 8 | 9 | com.apple.security.assets.music.read-only 10 | 11 | com.apple.security.assets.movies.read-only 12 | 13 | com.apple.security.assets.pictures.read-write 14 | 15 | com.apple.security.files.user-selected.read-only 16 | 17 | com.apple.security.network.client 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /ijkmedia/ijksdl/metal/FSMetalOffscreenRendering.h: -------------------------------------------------------------------------------- 1 | // 2 | // FSMetalOffscreenRendering.h 3 | // FFmpegTutorial-macOS 4 | // 5 | // Created by debugly on 2022/12/2. 6 | // Copyright © 2022 debugly's Awesome FFmpeg Tutotial. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | @protocol MTLDevice,MTLCommandBuffer,MTLRenderCommandEncoder; 13 | @import CoreGraphics; 14 | 15 | NS_CLASS_AVAILABLE(10_13, 11_0) 16 | @interface FSMetalOffscreenRendering : NSObject 17 | 18 | - (CGImageRef)snapshot:(CGSize)targetSize 19 | device:(id )device 20 | commandBuffer:(id)commandBuffer 21 | doUploadPicture:(void(^)(id))block; 22 | 23 | @end 24 | 25 | NS_ASSUME_NONNULL_END 26 | -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/MRActionKit/MRActionItem.h: -------------------------------------------------------------------------------- 1 | // 2 | // MRActionItem.h 3 | // MRFoundation 4 | // 5 | // Created by debugly on 2019/8/5. 6 | // Copyright © 2022 debugly. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface MRActionItem : NSObject 12 | 13 | @property (nonatomic, copy, readonly) NSString *scheme; 14 | @property (nonatomic, copy, readonly) NSString *host; 15 | @property (nonatomic, copy, readonly) NSNumber *port; 16 | @property (nonatomic, copy, readonly) NSString *path; 17 | @property (nonatomic, copy, readonly) NSString *query; 18 | @property (nonatomic, strong, readonly) NSDictionary *queryMap; 19 | 20 | - (instancetype)initWithURLString:(NSString *)string; 21 | + (instancetype)actionItemWithString:(NSString *)string; 22 | 23 | @end 24 | -------------------------------------------------------------------------------- /examples/ios/FSPlayerDemo/ViewController/FSDemoMainViewController.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015 Gdier 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | #import 18 | 19 | @interface FSDemoMainViewController : UIViewController 20 | 21 | @end 22 | -------------------------------------------------------------------------------- /examples/ios/FSPlayerDemo/ViewController/FSQRCodeScanViewController.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015 Gdier 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | #import 18 | 19 | @interface FSQRCodeScanViewController : UIViewController 20 | 21 | @end 22 | -------------------------------------------------------------------------------- /examples/ios/FSPlayerDemo/ViewController/FSDemoInputURLViewController.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015 Gdier 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | #import 18 | 19 | @interface FSDemoInputURLViewController : UIViewController 20 | 21 | @end 22 | -------------------------------------------------------------------------------- /examples/ios/generate-fsplayer.sh: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env bash 2 | # 3 | # Copyright (C) 2024 Matt Reach 4 | 5 | # Licensed under the Apache License, Version 2.0 (the "License"); 6 | # you may not use this file except in compliance with the License. 7 | # You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | 17 | THIS_DIR=$(DIRNAME=$(dirname "$0"); cd "$DIRNAME"; pwd) 18 | cd "$THIS_DIR" 19 | 20 | set -e 21 | 22 | xcodegen -p . -s ../../FSPlayer.yml -------------------------------------------------------------------------------- /ijkmedia/ijksdl/metal/FSMetalPipelineMeta.h: -------------------------------------------------------------------------------- 1 | // 2 | // FSMetalPipelineMeta.h 3 | // FSPlayer 4 | // 5 | // Created by debugly on 2023/6/26. 6 | // 7 | 8 | #import 9 | #import "FSMetalShaderTypes.h" 10 | #import 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | NS_CLASS_AVAILABLE(10_13, 11_0) 14 | @interface FSMetalPipelineMeta : NSObject 15 | 16 | @property (nonatomic) BOOL hdr; 17 | @property (nonatomic) BOOL fullRange; 18 | @property (nonatomic) NSString* fragmentName; 19 | @property (nonatomic) FSColorTransferFunc transferFunc; 20 | @property (nonatomic) FSYUV2RGBColorMatrixType convertMatrixType; 21 | 22 | + (FSMetalPipelineMeta *)createWithCVPixelbuffer:(CVPixelBufferRef)pixelBuffer; 23 | - (BOOL)metaMatchedCVPixelbuffer:(CVPixelBufferRef)pixelBuffer; 24 | 25 | @end 26 | 27 | NS_ASSUME_NONNULL_END 28 | -------------------------------------------------------------------------------- /examples/macos/generate-fsplayer.sh: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env bash 2 | # 3 | # Copyright (C) 2024 Matt Reach 4 | 5 | # Licensed under the Apache License, Version 2.0 (the "License"); 6 | # you may not use this file except in compliance with the License. 7 | # You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | 17 | THIS_DIR=$(DIRNAME=$(dirname "$0"); cd "$DIRNAME"; pwd) 18 | cd "$THIS_DIR" 19 | 20 | set -e 21 | 22 | xcodegen -p . -s ../../FSPlayer.yml -------------------------------------------------------------------------------- /examples/tvos/generate-fsplayer.sh: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env bash 2 | # 3 | # Copyright (C) 2024 Matt Reach 4 | 5 | # Licensed under the Apache License, Version 2.0 (the "License"); 6 | # you may not use this file except in compliance with the License. 7 | # You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | 17 | THIS_DIR=$(DIRNAME=$(dirname "$0"); cd "$DIRNAME"; pwd) 18 | cd "$THIS_DIR" 19 | 20 | set -e 21 | 22 | xcodegen -p . -s ../../FSPlayer.yml -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # ----- 2 | build/ 3 | ffmpeg-temp/ 4 | android/ffmpeg-* 5 | android/openssl-* 6 | ijkmedia/ijkyuv/ 7 | ijkmedia/ijksoundtouch 8 | ijkprof/android-ndk-profiler/ 9 | 10 | # built application files 11 | *.apk 12 | *.ap_ 13 | 14 | # files for the dex VM 15 | *.dex 16 | 17 | # Java class files 18 | *.class 19 | 20 | # generated files 21 | ijkmedia/ijkplayer/ijkversion.h 22 | 23 | # Local configuration file (sdk path, etc) 24 | local.properties 25 | 26 | # Android Studio 27 | .idea 28 | .gradle 29 | build/ 30 | 31 | #macOS 32 | .DS_Store 33 | # Xcode 34 | xcuserdata 35 | xcshareddata 36 | *.xccheckout 37 | # Cocopods 38 | examples/macos/Release 39 | examples/ios/Release-iphoneos 40 | examples/ios/Release-iphonesimulator 41 | examples/tvos/Release-appletvos 42 | examples/tvos/Release-appletvsimulator 43 | examples/xcframewrok/FSPlayer.xcframework 44 | -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/ViewController/MRPlaylistRowView.h: -------------------------------------------------------------------------------- 1 | // 2 | // MRPlaylistRowView.h 3 | // FSPlayerMacDemo 4 | // 5 | // Created by debugly on 2024/1/24. 6 | // Copyright © 2024 FSPlayer Mac. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | typedef enum : NSUInteger { 14 | KSeparactorStyleFull, 15 | KSeparactorStyleHeadPadding, 16 | KSeparactorStyleNone, 17 | } KSeparactorStyle; 18 | 19 | @interface MRPlaylistRowData : NSObject 20 | 21 | @property(nonatomic) NSString *key; 22 | @property(nonatomic) NSString *value; 23 | 24 | @end 25 | 26 | @interface MRPlaylistRowView : NSTableRowView 27 | 28 | @property KSeparactorStyle sepStyle; 29 | 30 | - (void)updateData:(MRPlaylistRowData *)data; 31 | 32 | @end 33 | 34 | NS_ASSUME_NONNULL_END 35 | -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/ViewController/MRPlayerSettingsViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // MRPlayerSettingsViewController.h 3 | // FSPlayerMacDemo 4 | // 5 | // Created by debugly on 2024/1/24. 6 | // Copyright © 2024 FSPlayer Mac. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | typedef void(^MRPlayerSettingsExchangeStreamBlock)(int); 14 | typedef void(^MRPlayerSettingsCloseStreamBlock)(NSString *); 15 | 16 | @interface MRPlayerSettingsViewController : NSViewController 17 | 18 | - (void)exchangeToNextSubtitle; 19 | - (void)updateTracks:(NSDictionary *)dic; 20 | - (void)onCloseCurrentStream:(MRPlayerSettingsCloseStreamBlock)block; 21 | - (void)onExchangeSelectedStream:(MRPlayerSettingsExchangeStreamBlock)block; 22 | - (void)onCaptureShot:(dispatch_block_t)block; 23 | 24 | @end 25 | 26 | NS_ASSUME_NONNULL_END 27 | -------------------------------------------------------------------------------- /examples/tvos/FSPlayerTVDemo/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "assets" : [ 3 | { 4 | "filename" : "App Icon - App Store.imagestack", 5 | "idiom" : "tv", 6 | "role" : "primary-app-icon", 7 | "size" : "1280x768" 8 | }, 9 | { 10 | "filename" : "App Icon.imagestack", 11 | "idiom" : "tv", 12 | "role" : "primary-app-icon", 13 | "size" : "400x240" 14 | }, 15 | { 16 | "filename" : "Top Shelf Image Wide.imageset", 17 | "idiom" : "tv", 18 | "role" : "top-shelf-image-wide", 19 | "size" : "2320x720" 20 | }, 21 | { 22 | "filename" : "Top Shelf Image.imageset", 23 | "idiom" : "tv", 24 | "role" : "top-shelf-image", 25 | "size" : "1920x720" 26 | } 27 | ], 28 | "info" : { 29 | "author" : "xcode", 30 | "version" : 1 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /version.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | set -e 4 | 5 | VERSION_NAME=1.0.2 6 | VERSION_TARGET=$1 7 | 8 | echo "alter version to $VERSION_NAME" 9 | 10 | do_version_readme() { 11 | sed -i "" "s#\(.*releases/download/\)\([[:digit:]][[:digit:].]*\)\(/FSPlayer.spec.json\)#\1$VERSION_NAME\3#g" README.md 12 | } 13 | 14 | do_version_xcode() { 15 | sed -i "" "s/\([[:space:]]*MARKETING_VERSION:[[:space:]]\)[[:digit:].]*[[:digit:]]/\1$VERSION_NAME/g" FSPlayer.yml 16 | ./examples/ios/generate-fsplayer.sh 17 | ./examples/tvos/generate-fsplayer.sh 18 | ./examples/macos/generate-fsplayer.sh 19 | } 20 | 21 | if [ "$VERSION_TARGET" = "readme" ]; then 22 | do_version_readme 23 | elif [ "$VERSION_TARGET" = "show" ]; then 24 | echo $VERSION_NAME 25 | elif [ "$VERSION_TARGET" = "xcode" ]; then 26 | do_version_xcode 27 | else 28 | do_version_readme 29 | do_version_xcode 30 | fi 31 | 32 | -------------------------------------------------------------------------------- /ijkmedia/ijksdl/metal/FSMetalFBO.h: -------------------------------------------------------------------------------- 1 | // 2 | // FSMetalFBO.h 3 | // FSPlayer 4 | // 5 | // Created by debugly on 2024/4/10. 6 | // 7 | 8 | #import 9 | #import 10 | #import 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | 14 | 15 | @protocol MTLRenderCommandEncoder,MTLParallelRenderCommandEncoder,MTLCommandBuffer,MTLDevice; 16 | 17 | @interface FSMetalFBO : NSObject 18 | 19 | - (instancetype)init:(id)device 20 | size:(CGSize)targetSize; 21 | 22 | - (BOOL)canReuse:(CGSize)size; 23 | - (id)createRenderEncoder:(id)commandBuffer; 24 | - (id)createParallelRenderEncoder:(id)commandBuffer; 25 | - (CGSize)size; 26 | - (CVPixelBufferRef)pixelBuffer; 27 | - (id)texture; 28 | 29 | @end 30 | 31 | NS_ASSUME_NONNULL_END 32 | -------------------------------------------------------------------------------- /examples/ios/FSPlayerDemo/ViewController/FSDemoLocalFolderViewController.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015 Gdier 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | #import 18 | 19 | @interface FSDemoLocalFolderViewController : UITableViewController 20 | 21 | - (instancetype)initWithFolderPath:(NSString *)folderPath; 22 | 23 | @end 24 | -------------------------------------------------------------------------------- /examples/ios/FSPlayerDemo/AppIcons.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "57x57", 21 | "scale" : "1x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "57x57", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "2x" 32 | }, 33 | { 34 | "idiom" : "iphone", 35 | "size" : "60x60", 36 | "scale" : "3x" 37 | } 38 | ], 39 | "info" : { 40 | "version" : 1, 41 | "author" : "xcode" 42 | } 43 | } -------------------------------------------------------------------------------- /examples/ios/FSPlayerDemo/Images.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "29x29", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "40x40", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "57x57", 21 | "scale" : "1x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "57x57", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "60x60", 31 | "scale" : "2x" 32 | }, 33 | { 34 | "idiom" : "iphone", 35 | "size" : "60x60", 36 | "scale" : "3x" 37 | } 38 | ], 39 | "info" : { 40 | "version" : 1, 41 | "author" : "xcode" 42 | } 43 | } -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/ViewController/MRPlayerSettingsView.h: -------------------------------------------------------------------------------- 1 | // 2 | // MRPlayerSettingsView.h 3 | // FSPlayerMacDemo 4 | // 5 | // Created by debugly on 2024/5/16. 6 | // Copyright © 2024 FSPlayer Mac. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface MRPlayerSettingsView : NSView 14 | 15 | - (void)exchangeToNextSubtitle; 16 | 17 | - (void)addAudioItemWithTitle:(NSString *)title; 18 | - (void)addVideoItemWithTitle:(NSString *)title; 19 | - (void)addSubtitleItemWithTitle:(NSString *)title; 20 | 21 | - (void)removeAllAudioItems; 22 | - (void)removeAllVideoItems; 23 | - (void)removeAllSubtileItems; 24 | - (void)removeAllItems; 25 | 26 | - (void)selectAudioItemWithTitle:(NSString *)title; 27 | - (void)selectVideoItemWithTitle:(NSString *)title; 28 | - (void)selectSubtitleItemWithTitle:(NSString *)title; 29 | 30 | @end 31 | 32 | NS_ASSUME_NONNULL_END 33 | -------------------------------------------------------------------------------- /doc/preflight_checklist.md: -------------------------------------------------------------------------------- 1 | ChangeLog 2 | ----------------------- 3 | * Update NEWS.md 4 | * Update README.md 5 | * Commit and push 6 | 7 | FFmpeg 8 | ----------------------- 9 | * Build and test iOS and Android demo locally 10 | * Modify ffmpeg version in init-ios.sh and init-android.sh 11 | * Modify ffmpeg version in `IJKFFMoviePlayerController` (by running `sh init-ios.sh`) 12 | * Commit and push 13 | 14 | OpenSSL 15 | ---------------------- 16 | * Check openssl latest stable version 17 | 18 | ijkplayer 19 | ----------------------- 20 | * Update version.sh 21 | * Create a tag (subtitle) 22 | * Commit and push (TAG ONLY) 23 | 24 | Travis-ci 25 | ----------------------- 26 | * Modify ijk version in `.travis.yaml` in iOS and Android ci repo. 27 | * Ensure compile task has been started on travis-ci. 28 | * Ensure Andoird release has been released in bintray. 29 | 30 | Take off 31 | ----------------------- 32 | * Push master to github 33 | -------------------------------------------------------------------------------- /examples/ios/FSPlayerDemo/ViewController/FSDemoSampleViewController.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2013-2015 Bilibili 3 | * Copyright (C) 2013-2015 Zhang Rui 4 | * Copyright (c) 2019 debugly 5 | * 6 | * Licensed under the Apache License, Version 2.0 (the "License"); 7 | * you may not use this file except in compliance with the License. 8 | * You may obtain a copy of the License at 9 | * 10 | * http://www.apache.org/licenses/LICENSE-2.0 11 | * 12 | * Unless required by applicable law or agreed to in writing, software 13 | * distributed under the License is distributed on an "AS IS" BASIS, 14 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | * See the License for the specific language governing permissions and 16 | * limitations under the License. 17 | */ 18 | 19 | #import 20 | 21 | @interface FSDemoSampleViewController : UIViewController 22 | 23 | @end 24 | -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/PrefixHeader.pch: -------------------------------------------------------------------------------- 1 | // 2 | // PrefixHeader.pch 3 | // FSPlayerMacDemo 4 | // 5 | // Created by debugly on 2022/2/24. 6 | // Copyright © 2022 FSPlayer Mac. All rights reserved. 7 | // 8 | 9 | #ifndef PrefixHeader_pch 10 | #define PrefixHeader_pch 11 | 12 | // Include any system framework and library headers here that should be included in all compilation units. 13 | // You will also need to set the Prefix Header build setting of one or more of your targets to reference this file. 14 | 15 | #ifndef __MRWS__ 16 | #define __MRWS__ 17 | 18 | #ifndef __weakSelf__ 19 | #define __weakSelf__ __weak typeof(self)weakSelf = self; 20 | #endif 21 | 22 | #ifndef __strongSelf__ 23 | #define __strongSelf__ __strong typeof(weakSelf)self = weakSelf; 24 | #endif 25 | 26 | #define __weakObj(obj) __weak typeof(obj)weak##obj = obj; 27 | #define __strongObj(obj) __strong typeof(weak##obj)obj = weak##obj; 28 | 29 | #endif 30 | 31 | #endif /* PrefixHeader_pch */ 32 | -------------------------------------------------------------------------------- /ijkmedia/ijkplayer/ff_version.c: -------------------------------------------------------------------------------- 1 | /* 2 | * ff_version.c 3 | * 4 | * Copyright (c) 2025 debugly 5 | * 6 | * This file is part of FSPlayer. 7 | * 8 | * FSPlayer is free software; you can redistribute it and/or 9 | * modify it under the terms of the GNU Lesser General Public 10 | * License as published by the Free Software Foundation; either 11 | * version 3 of the License, or (at your option) any later version. 12 | * 13 | * FSPlayer is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 | * Lesser General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU Lesser General Public 19 | * License along with FSPlayer; if not, write to the Free Software 20 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 21 | */ 22 | 23 | #include "ff_version.h" 24 | -------------------------------------------------------------------------------- /ijkmedia/ijksdl/apple/ijk_vout_common.m: -------------------------------------------------------------------------------- 1 | /* 2 | * ijk_vout_common.m 3 | * 4 | * Copyright (c) 2023 debugly 5 | * 6 | * This file is part of FSPlayer. 7 | * 8 | * FSPlayer is free software; you can redistribute it and/or 9 | * modify it under the terms of the GNU Lesser General Public 10 | * License as published by the Free Software Foundation; either 11 | * version 3 of the License, or (at your option) any later version. 12 | * 13 | * FSPlayer is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 | * Lesser General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU Lesser General Public 19 | * License along with FSPlayer; if not, write to the Free Software 20 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 21 | */ 22 | 23 | #import "ijk_vout_common.h" 24 | -------------------------------------------------------------------------------- /examples/xcframewrok/make-podspec.sh: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env bash 2 | # 3 | # Copyright (C) 2024 Matt Reach 4 | 5 | # Licensed under the Apache License, Version 2.0 (the "License"); 6 | # you may not use this file except in compliance with the License. 7 | # You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | 17 | THIS_DIR=$(DIRNAME=$(dirname "$0"); cd "$DIRNAME"; pwd) 18 | cd "$THIS_DIR" 19 | 20 | set -e 21 | version=${1:-$(grep -m 1 VERSION_NAME= ../../version.sh | awk -F = '{printf "%s",$2}')} 22 | 23 | fn=FSPlayer.spec.json 24 | cat 'template.spec.json' \ 25 | | sed "s/__VERSION__/${version}/" \ 26 | > "${fn}" -------------------------------------------------------------------------------- /ijkmedia/tools/mr_stream_peek.h: -------------------------------------------------------------------------------- 1 | // 2 | // mr_stream_peek.h 3 | // 4 | // FSPlayer not use the file, but the file will be used by other module in app. 5 | // 6 | // Created by debugly on 2023/9/7. 7 | // 8 | 9 | #ifndef mr_stream_peek_h 10 | #define mr_stream_peek_h 11 | 12 | #include 13 | typedef struct MRStreamPeeker MRStreamPeeker; 14 | 15 | int mr_stream_peek_create(MRStreamPeeker **peeker_out,int frameCacheCount); 16 | int mr_stream_peek_open_filepath(MRStreamPeeker *peeker, const char *file_name, int idx); 17 | 18 | int mr_stream_peek_get_opened_stream_idx(MRStreamPeeker *peeker); 19 | int mr_stream_peek_seek_to(MRStreamPeeker *peeker, float sec); 20 | int mr_stream_peek_get_data(MRStreamPeeker *peeker, unsigned char *buffer, int len, double * pts_begin, double * pts_end); 21 | int mr_stream_peek_close(MRStreamPeeker *peeker); 22 | void mr_stream_peek_destroy(MRStreamPeeker **peeker_out); 23 | int mr_stream_peek_get_buffer_size(int millisecond); 24 | int mr_stream_duration(MRStreamPeeker *peeker); 25 | 26 | #endif /* mr_stream_peek_h */ 27 | -------------------------------------------------------------------------------- /examples/ios/FSPlayerDemo/FSAppDelegate.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2013-2015 Bilibili 3 | * Copyright (C) 2013-2015 Zhang Rui 4 | * Copyright (c) 2019 debugly 5 | * 6 | * Licensed under the Apache License, Version 2.0 (the "License"); 7 | * you may not use this file except in compliance with the License. 8 | * You may obtain a copy of the License at 9 | * 10 | * http://www.apache.org/licenses/LICENSE-2.0 11 | * 12 | * Unless required by applicable law or agreed to in writing, software 13 | * distributed under the License is distributed on an "AS IS" BASIS, 14 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | * See the License for the specific language governing permissions and 16 | * limitations under the License. 17 | */ 18 | 19 | #import 20 | 21 | @interface FSAppDelegate : UIResponder 22 | 23 | @property (strong, nonatomic) UIWindow *window; 24 | @property (strong, nonatomic) UIViewController *viewController; 25 | 26 | @end 27 | -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/MRActionKit/MRActionProcessor.m: -------------------------------------------------------------------------------- 1 | // 2 | // MRActionProcessor.m 3 | // MRPlayer 4 | // 5 | // Created by debugly on 2019/8/5. 6 | // Copyright © 2022 debugly. All rights reserved. 7 | // 8 | 9 | #import "MRActionProcessor.h" 10 | #import "MRActionProcessorInternal.h" 11 | 12 | @implementation MRActionProcessor 13 | 14 | - (instancetype)initWithScheme:(NSString *)scheme 15 | { 16 | self = [super init]; 17 | if (self) { 18 | self.scheme = scheme; 19 | } 20 | return self; 21 | } 22 | 23 | - (void)registerHandler:(MRActionHandler)handler forPath:(NSString *)path 24 | { 25 | NSParameterAssert(path); 26 | NSMutableDictionary *map = [NSMutableDictionary dictionaryWithCapacity:3]; 27 | if (self.acitonHandlerMap) { 28 | [map addEntriesFromDictionary:self.acitonHandlerMap]; 29 | } 30 | 31 | if (handler) { 32 | [map setObject:[handler copy] forKey:path]; 33 | } else { 34 | [map removeObjectForKey:path]; 35 | } 36 | 37 | self.acitonHandlerMap = [map copy]; 38 | } 39 | 40 | @end 41 | -------------------------------------------------------------------------------- /examples/ios/FSPlayerDemo/FSPlayerDemo.pch: -------------------------------------------------------------------------------- 1 | // 2 | // FSMediaMacDemo.pch 3 | // FSMediaMacDemo 4 | // 5 | // Created by debugly on 2022/2/24. 6 | // Copyright © 2022 FS Mac. All rights reserved. 7 | // 8 | 9 | #ifndef FSMediaMacDemo_pch 10 | #define FSMediaMacDemo_pch 11 | 12 | // Include any system framework and library headers here that should be included in all compilation units. 13 | // You will also need to set the Prefix Header build setting of one or more of your targets to reference this file. 14 | 15 | //#ifdef __OBJC__ 16 | //#import 17 | //#import 18 | //#endif 19 | 20 | 21 | #ifndef __MRWS__ 22 | #define __MRWS__ 23 | 24 | #ifndef __weakSelf__ 25 | #define __weakSelf__ __weak typeof(self)weakSelf = self; 26 | #endif 27 | 28 | #ifndef __strongSelf__ 29 | #define __strongSelf__ __strong typeof(weakSelf)self = weakSelf; 30 | #endif 31 | 32 | #define __weakObj(obj) __weak typeof(obj)weak##obj = obj; 33 | #define __strongObj(obj) __strong typeof(weak##obj)obj = weak##obj; 34 | 35 | #endif 36 | 37 | #endif /* FSMediaMacDemo_pch */ 38 | -------------------------------------------------------------------------------- /ijkmedia/ijksdl/apple/ijksdl_thread_ios.h: -------------------------------------------------------------------------------- 1 | /* 2 | * ijksdl_thread_ios.h 3 | * 4 | * Copyright (c) 2013 Bilibili 5 | * Copyright (c) 2013 Zhang Rui 6 | * Copyright (c) 2019 debugly 7 | * 8 | * This file is part of FSPlayer. 9 | * 10 | * FSPlayer is free software; you can redistribute it and/or 11 | * modify it under the terms of the GNU Lesser General Public 12 | * License as published by the Free Software Foundation; either 13 | * version 3 of the License, or (at your option) any later version. 14 | * 15 | * FSPlayer is distributed in the hope that it will be useful, 16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 18 | * Lesser General Public License for more details. 19 | * 20 | * You should have received a copy of the GNU Lesser General Public 21 | * License along with FSPlayer; if not, write to the Free Software 22 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 23 | */ 24 | 25 | #import 26 | -------------------------------------------------------------------------------- /examples/ios/FSPlayerDemo/Images.xcassets/LaunchImage.launchimage/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "orientation" : "portrait", 5 | "idiom" : "iphone", 6 | "filename" : "Default@2x.png", 7 | "minimum-system-version" : "7.0", 8 | "scale" : "2x" 9 | }, 10 | { 11 | "orientation" : "portrait", 12 | "idiom" : "iphone", 13 | "filename" : "Default-568h@2x.png", 14 | "minimum-system-version" : "7.0", 15 | "subtype" : "retina4", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "orientation" : "portrait", 20 | "idiom" : "iphone", 21 | "filename" : "Default.png", 22 | "scale" : "1x" 23 | }, 24 | { 25 | "orientation" : "portrait", 26 | "idiom" : "iphone", 27 | "filename" : "Default@2x.png", 28 | "scale" : "2x" 29 | }, 30 | { 31 | "orientation" : "portrait", 32 | "idiom" : "iphone", 33 | "filename" : "Default-568h@2x.png", 34 | "subtype" : "retina4", 35 | "scale" : "2x" 36 | } 37 | ], 38 | "info" : { 39 | "version" : 1, 40 | "author" : "xcode" 41 | } 42 | } -------------------------------------------------------------------------------- /ijkmedia/ijkplayer/ijkavformat/ijkioprotocol.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016 Bilibili 3 | * Copyright (c) 2016 Raymond Zheng 4 | * Copyright (c) 2019 debugly 5 | * 6 | * This file is part of FSPlayer. 7 | * 8 | * FSPlayer is free software; you can redistribute it and/or 9 | * modify it under the terms of the GNU Lesser General Public 10 | * License as published by the Free Software Foundation; either 11 | * version 3 of the License, or (at your option) any later version. 12 | * 13 | * FSPlayer is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 | * Lesser General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU Lesser General Public 19 | * License along with FSPlayer; if not, write to the Free Software 20 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 21 | */ 22 | #include "ijkiourl.h" 23 | 24 | int ijkio_alloc_url(IjkURLContext **inner, const char *url); 25 | -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/MRUtil/NSFileManager+Sandbox.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSFileManager+Sandbox.h 3 | // MRFoundation 4 | // 5 | // Created by debugly on 2019/11/5. 6 | // 7 | #import 8 | 9 | NS_ASSUME_NONNULL_BEGIN 10 | @interface NSFileManager (Sandbox) 11 | 12 | 13 | /// 创建文件夹,中间文件夹会自动创建 14 | /// @param aDir 文件夹路径 15 | /// @return some err 16 | + (NSError * _Nullable)mr_mkdirP:(NSString *)aDir; 17 | 18 | /// 先删除文件夹,然后再重新创建文件夹,中间文件夹会自动创建 19 | /// @param aDir 文件夹路径 20 | /// @return some err 21 | + (NSError * _Nullable)mr_rm_mkdirP:(NSString *)aDir; 22 | 23 | /// 沙河 目录下创建 path 目录 24 | /// @param directory 对应类型 path 相对于 directory 的目录 25 | /// @return 完整的路径 26 | + (NSString * _Nullable)mr_DirWithType:(NSSearchPathDirectory)directory 27 | WithPathComponent:(NSString *_Nullable)path; 28 | 29 | /// 沙河目录下创建 [path/path2/...] 目录 30 | /// @param directory 对应类型 pathArr 相对于 NSSearchPathDirectory 的目录数组 31 | /// @return 完整的路径 32 | + (NSString * _Nullable)mr_DirWithType:(NSSearchPathDirectory)directory 33 | WithPathComponents:(NSArray*_Nullable)pathArr; 34 | 35 | @end 36 | NS_ASSUME_NONNULL_END 37 | -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/MRUtil/MRUtil+SystemPanel.h: -------------------------------------------------------------------------------- 1 | // 2 | // MRUtil+SystemPanel.h 3 | // FSPlayerDemo 4 | // 5 | // Created by debugly on 2020/3/11. 6 | // Copyright © 2021 debugly.. All rights reserved. 7 | // 8 | 9 | #import "MRUtil.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface MRUtil(SystemPanel) 14 | 15 | ///展示系统选择文件面板:可以选择单个视频,也可以选择文件夹 16 | + (NSArray *)showSystemChooseVideoPanalForLocal; 17 | ///展示系统选择文件面板;选择视频文件[{bookmark,url,type}]//type:0,movie;1,subtitle; 18 | + (NSArray *)showSystemChooseVideoPanel; 19 | ///展示系统选择文件面板;选择视频文件[{bookmark,url,type}]//type:0,movie;1,subtitle; 自动关联(下载、影片)文件夹 20 | + (NSArray *)showSystemChooseVideoPanelAutoScan; 21 | ///展示系统选择文件面板;选择视频、字幕文件[{bookmark,url,type}]//type:0,movie;1,subtitle 22 | + (NSArray *)showSystemChooseVideoPanel4Share; 23 | ///展示系统选择文件夹面板; 24 | + (NSArray *)showSystemChooseFolderPanel; 25 | ///递归扫描文件夹 26 | + (NSArray *)scanFolder:(NSURL *)url filter:(NSArray*)types; 27 | + (NSDictionary *)makeBookmarkWithURL:(NSURL *)url; 28 | 29 | @end 30 | 31 | NS_ASSUME_NONNULL_END 32 | -------------------------------------------------------------------------------- /ijkmedia/ijksdl/metal/FSMetalSubtitlePipeline.h: -------------------------------------------------------------------------------- 1 | // 2 | // FSMetalSubtitlePipeline.h 3 | // FSPlayer 4 | // 5 | // Created by debugly on 2022/12/23. 6 | // 7 | 8 | @import MetalKit; 9 | 10 | NS_ASSUME_NONNULL_BEGIN 11 | 12 | typedef enum : NSUInteger { 13 | FSMetalSubtitleOutFormatDIRECT, 14 | FSMetalSubtitleOutFormatSWAP_RB 15 | } FSMetalSubtitleOutFormat; 16 | 17 | typedef enum : NSUInteger { 18 | FSMetalSubtitleInFormatBRGA, 19 | FSMetalSubtitleInFormatA8, 20 | } FSMetalSubtitleInFormat; 21 | 22 | API_AVAILABLE(macos(10.13),ios(11.0),tvos(12.0)) 23 | @interface FSMetalSubtitlePipeline : NSObject 24 | 25 | - (instancetype)initWithDevice:(id)device 26 | inFormat:(FSMetalSubtitleInFormat)inFormat 27 | outFormat:(FSMetalSubtitleOutFormat)outFormat; 28 | 29 | - (BOOL)createRenderPipelineIfNeed; 30 | - (void)updateSubtitleVertexIfNeed:(CGRect)rect; 31 | - (void)drawTexture:(id)subTexture encoder:(id)encoder; 32 | - (void)drawTexture:(id)subTexture encoder:(id)encoder colors:(void *)colors; 33 | 34 | @end 35 | 36 | NS_ASSUME_NONNULL_END 37 | -------------------------------------------------------------------------------- /ijkmedia/tools/mr_stream_component.h: -------------------------------------------------------------------------------- 1 | // 2 | // mr_stream_component.h 3 | // 4 | // FSPlayer not use the file, but the file will be used by other module in app. 5 | // 6 | // Created by debugly on 2023/9/7. 7 | // 8 | 9 | #ifndef mr_stream_component_h 10 | #define mr_stream_component_h 11 | 12 | #include 13 | 14 | typedef struct MRStreamComponent MRStreamComponent; 15 | typedef struct AVStream AVStream; 16 | typedef struct AVCodecContext AVCodecContext; 17 | typedef struct PacketQueue PacketQueue; 18 | typedef struct FrameQueue FrameQueue; 19 | typedef struct AVFormatContext AVFormatContext; 20 | 21 | //when hasn't ic, not support seek; 22 | int streamComponent_open(MRStreamComponent **scp, int stream_index, AVFormatContext* ic, AVCodecContext *avctx, PacketQueue* packetq, FrameQueue* frameq); 23 | int streamComponent_close(MRStreamComponent **scp); 24 | int streamComponent_get_stream(MRStreamComponent *sc); 25 | int streamComponent_seek_to(MRStreamComponent *sc, int sec); 26 | int streamComponent_get_pkt_serial(MRStreamComponent *sc); 27 | int streamComponent_eof_and_pkt_empty(MRStreamComponent *sc); 28 | 29 | #endif /* mr_stream_component_h */ 30 | -------------------------------------------------------------------------------- /ijkmedia/ijksdl/apple/ijksdl_ios.h: -------------------------------------------------------------------------------- 1 | /* 2 | * ijksdl_ios.h 3 | * 4 | * Copyright (c) 2013 Bilibili 5 | * Copyright (c) 2013 Zhang Rui 6 | * Copyright (c) 2019 debugly 7 | * 8 | * This file is part of FSPlayer. 9 | * 10 | * FSPlayer is free software; you can redistribute it and/or 11 | * modify it under the terms of the GNU Lesser General Public 12 | * License as published by the Free Software Foundation; either 13 | * version 3 of the License, or (at your option) any later version. 14 | * 15 | * FSPlayer is distributed in the hope that it will be useful, 16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 18 | * Lesser General Public License for more details. 19 | * 20 | * You should have received a copy of the GNU Lesser General Public 21 | * License along with FSPlayer; if not, write to the Free Software 22 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 23 | */ 24 | 25 | #include "../ijksdl.h" 26 | #include "ijksdl_aout_ios_audiounit.h" 27 | #import "ijksdl_vout_ios_gles2.h" 28 | -------------------------------------------------------------------------------- /ijkmedia/ijksdl/apple/ijksdl_gpu_opengl_macos.h: -------------------------------------------------------------------------------- 1 | /* 2 | * ijksdl_gpu_opengl_macos.h 3 | * 4 | * Copyright (c) 2024 debugly 5 | * 6 | * This file is part of FSPlayer. 7 | * 8 | * FSPlayer is free software; you can redistribute it and/or 9 | * modify it under the terms of the GNU Lesser General Public 10 | * License as published by the Free Software Foundation; either 11 | * version 3 of the License, or (at your option) any later version. 12 | * 13 | * FSPlayer is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 | * Lesser General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU Lesser General Public 19 | * License along with FSPlayer; if not, write to the Free Software 20 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 21 | */ 22 | 23 | #import 24 | 25 | @class NSOpenGLContext; 26 | typedef struct SDL_GPU SDL_GPU; 27 | 28 | SDL_GPU *SDL_CreateGPU_WithGLContext(NSOpenGLContext * context); 29 | -------------------------------------------------------------------------------- /examples/ios/FSPlayerDemo/ViewController/FSDemoHistory.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015 Gdier 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | #import 18 | 19 | @interface FSDemoHistoryItem : NSObject 20 | 21 | @property(nonatomic,strong) NSString *title; 22 | @property(nonatomic,strong) NSURL *url; 23 | 24 | @end 25 | 26 | @interface FSDemoHistory : NSObject 27 | 28 | + (instancetype)instance; 29 | 30 | @property(nonatomic,strong,readonly) NSArray *list; 31 | 32 | - (void)removeAtIndex:(NSUInteger)index; 33 | - (void)add:(FSDemoHistoryItem *)item; 34 | 35 | @end 36 | -------------------------------------------------------------------------------- /ijkmedia/ijksdl/apple/ijksdl_aout_ios_audiounit.h: -------------------------------------------------------------------------------- 1 | /* 2 | * ijksdl_aout_ios_audiounit.h 3 | * 4 | * Copyright (c) 2013 Bilibili 5 | * Copyright (c) 2013 Zhang Rui 6 | * Copyright (c) 2019 debugly 7 | * 8 | * This file is part of FSPlayer. 9 | * 10 | * FSPlayer is free software; you can redistribute it and/or 11 | * modify it under the terms of the GNU Lesser General Public 12 | * License as published by the Free Software Foundation; either 13 | * version 3 of the License, or (at your option) any later version. 14 | * 15 | * FSPlayer is distributed in the hope that it will be useful, 16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 18 | * Lesser General Public License for more details. 19 | * 20 | * You should have received a copy of the GNU Lesser General Public 21 | * License along with FSPlayer; if not, write to the Free Software 22 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 23 | */ 24 | 25 | #include "ijksdl/ijksdl_aout.h" 26 | 27 | SDL_Aout *SDL_AoutIos_CreateForAudioUnit(void); 28 | -------------------------------------------------------------------------------- /examples/ios/FSPlayerDemo/ViewController/FSCommon.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2013-2015 Bilibili 3 | * Copyright (C) 2013-2015 Zhang Rui 4 | * Copyright (c) 2019 debugly 5 | * 6 | * Licensed under the Apache License, Version 2.0 (the "License"); 7 | * you may not use this file except in compliance with the License. 8 | * You may obtain a copy of the License at 9 | * 10 | * http://www.apache.org/licenses/LICENSE-2.0 11 | * 12 | * Unless required by applicable law or agreed to in writing, software 13 | * distributed under the License is distributed on an "AS IS" BASIS, 14 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | * See the License for the specific language governing permissions and 16 | * limitations under the License. 17 | */ 18 | 19 | #import 20 | 21 | #define IOS_OLDER_THAN_6 ( [ [ [ UIDevice currentDevice ] systemVersion ] floatValue ] < 6.0 ) 22 | #define IOS_NEWER_OR_EQUAL_TO_6 ( [ [ [ UIDevice currentDevice ] systemVersion ] floatValue ] >= 6.0 ) 23 | #define IOS_NEWER_OR_EQUAL_TO_7 ( [ [ [ UIDevice currentDevice ] systemVersion ] floatValue ] >= 7.0 ) 24 | -------------------------------------------------------------------------------- /ijkmedia/ijksdl/apple/ijksdl_gpu_metal.h: -------------------------------------------------------------------------------- 1 | /* 2 | * ijksdl_gpu_metal.h 3 | * 4 | * Copyright (c) 2024 debugly 5 | * 6 | * This file is part of FSPlayer. 7 | * 8 | * FSPlayer is free software; you can redistribute it and/or 9 | * modify it under the terms of the GNU Lesser General Public 10 | * License as published by the Free Software Foundation; either 11 | * version 3 of the License, or (at your option) any later version. 12 | * 13 | * FSPlayer is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 | * Lesser General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU Lesser General Public 19 | * License along with FSPlayer; if not, write to the Free Software 20 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 21 | */ 22 | 23 | #import 24 | 25 | @protocol MTLDevice; 26 | typedef struct SDL_GPU SDL_GPU; 27 | 28 | API_AVAILABLE(macos(10.13),ios(11.0),tvos(12.0)) 29 | SDL_GPU *SDL_CreateGPU_WithMTLDevice(iddevice); 30 | -------------------------------------------------------------------------------- /ijkmedia/ijksdl/mac/FSSDLGLView.h: -------------------------------------------------------------------------------- 1 | /* 2 | * FSSDLGLView.h 3 | * 4 | * Copyright (c) 2013 Bilibili 5 | * Copyright (c) 2013 Zhang Rui 6 | * Copyright (c) 2019 debugly 7 | * 8 | * based on https://github.com/kolyvan/kxmovie 9 | * 10 | * This file is part of FSPlayer. 11 | * 12 | * FSPlayer is free software; you can redistribute it and/or 13 | * modify it under the terms of the GNU Lesser General Public 14 | * License as published by the Free Software Foundation; either 15 | * version 3 of the License, or (at your option) any later version. 16 | * 17 | * FSPlayer is distributed in the hope that it will be useful, 18 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 19 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 20 | * Lesser General Public License for more details. 21 | * 22 | * You should have received a copy of the GNU Lesser General Public 23 | * License along with FSPlayer; if not, write to the Free Software 24 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 25 | */ 26 | 27 | #import "FSVideoRenderingProtocol.h" 28 | 29 | @interface FSSDLGLView : NSOpenGLView 30 | 31 | @end 32 | -------------------------------------------------------------------------------- /ijkmedia/ijkplayer/ijkavformat/ijkavformat.h: -------------------------------------------------------------------------------- 1 | /* 2 | * ijkavformat.h 3 | * 4 | * Copyright (c) 2003 Bilibili 5 | * Copyright (c) 2003 Fabrice Bellard 6 | * Copyright (c) 2013 Zhang Rui 7 | * Copyright (c) 2019 debugly 8 | * 9 | * This file is part of FSPlayer. 10 | * 11 | * FSPlayer is free software; you can redistribute it and/or 12 | * modify it under the terms of the GNU Lesser General Public 13 | * License as published by the Free Software Foundation; either 14 | * version 3 of the License, or (at your option) any later version. 15 | * 16 | * FSPlayer is distributed in the hope that it will be useful, 17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 19 | * Lesser General Public License for more details. 20 | * 21 | * You should have received a copy of the GNU Lesser General Public 22 | * License along with FSPlayer; if not, write to the Free Software 23 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 24 | */ 25 | 26 | #ifndef AVFORMAT_IJKAVFORMAT_H 27 | #define AVFORMAT_IJKAVFORMAT_H 28 | 29 | #define AV_PKT_FLAG_DISCONTINUITY 0x0100 30 | 31 | #endif 32 | -------------------------------------------------------------------------------- /ijkmedia/ijkplayer/apple/pipeline/ffpipeline_ios.h: -------------------------------------------------------------------------------- 1 | /* 2 | * ffpipeline_ios.h 3 | * 4 | * Copyright (c) 2014 Zhou Quan 5 | * Copyright (c) 2019 debugly 6 | * 7 | * This file is part of FSPlayer. 8 | * 9 | * FSPlayer is free software; you can redistribute it and/or 10 | * modify it under the terms of the GNU Lesser General Public 11 | * License as published by the Free Software Foundation; either 12 | * version 3 of the License, or (at your option) any later version. 13 | * 14 | * FSPlayer is distributed in the hope that it will be useful, 15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 17 | * Lesser General Public License for more details. 18 | * 19 | * You should have received a copy of the GNU Lesser General Public 20 | * License along with FSPlayer; if not, write to the Free Software 21 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 22 | */ 23 | 24 | #ifndef FFPLAY__FF_FFPIPELINE_IOS_H 25 | #define FFPLAY__FF_FFPIPELINE_IOS_H 26 | 27 | #include "ijkplayer/ff_ffpipeline.h" 28 | 29 | struct FFPlayer; 30 | 31 | FS_Pipeline *ffpipeline_create_from_ios(struct FFPlayer *ffp); 32 | 33 | #endif 34 | -------------------------------------------------------------------------------- /ijkmedia/ijksdl/metal/FSMetalRenderer.h: -------------------------------------------------------------------------------- 1 | // 2 | // FSMetalRenderer.h 3 | // FFmpegTutorial-macOS 4 | // 5 | // Created by debugly on 2022/11/23. 6 | // Copyright © 2022 debugly's Awesome FFmpeg Tutotial. All rights reserved. 7 | // 8 | 9 | @import MetalKit; 10 | #import "FSMetalShaderTypes.h" 11 | 12 | NS_ASSUME_NONNULL_BEGIN 13 | NS_CLASS_AVAILABLE(10_13, 11_0) 14 | @interface FSMetalRenderer : NSObject 15 | 16 | @property (nonatomic, assign) float rotateDegrees; 17 | @property (nonatomic, assign) int rotateType;//x:1,y:2,z:3 18 | @property (nonatomic, assign) float autoZRotateDegrees; 19 | @property (nonatomic, assign) CGSize vertexRatio; 20 | @property (nonatomic, assign) CGSize textureCrop; 21 | //非HDR视频设置无效 22 | @property (nonatomic, assign) float hdrPercentage; 23 | 24 | - (BOOL)isHDR; 25 | - (instancetype)initWithDevice:(id)device 26 | colorPixelFormat:(MTLPixelFormat)colorPixelFormat; 27 | 28 | - (BOOL)matchPixelBuffer:(CVPixelBufferRef)pixelBuffer; 29 | - (void)updateColorAdjustment:(vector_float4)c; 30 | 31 | - (BOOL)createRenderPipelineIfNeed:(CVPixelBufferRef)pixelBuffer blend:(BOOL)blend; 32 | - (void)uploadTextureWithEncoder:(id)encoder 33 | textures:(NSArray*)textures; 34 | @end 35 | 36 | NS_ASSUME_NONNULL_END 37 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | tag 1.0.3 2 | -------------------------------- 3 | 4 | - rename subtitle option to subtitle_mix 5 | - support custom audio rendering 6 | - support get video-master diff 7 | - add libwebp decoder 8 | - add webp demuxer for animated webp images 9 | - fix removeFromSuperview triggered reshape crash when use OpenGL backend 10 | - fix the display of PNG images with transparency channels 11 | 12 | tag 1.0.2 13 | -------------------------------- 14 | 15 | - upgrade FFmpeg to 7.1.1 16 | - upgrade openssl to 3.5.0 17 | - add dvdnav dependency 18 | - fix some hls/ts can’t use videotoolbox accel bug 19 | - fix shutdown crash when use OpenGL backend 20 | - fix snapshot not keep video rational bug when use metal backend 21 | 22 | tag 1.0.1 23 | -------------------------------- 24 | 25 | - fix dash file error "unterminated entity reference" #7 26 | - example abandon CocoaPods 27 | - support choose audio channel(left,right,stereo) 28 | - support fast record video 29 | - fix metal maybe display pink frame bug 30 | 31 | tag 1.0.0 32 | -------------------------------- 33 | 34 | - use FFmpeg n6.1.1 35 | - the bdmv detection time is saved and detection in read_thread 36 | - fix opengl display first PIX_FMT_PAL8 subtitle bug 37 | - fix ijkio eof bug 38 | - max-buffer-size increate to 500MB 39 | - fix ass subtitle bottom margin bug 40 | -------------------------------------------------------------------------------- /ijkmedia/ijksdl/ijksdl_inc_internal.h: -------------------------------------------------------------------------------- 1 | /* 2 | * ijksdl_inc_internal.h 3 | * 4 | * Copyright (c) 2013 Bilibili 5 | * Copyright (c) 2013 Zhang Rui 6 | * Copyright (c) 2019 debugly 7 | * 8 | * This file is part of FSPlayer. 9 | * 10 | * FSPlayer is free software; you can redistribute it and/or 11 | * modify it under the terms of the GNU Lesser General Public 12 | * License as published by the Free Software Foundation; either 13 | * version 3 of the License, or (at your option) any later version. 14 | * 15 | * FSPlayer is distributed in the hope that it will be useful, 16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 18 | * Lesser General Public License for more details. 19 | * 20 | * You should have received a copy of the GNU Lesser General Public 21 | * License along with FSPlayer; if not, write to the Free Software 22 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 23 | */ 24 | 25 | #ifndef FSPLAYER__IJKSDL_INC_INTERNAL_H 26 | #define FSPLAYER__IJKSDL_INC_INTERNAL_H 27 | 28 | #include 29 | 30 | #include "ijksdl_log.h" 31 | #include "ijksdl_misc.h" 32 | #include "ijksdl_stdinc.h" 33 | 34 | #define SDLTRACE ALOGD 35 | 36 | #endif 37 | -------------------------------------------------------------------------------- /ijkmedia/ijksdl/ijksdl_stdinc.c: -------------------------------------------------------------------------------- 1 | /***************************************************************************** 2 | * ijksdl_stdinc.c 3 | ***************************************************************************** 4 | * 5 | * Copyright (c) 2013 Bilibili 6 | * Copyright (c) 2013 Zhang Rui 7 | * Copyright (c) 2019 debugly 8 | * 9 | * This file is part of FSPlayer. 10 | * 11 | * FSPlayer is free software; you can redistribute it and/or 12 | * modify it under the terms of the GNU Lesser General Public 13 | * License as published by the Free Software Foundation; either 14 | * version 3 of the License, or (at your option) any later version. 15 | * 16 | * FSPlayer is distributed in the hope that it will be useful, 17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 19 | * Lesser General Public License for more details. 20 | * 21 | * You should have received a copy of the GNU Lesser General Public 22 | * License along with FSPlayer; if not, write to the Free Software 23 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 24 | */ 25 | 26 | #include "ijksdl_stdinc.h" 27 | 28 | char *SDL_getenv(const char *name) 29 | { 30 | return NULL; 31 | } 32 | 33 | -------------------------------------------------------------------------------- /ijkmedia/ijkplayer/pipeline/ffpipeline_ffplay.h: -------------------------------------------------------------------------------- 1 | /* 2 | * ffpipeline_ffplay.h 3 | * 4 | * Copyright (c) 2014 Bilibili 5 | * Copyright (c) 2014 Zhang Rui 6 | * Copyright (c) 2019 debugly 7 | * 8 | * This file is part of FSPlayer. 9 | * 10 | * FSPlayer is free software; you can redistribute it and/or 11 | * modify it under the terms of the GNU Lesser General Public 12 | * License as published by the Free Software Foundation; either 13 | * version 3 of the License, or (at your option) any later version. 14 | * 15 | * FSPlayer is distributed in the hope that it will be useful, 16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 18 | * Lesser General Public License for more details. 19 | * 20 | * You should have received a copy of the GNU Lesser General Public 21 | * License along with FSPlayer; if not, write to the Free Software 22 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 23 | */ 24 | 25 | #ifndef FFPLAY__FF_FFPIPELINE_FFPLAY_H 26 | #define FFPLAY__FF_FFPIPELINE_FFPLAY_H 27 | 28 | #include "../ff_ffpipeline.h" 29 | 30 | // There is no default aout for ffplay. 31 | // FS_Pipeline *ffpipeline_create_from_ffplay(FFPlayer *ffp); 32 | 33 | #endif 34 | -------------------------------------------------------------------------------- /ijkmedia/ijksdl/ijksdl_error.h: -------------------------------------------------------------------------------- 1 | /***************************************************************************** 2 | * ijksdl_error.h 3 | ***************************************************************************** 4 | * 5 | * Copyright (c) 2013 Bilibili 6 | * Copyright (c) 2013 Zhang Rui 7 | * Copyright (c) 2019 debugly 8 | * 9 | * This file is part of FSPlayer. 10 | * 11 | * FSPlayer is free software; you can redistribute it and/or 12 | * modify it under the terms of the GNU Lesser General Public 13 | * License as published by the Free Software Foundation; either 14 | * version 3 of the License, or (at your option) any later version. 15 | * 16 | * FSPlayer is distributed in the hope that it will be useful, 17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 19 | * Lesser General Public License for more details. 20 | * 21 | * You should have received a copy of the GNU Lesser General Public 22 | * License along with FSPlayer; if not, write to the Free Software 23 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 24 | */ 25 | 26 | #ifndef FSSDL__IJKSDL_ERROR_H 27 | #define FSSDL__IJKSDL_ERROR_H 28 | 29 | const char *SDL_GetError(void); 30 | 31 | #endif 32 | -------------------------------------------------------------------------------- /ijkmedia/ijkplayer/ff_fferror.h: -------------------------------------------------------------------------------- 1 | /* 2 | * ff_fferror.h 3 | * 4 | * Copyright (c) 2003 Bilibili 5 | * Copyright (c) 2003 Fabrice Bellard 6 | * Copyright (c) 2013 Zhang Rui 7 | * Copyright (c) 2019 debugly 8 | * 9 | * This file is part of FSPlayer. 10 | * 11 | * FSPlayer is free software; you can redistribute it and/or 12 | * modify it under the terms of the GNU Lesser General Public 13 | * License as published by the Free Software Foundation; either 14 | * version 3 of the License, or (at your option) any later version. 15 | * 16 | * FSPlayer is distributed in the hope that it will be useful, 17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 19 | * Lesser General Public License for more details. 20 | * 21 | * You should have received a copy of the GNU Lesser General Public 22 | * License along with FSPlayer; if not, write to the Free Software 23 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 24 | */ 25 | 26 | #ifndef FFPLAY__FF_FFERROR_H 27 | #define FFPLAY__FF_FFERROR_H 28 | 29 | #define EIJK_FAILED -1 30 | #define EIJK_OUT_OF_MEMORY -2 31 | #define EIJK_INVALID_STATE -3 32 | #define EIJK_NULL_IS_PTR -4 33 | 34 | #endif 35 | -------------------------------------------------------------------------------- /ijkmedia/ijksdl/apple/FSSDLAudioUnitController.h: -------------------------------------------------------------------------------- 1 | /* 2 | * FSSDLAudioUnitController.h 3 | * 4 | * Copyright (c) 2013 Bilibili 5 | * Copyright (c) 2013 Zhang Rui 6 | * Copyright (c) 2019 debugly 7 | * 8 | * based on https://github.com/kolyvan/kxmovie 9 | * 10 | * This file is part of FSPlayer. 11 | * 12 | * FSPlayer is free software; you can redistribute it and/or 13 | * modify it under the terms of the GNU Lesser General Public 14 | * License as published by the Free Software Foundation; either 15 | * version 3 of the License, or (at your option) any later version. 16 | * 17 | * FSPlayer is distributed in the hope that it will be useful, 18 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 19 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 20 | * Lesser General Public License for more details. 21 | * 22 | * You should have received a copy of the GNU Lesser General Public 23 | * License along with FSPlayer; if not, write to the Free Software 24 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 25 | */ 26 | 27 | #import "FSAudioRenderingProtocol.h" 28 | 29 | @interface FSSDLAudioUnitController : NSObject 30 | 31 | @property (nonatomic, readonly) FSAudioSpec * spec; 32 | 33 | @end 34 | -------------------------------------------------------------------------------- /ijkmedia/ijksdl/apple/ijk_vout_common.h: -------------------------------------------------------------------------------- 1 | /* 2 | * ijk_vout_common.h 3 | * 4 | * Copyright (c) 2023 debugly 5 | * 6 | * This file is part of FSPlayer. 7 | * 8 | * FSPlayer is free software; you can redistribute it and/or 9 | * modify it under the terms of the GNU Lesser General Public 10 | * License as published by the Free Software Foundation; either 11 | * version 3 of the License, or (at your option) any later version. 12 | * 13 | * FSPlayer is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 | * Lesser General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU Lesser General Public 19 | * License along with FSPlayer; if not, write to the Free Software 20 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 21 | */ 22 | 23 | #ifndef FSSDL__IJKSDL_VOUT_COMMON_H 24 | #define FSSDL__IJKSDL_VOUT_COMMON_H 25 | 26 | #define FS_TransferFunction_ITU_R_2100_HLG CFSTR("ITU_R_2100_HLG") 27 | #define FS_TransferFunction_SMPTE_ST_2084_PQ CFSTR("SMPTE_ST_2084_PQ") 28 | #define FS_TransferFunction_SMPTE_ST_428_1 CFSTR("SMPTE_ST_428_1") 29 | #define FS_TransferFunction_Linear CFSTR("Linear") 30 | 31 | #endif 32 | -------------------------------------------------------------------------------- /ijkmedia/ijksdl/ijksdl_error.c: -------------------------------------------------------------------------------- 1 | /***************************************************************************** 2 | * ijksdl_error.c 3 | ***************************************************************************** 4 | * 5 | * Copyright (c) 2013 Bilibili 6 | * Copyright (c) 2013 Zhang Rui 7 | * Copyright (c) 2019 debugly 8 | * 9 | * This file is part of FSPlayer. 10 | * 11 | * FSPlayer is free software; you can redistribute it and/or 12 | * modify it under the terms of the GNU Lesser General Public 13 | * License as published by the Free Software Foundation; either 14 | * version 3 of the License, or (at your option) any later version. 15 | * 16 | * FSPlayer is distributed in the hope that it will be useful, 17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 19 | * Lesser General Public License for more details. 20 | * 21 | * You should have received a copy of the GNU Lesser General Public 22 | * License along with FSPlayer; if not, write to the Free Software 23 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 24 | */ 25 | 26 | #include "ijksdl_error.h" 27 | #include "ijksdl_stdinc.h" 28 | 29 | const char *SDL_GetError(void) 30 | { 31 | return NULL; 32 | } 33 | -------------------------------------------------------------------------------- /ijkmedia/ijkplayer/pipeline/ffpipenode_ffplay_vdec.h: -------------------------------------------------------------------------------- 1 | /* 2 | * ffpipenode_ffplay_vdec.h 3 | * 4 | * Copyright (c) 2014 Bilibili 5 | * Copyright (c) 2014 Zhang Rui 6 | * Copyright (c) 2019 debugly 7 | * 8 | * This file is part of FSPlayer. 9 | * 10 | * FSPlayer is free software; you can redistribute it and/or 11 | * modify it under the terms of the GNU Lesser General Public 12 | * License as published by the Free Software Foundation; either 13 | * version 3 of the License, or (at your option) any later version. 14 | * 15 | * FSPlayer is distributed in the hope that it will be useful, 16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 18 | * Lesser General Public License for more details. 19 | * 20 | * You should have received a copy of the GNU Lesser General Public 21 | * License along with FSPlayer; if not, write to the Free Software 22 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 23 | */ 24 | 25 | #ifndef FFPLAY__FF_FFPIPENODE_FFPLAY_VDEC_H 26 | #define FFPLAY__FF_FFPIPENODE_FFPLAY_VDEC_H 27 | 28 | #include "ff_ffpipenode.h" 29 | 30 | struct FFPlayer; 31 | 32 | FS_Pipenode *ffpipenode_create_video_decoder_from_ffplay(struct FFPlayer *ffp); 33 | 34 | #endif 35 | -------------------------------------------------------------------------------- /ijkmedia/wrapper/apple/FSAudioRendering.h: -------------------------------------------------------------------------------- 1 | /* 2 | * FSAudioRendering.h 3 | * 4 | * Copyright (c) 2023 debugly 5 | * 6 | * This file is part of FSPlayer. 7 | * 8 | * FSPlayer is free software; you can redistribute it and/or 9 | * modify it under the terms of the GNU Lesser General Public 10 | * License as published by the Free Software Foundation; either 11 | * version 3 of the License, or (at your option) any later version. 12 | * 13 | * FSPlayer is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 | * Lesser General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU Lesser General Public 19 | * License along with FSPlayer; if not, write to the Free Software 20 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 21 | */ 22 | 23 | // you can use below mthods, create ijk internal render view. 24 | 25 | #import 26 | 27 | NS_ASSUME_NONNULL_BEGIN 28 | 29 | @interface FSAudioRendering : NSObject 30 | 31 | + (id)createAudioUnitRendering; 32 | + (id)createAudioQueueRendering; 33 | 34 | @end 35 | 36 | NS_ASSUME_NONNULL_END 37 | -------------------------------------------------------------------------------- /ijkmedia/ijksdl/ijksdl_video.h: -------------------------------------------------------------------------------- 1 | /***************************************************************************** 2 | * ijksdl_video.h 3 | ***************************************************************************** 4 | * 5 | * Copyright (c) 2013 Bilibili 6 | * Copyright (c) 2013 Zhang Rui 7 | * Copyright (c) 2019 debugly 8 | * 9 | * This file is part of FSPlayer. 10 | * 11 | * FSPlayer is free software; you can redistribute it and/or 12 | * modify it under the terms of the GNU Lesser General Public 13 | * License as published by the Free Software Foundation; either 14 | * version 3 of the License, or (at your option) any later version. 15 | * 16 | * FSPlayer is distributed in the hope that it will be useful, 17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 19 | * Lesser General Public License for more details. 20 | * 21 | * You should have received a copy of the GNU Lesser General Public 22 | * License along with FSPlayer; if not, write to the Free Software 23 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 24 | */ 25 | 26 | #ifndef FSSDL__IJKSDL_VIDEO_H 27 | #define FSSDL__IJKSDL_VIDEO_H 28 | 29 | #include "ijksdl_stdinc.h" 30 | #include "ijksdl_fourcc.h" 31 | 32 | #endif 33 | -------------------------------------------------------------------------------- /ijkmedia/ijksdl/ijksdl_class.h: -------------------------------------------------------------------------------- 1 | /***************************************************************************** 2 | * ijksdl_class.h 3 | ***************************************************************************** 4 | * 5 | * Copyright (c) 2013 Bilibili 6 | * Copyright (c) 2013 Zhang Rui 7 | * Copyright (c) 2019 debugly 8 | * 9 | * This file is part of FSPlayer. 10 | * 11 | * FSPlayer is free software; you can redistribute it and/or 12 | * modify it under the terms of the GNU Lesser General Public 13 | * License as published by the Free Software Foundation; either 14 | * version 3 of the License, or (at your option) any later version. 15 | * 16 | * FSPlayer is distributed in the hope that it will be useful, 17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 19 | * Lesser General Public License for more details. 20 | * 21 | * You should have received a copy of the GNU Lesser General Public 22 | * License along with FSPlayer; if not, write to the Free Software 23 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 24 | */ 25 | 26 | #ifndef FSSDL__IJKSDL_CLASS_H 27 | #define FSSDL__IJKSDL_CLASS_H 28 | 29 | typedef struct SDL_Class { 30 | const char *name; 31 | } SDL_Class; 32 | 33 | #endif 34 | -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/ViewController/MultiRenderSample.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /ijkmedia/ijksdl/apple/FSSDLAudioQueueController.h: -------------------------------------------------------------------------------- 1 | /* 2 | * FSSDLAudioQueueController.h 3 | * 4 | * Copyright (c) 2013-2014 Bilibili 5 | * Copyright (c) 2013-2014 Zhang Rui 6 | * Copyright (c) 2019 debugly 7 | * 8 | * based on https://github.com/kolyvan/kxmovie 9 | * 10 | * This file is part of FSPlayer. 11 | * 12 | * FSPlayer is free software; you can redistribute it and/or 13 | * modify it under the terms of the GNU Lesser General Public 14 | * License as published by the Free Software Foundation; either 15 | * version 3 of the License, or (at your option) any later version. 16 | * 17 | * FSPlayer is distributed in the hope that it will be useful, 18 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 19 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 20 | * Lesser General Public License for more details. 21 | * 22 | * You should have received a copy of the GNU Lesser General Public 23 | * License along with FSPlayer; if not, write to the Free Software 24 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 25 | */ 26 | 27 | #import 28 | #import "FSAudioRenderingProtocol.h" 29 | 30 | @interface FSSDLAudioQueueController : NSObject 31 | 32 | @property (nonatomic, readonly) FSAudioSpec * spec; 33 | 34 | @end 35 | -------------------------------------------------------------------------------- /ijkmedia/wrapper/apple/FSMediaModule.h: -------------------------------------------------------------------------------- 1 | /* 2 | * FSMediaModule.h 3 | * 4 | * Copyright (c) 2013 Bilibili 5 | * Copyright (c) 2013 Zhang Rui 6 | * Copyright (c) 2019 debugly 7 | * 8 | * This file is part of FSPlayer. 9 | * 10 | * FSPlayer is free software; you can redistribute it and/or 11 | * modify it under the terms of the GNU Lesser General Public 12 | * License as published by the Free Software Foundation; either 13 | * version 3 of the License, or (at your option) any later version. 14 | * 15 | * FSPlayer is distributed in the hope that it will be useful, 16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 18 | * Lesser General Public License for more details. 19 | * 20 | * You should have received a copy of the GNU Lesser General Public 21 | * License along with FSPlayer; if not, write to the Free Software 22 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 23 | */ 24 | 25 | #import 26 | 27 | @interface FSMediaModule : NSObject 28 | 29 | + (FSMediaModule *)sharedModule; 30 | 31 | @property(atomic, getter=isAppIdleTimerDisabled) BOOL appIdleTimerDisabled; 32 | @property(atomic, getter=isMediaModuleIdleTimerDisabled) BOOL mediaModuleIdleTimerDisabled; 33 | 34 | @end 35 | -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/CustomView/SHBaseView.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // FSPlayerDemo 4 | // 5 | // Created by debugly on 2021/12/01. 6 | // Copyright © 2021 debugly. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @class SHBaseView; 12 | @protocol SHBaseViewDelegate 13 | @optional; 14 | - (void)baseView:(SHBaseView *)baseView mouseEntered:(NSEvent *)event; 15 | - (void)baseView:(SHBaseView *)baseView mouseExited:(NSEvent *)event; 16 | - (void)baseView:(SHBaseView *)baseView mouseMoved:(NSEvent *)event; 17 | - (void)baseView:(SHBaseView *)baseView mouseDown:(NSEvent *)event; 18 | - (void)baseView:(SHBaseView *)baseView mouseUp:(NSEvent *)event; 19 | - (void)baseView:(SHBaseView *)baseView mouseDragged:(NSEvent *)theEvent; 20 | - (BOOL)baseView:(SHBaseView *)baseView cursorNeedUpdate:(NSEvent *)event; 21 | 22 | @end 23 | 24 | @interface SHBaseView : NSView 25 | 26 | @property (strong, nonatomic) IBInspectable NSColor *backgroundColor; 27 | @property (weak) IBOutlet id delegate; 28 | //default is YES; 29 | @property (assign, nonatomic) IBInspectable BOOL userInteraction; 30 | //default is NO; 31 | @property (assign, nonatomic) IBInspectable BOOL needTracking; 32 | @property (copy, nonatomic) NSString *name; 33 | @property (nonatomic, assign) NSEdgeInsets inset; 34 | @property (readwrite) IBInspectable NSInteger tag; 35 | 36 | @end 37 | -------------------------------------------------------------------------------- /ijkmedia/ijksdl/apple/ijksdl_gpu_opengl_fbo_macos.h: -------------------------------------------------------------------------------- 1 | /* 2 | * ijksdl_gpu_opengl_fbo_macos.h 3 | * 4 | * Copyright (c) 2024 debugly 5 | * 6 | * This file is part of FSPlayer. 7 | * 8 | * FSPlayer is free software; you can redistribute it and/or 9 | * modify it under the terms of the GNU Lesser General Public 10 | * License as published by the Free Software Foundation; either 11 | * version 3 of the License, or (at your option) any later version. 12 | * 13 | * FSPlayer is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 | * Lesser General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU Lesser General Public 19 | * License along with FSPlayer; if not, write to the Free Software 20 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 21 | */ 22 | 23 | #import 24 | 25 | NS_ASSUME_NONNULL_BEGIN 26 | 27 | @protocol FSSDLSubtitleTextureWrapper; 28 | @interface FSSDLOpenGLFBO : NSObject 29 | 30 | @property(nonatomic, readonly) id texture; 31 | 32 | - (instancetype)initWithSize:(CGSize)size; 33 | - (BOOL)canReuse:(CGSize)size; 34 | - (CGSize)size; 35 | - (void)bind; 36 | 37 | @end 38 | 39 | NS_ASSUME_NONNULL_END 40 | -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/CustomView/MRProgressSlider.h: -------------------------------------------------------------------------------- 1 | // 2 | // MRProgressSlider.h 3 | // FSPlayerMacDemo 4 | // 5 | // Created by debugly on 2021/5/17. 6 | // Copyright © 2021 FSPlayer Mac 版. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | @interface MRProgressSlider : NSView 14 | 15 | @property (nonatomic, strong) IBInspectable NSImage * knobImage; 16 | @property (nonatomic, strong) IBInspectable NSImage * hoverknobImage; 17 | //主色调 18 | @property (nonatomic, strong) IBInspectable NSColor *mainColor; 19 | //背景颜色 20 | @property (nonatomic, strong) IBInspectable NSColor *bgColor; 21 | //进度[min-max]; 22 | @property (nonatomic, assign) IBInspectable CGFloat currentValue; 23 | //最大值 24 | @property (nonatomic, assign) IBInspectable CGFloat maxValue; 25 | //最小值 26 | @property (nonatomic, assign) IBInspectable CGFloat minValue; 27 | 28 | //分段个数和颜色 29 | @property (nonatomic, assign) IBInspectable NSInteger segementCount; 30 | @property (nonatomic, strong) IBInspectable NSColor *segementColor; 31 | 32 | @property (assign, nonatomic) BOOL userInteraction; 33 | @property (readwrite) NSInteger tag; 34 | //默认横向,可以使用竖向的 35 | @property (assign, nonatomic) BOOL useVertical; 36 | //停止拖拽时回调 37 | - (void)onDraggedIndicator:(void(^)(double progress,MRProgressSlider *indicator,BOOL isEndDrag))handler; 38 | - (int)currentIndex; 39 | 40 | @end 41 | 42 | NS_ASSUME_NONNULL_END 43 | -------------------------------------------------------------------------------- /ijkmedia/wrapper/apple/FSVideoRenderView.h: -------------------------------------------------------------------------------- 1 | /* 2 | * FSVideoRenderView.h 3 | * 4 | * Copyright (c) 2023 debugly 5 | * 6 | * This file is part of FSPlayer. 7 | * 8 | * FSPlayer is free software; you can redistribute it and/or 9 | * modify it under the terms of the GNU Lesser General Public 10 | * License as published by the Free Software Foundation; either 11 | * version 3 of the License, or (at your option) any later version. 12 | * 13 | * FSPlayer is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 | * Lesser General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU Lesser General Public 19 | * License along with FSPlayer; if not, write to the Free Software 20 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 21 | */ 22 | 23 | // you can use below mthods, create ijk internal render view. 24 | 25 | #import 26 | 27 | NS_ASSUME_NONNULL_BEGIN 28 | 29 | @interface FSVideoRenderView : NSObject 30 | 31 | #if TARGET_OS_OSX 32 | + (UIView *)createGLRenderView; 33 | #endif 34 | 35 | + (UIView *)createMetalRenderView NS_AVAILABLE(10_13, 11_0); 36 | 37 | @end 38 | 39 | NS_ASSUME_NONNULL_END 40 | -------------------------------------------------------------------------------- /ijkmedia/ijksdl/apple/ijksdl_gpu_opengl_renderer_macos.h: -------------------------------------------------------------------------------- 1 | /* 2 | * ijksdl_gpu_opengl_renderer_macos.h 3 | * 4 | * Copyright (c) 2024 debugly 5 | * 6 | * This file is part of FSPlayer. 7 | * 8 | * FSPlayer is free software; you can redistribute it and/or 9 | * modify it under the terms of the GNU Lesser General Public 10 | * License as published by the Free Software Foundation; either 11 | * version 3 of the License, or (at your option) any later version. 12 | * 13 | * FSPlayer is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 | * Lesser General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU Lesser General Public 19 | * License along with FSPlayer; if not, write to the Free Software 20 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 21 | */ 22 | 23 | #import 24 | 25 | @class FSSDLOpenGLFBO; 26 | @protocol FSSDLSubtitleTextureWrapper; 27 | 28 | @interface FSSDLOpenGLSubRenderer : NSObject 29 | 30 | - (void)setupOpenGLProgramIfNeed; 31 | - (void)clean; 32 | - (void)bindFBO:(FSSDLOpenGLFBO *)fbo; 33 | - (void)updateSubtitleVertexIfNeed:(CGRect)rect; 34 | - (void)drawTexture:(id)subTexture colors:(void *)colors; 35 | 36 | @end 37 | -------------------------------------------------------------------------------- /ijkmedia/ijkplayer/ff_version.h: -------------------------------------------------------------------------------- 1 | /* 2 | * ff_version.h 3 | * 4 | * Copyright (c) 2025 debugly 5 | * 6 | * This file is part of FSPlayer. 7 | * 8 | * FSPlayer is free software; you can redistribute it and/or 9 | * modify it under the terms of the GNU Lesser General Public 10 | * License as published by the Free Software Foundation; either 11 | * version 3 of the License, or (at your option) any later version. 12 | * 13 | * FSPlayer is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 | * Lesser General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU Lesser General Public 19 | * License along with FSPlayer; if not, write to the Free Software 20 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 21 | */ 22 | 23 | #ifndef ff_version_h 24 | #define ff_version_h 25 | 26 | #include "libavformat/version_major.h" 27 | 28 | #define IS_FFMPEG_7 (LIBAVFORMAT_VERSION_MAJOR >= 61) 29 | #define IS_LESS_THAN_FFMPEG_7 (LIBAVFORMAT_VERSION_MAJOR < 61) 30 | #define IS_FFMPEG_6 (LIBAVFORMAT_VERSION_MAJOR >= 60) 31 | #define IS_FFMPEG_5 (LIBAVFORMAT_VERSION_MAJOR >= 59) 32 | #define IS_FFMPEG_4 (LIBAVFORMAT_VERSION_MAJOR >= 58) 33 | 34 | #endif /* ff_version_h */ 35 | -------------------------------------------------------------------------------- /examples/macos/build-framework.sh: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env bash 2 | # 3 | # Copyright (C) 2024 Matt Reach 4 | 5 | # Licensed under the Apache License, Version 2.0 (the "License"); 6 | # you may not use this file except in compliance with the License. 7 | # You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | 17 | THIS_DIR=$(DIRNAME=$(dirname "$0"); cd "$DIRNAME"; pwd) 18 | cd "$THIS_DIR" 19 | 20 | set -e 21 | 22 | if [[ ! -d FSPlayer.xcodeproj ]]; then 23 | ./generate-fsplayer.sh 24 | fi 25 | 26 | # 1 27 | PROJECT_NAME="FSPlayer.xcodeproj" 28 | TARGET_NAME="FSPlayer-macOS" 29 | 30 | WORK_DIR="Release" 31 | 32 | # 2 33 | if [ -d ${WORK_DIR} ]; then 34 | rm -rf ${WORK_DIR} 35 | fi 36 | 37 | # 3 38 | # project方式 39 | # xcodebuild -showsdks 40 | # Build the framework for device and simulator with all architectures. 41 | 42 | xcodebuild -project ${PROJECT_NAME} -target ${TARGET_NAME} \ 43 | -configuration Release \ 44 | -sdk macosx -arch x86_64 -arch arm64 \ 45 | BUILD_DIR=. \ 46 | clean build 47 | 48 | echo "macos framework dir:$WORK_DIR" -------------------------------------------------------------------------------- /ijkmedia/ijkplayer/ff_recorder.h: -------------------------------------------------------------------------------- 1 | /* 2 | * ff_recorder.h 3 | * 4 | * Copyright (c) 2025 debugly 5 | * 6 | * This file is part of FSPlayer. 7 | * 8 | * FSPlayer is free software; you can redistribute it and/or 9 | * modify it under the terms of the GNU Lesser General Public 10 | * License as published by the Free Software Foundation; either 11 | * version 3 of the License, or (at your option) any later version. 12 | * 13 | * FSPlayer is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 | * Lesser General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU Lesser General Public 19 | * License along with FSPlayer; if not, write to the Free Software 20 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 21 | */ 22 | 23 | /* record video */ 24 | 25 | #ifndef ff_recorder_h 26 | #define ff_recorder_h 27 | 28 | #include 29 | struct FFPlayer; 30 | struct AVFrame; 31 | struct AVFormatContext; 32 | 33 | int ff_create_recorder(void **out_ffr, const char *file_name, const struct AVFormatContext *ifmt_ctx); 34 | int ff_start_recorder(void *ffr); 35 | int ff_write_recorder(void *ffr, struct AVFrame *frame); 36 | void ff_stop_recorder(void *ffr); 37 | int ff_destroy_recorder(void **ffr); 38 | 39 | #endif /* ff_recorder_h */ 40 | -------------------------------------------------------------------------------- /ijkmedia/ijksdl/ffmpeg/ijksdl_inc_ffmpeg.h: -------------------------------------------------------------------------------- 1 | /* 2 | * ijksdl_ffinc.h 3 | * ffmpeg headers 4 | * 5 | * Copyright (c) 2013 Bilibili 6 | * Copyright (c) 2013 Zhang Rui 7 | * Copyright (c) 2019 debugly 8 | * 9 | * This file is part of FSPlayer. 10 | * 11 | * FSPlayer is free software; you can redistribute it and/or 12 | * modify it under the terms of the GNU Lesser General Public 13 | * License as published by the Free Software Foundation; either 14 | * version 3 of the License, or (at your option) any later version. 15 | * 16 | * FSPlayer is distributed in the hope that it will be useful, 17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 19 | * Lesser General Public License for more details. 20 | * 21 | * You should have received a copy of the GNU Lesser General Public 22 | * License along with FSPlayer; if not, write to the Free Software 23 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 24 | */ 25 | 26 | #ifndef FSSDL__FFMPEG__IJKSDL_FFINC_H 27 | #define FSSDL__FFMPEG__IJKSDL_FFINC_H 28 | 29 | #include "libavutil/imgutils.h" 30 | #include "libavutil/pixfmt.h" 31 | #include "libavutil/frame.h" 32 | #include "libavutil/common.h" 33 | #include "libavcodec/avcodec.h" 34 | #include "libswscale/swscale.h" 35 | 36 | #include "../ijksdl_inc_internal.h" 37 | 38 | #endif 39 | -------------------------------------------------------------------------------- /ijkmedia/ijksdl/apple/FSSDLAudioKit.h: -------------------------------------------------------------------------------- 1 | /* 2 | * FSSDLAudioKit.h 3 | * 4 | * Copyright (c) 2013-2014 Bilibili 5 | * Copyright (c) 2013-2014 Zhang Rui 6 | * Copyright (c) 2019 debugly 7 | * 8 | * based on https://github.com/kolyvan/kxmovie 9 | * 10 | * This file is part of FSPlayer. 11 | * 12 | * FSPlayer is free software; you can redistribute it and/or 13 | * modify it under the terms of the GNU Lesser General Public 14 | * License as published by the Free Software Foundation; either 15 | * version 3 of the License, or (at your option) any later version. 16 | * 17 | * FSPlayer is distributed in the hope that it will be useful, 18 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 19 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 20 | * Lesser General Public License for more details. 21 | * 22 | * You should have received a copy of the GNU Lesser General Public 23 | * License along with FSPlayer; if not, write to the Free Software 24 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 25 | */ 26 | 27 | #import 28 | 29 | @class FSAudioSpec; 30 | void FSSDLGetAudioComponentDescriptionFromSpec(FSAudioSpec *spec, AudioComponentDescription *desc); 31 | void FSSDLGetAudioStreamBasicDescriptionFromSpec(FSAudioSpec *spec, AudioStreamBasicDescription *desc); 32 | void FSSDLCalculateAudioSpec(FSAudioSpec * spec); 33 | -------------------------------------------------------------------------------- /ijkmedia/wrapper/apple/FSAudioRendering.m: -------------------------------------------------------------------------------- 1 | /* 2 | * FSAudioRendering.m 3 | * 4 | * Copyright (c) 2023 debugly 5 | * 6 | * This file is part of FSPlayer. 7 | * 8 | * FSPlayer is free software; you can redistribute it and/or 9 | * modify it under the terms of the GNU Lesser General Public 10 | * License as published by the Free Software Foundation; either 11 | * version 3 of the License, or (at your option) any later version. 12 | * 13 | * FSPlayer is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 | * Lesser General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU Lesser General Public 19 | * License along with FSPlayer; if not, write to the Free Software 20 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 21 | */ 22 | 23 | #import "FSAudioRendering.h" 24 | #import "FSSDLAudioQueueController.h" 25 | #import "FSSDLAudioUnitController.h" 26 | 27 | @implementation FSAudioSpec 28 | 29 | @end 30 | 31 | @implementation FSAudioRendering 32 | 33 | + (id)createAudioUnitRendering 34 | { 35 | return [FSSDLAudioUnitController new]; 36 | } 37 | 38 | + (id)createAudioQueueRendering 39 | { 40 | return [FSSDLAudioQueueController new]; 41 | } 42 | 43 | @end 44 | -------------------------------------------------------------------------------- /ijkmedia/wrapper/apple/FSNotificationManager.h: -------------------------------------------------------------------------------- 1 | /* 2 | * FSNotificationManager.h 3 | * 4 | * Copyright (c) 2016 Bilibili 5 | * Copyright (c) 2016 Zhang Rui 6 | * Copyright (c) 2019 debugly 7 | * 8 | * This file is part of FSPlayer. 9 | * 10 | * FSPlayer is free software; you can redistribute it and/or 11 | * modify it under the terms of the GNU Lesser General Public 12 | * License as published by the Free Software Foundation; either 13 | * version 3 of the License, or (at your option) any later version. 14 | * 15 | * FSPlayer is distributed in the hope that it will be useful, 16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 18 | * Lesser General Public License for more details. 19 | * 20 | * You should have received a copy of the GNU Lesser General Public 21 | * License along with FSPlayer; if not, write to the Free Software 22 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 23 | */ 24 | 25 | #import 26 | NS_ASSUME_NONNULL_BEGIN 27 | @interface FSNotificationManager : NSObject 28 | 29 | - (instancetype)init; 30 | 31 | - (void)addObserver:(id)observer 32 | selector:(SEL)aSelector 33 | name:(NSString *)aName 34 | object:(nullable id)anObject; 35 | 36 | - (void)removeAllObservers:(id)observer; 37 | 38 | @end 39 | NS_ASSUME_NONNULL_END 40 | -------------------------------------------------------------------------------- /ijkmedia/ijksdl/ffmpeg/ijksdl_image_convert.h: -------------------------------------------------------------------------------- 1 | /* 2 | * ijksdl_ffinc.h 3 | * ffmpeg headers 4 | * 5 | * Copyright (c) 2013 Bilibili 6 | * Copyright (c) 2013 Zhang Rui 7 | * Copyright (c) 2019 debugly 8 | * 9 | * This file is part of FSPlayer. 10 | * 11 | * FSPlayer is free software; you can redistribute it and/or 12 | * modify it under the terms of the GNU Lesser General Public 13 | * License as published by the Free Software Foundation; either 14 | * version 3 of the License, or (at your option) any later version. 15 | * 16 | * FSPlayer is distributed in the hope that it will be useful, 17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 19 | * Lesser General Public License for more details. 20 | * 21 | * You should have received a copy of the GNU Lesser General Public 22 | * License along with FSPlayer; if not, write to the Free Software 23 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 24 | */ 25 | 26 | #ifndef FSSDL__FFMPEG__IJKSDL_IMAGE_CONVERT_H 27 | #define FSSDL__FFMPEG__IJKSDL_IMAGE_CONVERT_H 28 | 29 | #include 30 | #include "ijksdl_inc_ffmpeg.h" 31 | 32 | int ijk_image_convert(int width, int height, 33 | enum AVPixelFormat dst_format, uint8_t **dst_data, int *dst_linesize, 34 | enum AVPixelFormat src_format, const uint8_t **src_data, const int *src_linesize); 35 | 36 | #endif 37 | -------------------------------------------------------------------------------- /ijkmedia/ijksdl/apple/FSSDLHudControl.h: -------------------------------------------------------------------------------- 1 | /* 2 | * FSSDLHudControl.h 3 | * 4 | * Copyright (c) 2013-2014 Bilibili 5 | * Copyright (c) 2013-2014 Zhang Rui 6 | * Copyright (c) 2019 debugly 7 | * 8 | * This file is part of FSPlayer. 9 | * 10 | * FSPlayer is free software; you can redistribute it and/or 11 | * modify it under the terms of the GNU Lesser General Public 12 | * License as published by the Free Software Foundation; either 13 | * version 3 of the License, or (at your option) any later version. 14 | * 15 | * FSPlayer is distributed in the hope that it will be useful, 16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 18 | * Lesser General Public License for more details. 19 | * 20 | * You should have received a copy of the GNU Lesser General Public 21 | * License along with FSPlayer; if not, write to the Free Software 22 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 23 | */ 24 | 25 | #import 26 | #import 27 | #if TARGET_OS_OSX 28 | #import 29 | typedef NSView UIView; 30 | #else 31 | #import 32 | #endif 33 | 34 | @interface FSSDLHudControl : NSObject 35 | 36 | - (UIView *)contentView; 37 | - (void)destroyContentView; 38 | - (void)setHudValue:(NSString *)value forKey:(NSString *)key; 39 | - (NSDictionary *)allHudItem; 40 | 41 | @end 42 | 43 | -------------------------------------------------------------------------------- /ijkmedia/ijkplayer/ff_muxer.h: -------------------------------------------------------------------------------- 1 | /* 2 | * ff_muxer.h 3 | * 4 | * Copyright (c) 2025 debugly 5 | * 6 | * This file is part of FSPlayer. 7 | * 8 | * FSPlayer is free software; you can redistribute it and/or 9 | * modify it under the terms of the GNU Lesser General Public 10 | * License as published by the Free Software Foundation; either 11 | * version 3 of the License, or (at your option) any later version. 12 | * 13 | * FSPlayer is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 | * Lesser General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU Lesser General Public 19 | * License along with FSPlayer; if not, write to the Free Software 20 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 21 | */ 22 | 23 | /* fast record video */ 24 | 25 | #ifndef ff_muxer_h 26 | #define ff_muxer_h 27 | 28 | #include 29 | struct FFPlayer; 30 | struct AVPacket; 31 | struct AVFormatContext; 32 | 33 | int ff_create_muxer(void **out_ffr, const char *file_name, const struct AVFormatContext *ifmt_ctx, int audio_stream, int video_stream); 34 | int ff_start_muxer(void *ffr); 35 | int ff_write_audio_muxer(void *ffr, struct AVPacket *packet); 36 | int ff_write_video_muxer(void *ffr, struct AVPacket *packet); 37 | void ff_stop_muxer(void *ffr); 38 | int ff_destroy_muxer(void **ffr); 39 | 40 | #endif /* ff_muxer_h */ 41 | -------------------------------------------------------------------------------- /ijkmedia/ijksdl/apple/ijksdl_gpu_opengl_shader_compiler.h: -------------------------------------------------------------------------------- 1 | /* 2 | * ijksdl_gpu_opengl_shader_compiler.h 3 | * 4 | * Copyright (c) 2024 debugly 5 | * 6 | * This file is part of FSPlayer. 7 | * 8 | * FSPlayer is free software; you can redistribute it and/or 9 | * modify it under the terms of the GNU Lesser General Public 10 | * License as published by the Free Software Foundation; either 11 | * version 3 of the License, or (at your option) any later version. 12 | * 13 | * FSPlayer is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 | * Lesser General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU Lesser General Public 19 | * License along with FSPlayer; if not, write to the Free Software 20 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 21 | */ 22 | 23 | #import 24 | 25 | NS_ASSUME_NONNULL_BEGIN 26 | 27 | @interface FSSDLOpenGLCompiler : NSObject 28 | 29 | @property (copy) NSString *vsh; 30 | @property (copy) NSString *fsh; 31 | 32 | - (instancetype)initWithvsh:(NSString *)vshName 33 | fsh:(NSString *)fshName; 34 | - (BOOL)compileIfNeed; 35 | - (uint32_t)program; 36 | - (void)active; 37 | - (int)getUniformLocation:(const char *)name; 38 | - (int)getAttribLocation:(const char *)name; 39 | 40 | @end 41 | 42 | NS_ASSUME_NONNULL_END 43 | -------------------------------------------------------------------------------- /examples/ios/FSPlayerDemo/ViewController/FSQRCodeScanViewController.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /ijkmedia/ijkplayer/ijkavutil/ijkutils.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016 Bilibili 3 | * Copyright (c) 2016 Raymond Zheng 4 | * Copyright (c) 2019 debugly 5 | * 6 | * This file is part of FSPlayer. 7 | * 8 | * FSPlayer is free software; you can redistribute it and/or 9 | * modify it under the terms of the GNU Lesser General Public 10 | * License as published by the Free Software Foundation; either 11 | * version 3 of the License, or (at your option) any later version. 12 | * 13 | * FSPlayer is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 | * Lesser General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU Lesser General Public 19 | * License along with FSPlayer; if not, write to the Free Software 20 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 21 | */ 22 | 23 | #ifndef FSAVUTIL_IJKUTILS_H 24 | #define FSAVUTIL_IJKUTILS_H 25 | 26 | #include "ijktree.h" 27 | 28 | #include 29 | #include 30 | #include 31 | 32 | typedef struct IjkAVIOInterruptCB { 33 | int (*callback)(void*); 34 | void *opaque; 35 | } IjkAVIOInterruptCB; 36 | 37 | typedef struct IjkCacheTreeInfo { 38 | struct IjkAVTreeNode *root; 39 | int64_t physical_init_pos; 40 | int64_t physical_size; 41 | int64_t file_size; 42 | } IjkCacheTreeInfo; 43 | 44 | #endif // FSAVUTIL_IJKUTILS_H 45 | -------------------------------------------------------------------------------- /ijkmedia/wrapper/apple/FSKVOController.h: -------------------------------------------------------------------------------- 1 | /* 2 | * FSKVOController.h 3 | * 4 | * Copyright (c) 2014 Bilibili 5 | * Copyright (c) 2014 Zhang Rui 6 | * Copyright (c) 2019 debugly 7 | * 8 | * This file is part of FSPlayer. 9 | * 10 | * FSPlayer is free software; you can redistribute it and/or 11 | * modify it under the terms of the GNU Lesser General Public 12 | * License as published by the Free Software Foundation; either 13 | * version 3 of the License, or (at your option) any later version. 14 | * 15 | * FSPlayer is distributed in the hope that it will be useful, 16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 18 | * Lesser General Public License for more details. 19 | * 20 | * You should have received a copy of the GNU Lesser General Public 21 | * License along with FSPlayer; if not, write to the Free Software 22 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 23 | */ 24 | 25 | #import 26 | 27 | @interface FSKVOController : NSObject 28 | 29 | - (id)initWithTarget:(NSObject *)target; 30 | 31 | - (void)safelyAddObserver:(NSObject *)observer 32 | forKeyPath:(NSString *)keyPath 33 | options:(NSKeyValueObservingOptions)options 34 | context:(void *)context; 35 | - (void)safelyRemoveObserver:(NSObject *)observer 36 | forKeyPath:(NSString *)keyPath; 37 | 38 | - (void)safelyRemoveAllObservers; 39 | 40 | @end 41 | -------------------------------------------------------------------------------- /ijkmedia/ijksdl/ijksdl_rectangle.h: -------------------------------------------------------------------------------- 1 | /***************************************************************************** 2 | * ijksdl_rectangle.h 3 | ***************************************************************************** 4 | * 5 | * Copyright (c) 2024 debugly 6 | * 7 | * This file is part of FSPlayer. 8 | * 9 | * FSPlayer is free software; you can redistribute it and/or 10 | * modify it under the terms of the GNU Lesser General Public 11 | * License as published by the Free Software Foundation; either 12 | * version 3 of the License, or (at your option) any later version. 13 | * 14 | * FSPlayer is distributed in the hope that it will be useful, 15 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 17 | * Lesser General Public License for more details. 18 | * 19 | * You should have received a copy of the GNU Lesser General Public 20 | * License along with FSPlayer; if not, write to the Free Software 21 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 22 | */ 23 | 24 | #ifndef ijksdl_rectangle_h 25 | #define ijksdl_rectangle_h 26 | 27 | #include 28 | 29 | // 定义矩形结构体 30 | typedef struct SDL_Rectangle{ 31 | int x, y; // 左上角坐标 32 | int w, h; // 33 | int stride; 34 | } SDL_Rectangle; 35 | 36 | int isZeroRectangle(SDL_Rectangle rect); 37 | // 计算两个矩形的并集 38 | SDL_Rectangle SDL_union_rectangle(SDL_Rectangle rect1, SDL_Rectangle rect2); 39 | 40 | #define SDL_Zero_Rectangle (SDL_Rectangle){0,0,0,0} 41 | 42 | #endif /* ijksdl_rectangle_h */ 43 | -------------------------------------------------------------------------------- /examples/ios/FSPlayerDemo/FSPlayerDemo-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | ${PRODUCT_NAME} 9 | CFBundleExecutable 10 | ${EXECUTABLE_NAME} 11 | CFBundleIcons 12 | 13 | CFBundleIcons~ipad 14 | 15 | CFBundleIdentifier 16 | $(PRODUCT_BUNDLE_IDENTIFIER) 17 | CFBundleInfoDictionaryVersion 18 | 6.0 19 | CFBundleName 20 | ${PRODUCT_NAME} 21 | CFBundlePackageType 22 | APPL 23 | CFBundleShortVersionString 24 | 0.4.2 25 | CFBundleSignature 26 | ???? 27 | CFBundleVersion 28 | 402 29 | LSRequiresIPhoneOS 30 | 31 | NSAppTransportSecurity 32 | 33 | NSAllowsArbitraryLoads 34 | 35 | 36 | UIFileSharingEnabled 37 | 38 | UILaunchStoryboardName 39 | LaunchScreen 40 | UIRequiredDeviceCapabilities 41 | 42 | armv7 43 | 44 | NSPhotoLibraryUsageDescription 45 | save record video 46 | NSPhotoLibraryAddUsageDescription 47 | save record video 48 | 49 | 50 | -------------------------------------------------------------------------------- /ijkmedia/ijksdl/apple/FSSDLThread.h: -------------------------------------------------------------------------------- 1 | /* 2 | * FSSDLThread.h 3 | * 4 | * Copyright (c) 2013-2014 Bilibili 5 | * Copyright (c) 2013-2014 Zhang Rui 6 | * Copyright (c) 2019 debugly 7 | * 8 | * This file is part of FSPlayer. 9 | * 10 | * FSPlayer is free software; you can redistribute it and/or 11 | * modify it under the terms of the GNU Lesser General Public 12 | * License as published by the Free Software Foundation; either 13 | * version 3 of the License, or (at your option) any later version. 14 | * 15 | * FSPlayer is distributed in the hope that it will be useful, 16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 18 | * Lesser General Public License for more details. 19 | * 20 | * You should have received a copy of the GNU Lesser General Public 21 | * License along with FSPlayer; if not, write to the Free Software 22 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 23 | */ 24 | 25 | #import 26 | 27 | NS_ASSUME_NONNULL_BEGIN 28 | 29 | @interface FSSDLThread : NSObject 30 | 31 | @property (nonatomic, copy) NSString *name; 32 | @property (nonatomic, strong, readonly) NSThread *thread; 33 | 34 | - (instancetype)initWithName:(NSString *)name; 35 | 36 | - (void)performSelector:(SEL)aSelector 37 | withTarget:(nullable id)target 38 | withObject:(nullable id)arg 39 | waitUntilDone:(BOOL)wait; 40 | 41 | - (void)start; 42 | - (void)stop; 43 | 44 | @end 45 | 46 | NS_ASSUME_NONNULL_END 47 | -------------------------------------------------------------------------------- /ijkmedia/ijkplayer/apple/ijkplayer_ios.h: -------------------------------------------------------------------------------- 1 | /* 2 | * ijkplayer_ios.h 3 | * 4 | * Copyright (c) 2013 Bilibili 5 | * Copyright (c) 2013 Zhang Rui 6 | * Copyright (c) 2019 debugly 7 | * 8 | * This file is part of FSPlayer. 9 | * 10 | * FSPlayer is free software; you can redistribute it and/or 11 | * modify it under the terms of the GNU Lesser General Public 12 | * License as published by the Free Software Foundation; either 13 | * version 3 of the License, or (at your option) any later version. 14 | * 15 | * FSPlayer is distributed in the hope that it will be useful, 16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 18 | * Lesser General Public License for more details. 19 | * 20 | * You should have received a copy of the GNU Lesser General Public 21 | * License along with FSPlayer; if not, write to the Free Software 22 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 23 | */ 24 | 25 | #include "ijkplayer/ijkplayer.h" 26 | #import "FSVideoRenderingProtocol.h" 27 | #import "FSAudioRenderingProtocol.h" 28 | 29 | // ref_count is 1 after open 30 | IjkMediaPlayer *ijkmp_ios_create(int (*msg_loop)(void*)); 31 | 32 | void ijkmp_ios_set_glview(IjkMediaPlayer *mp, UIView* glView); 33 | void ijkmp_ios_set_audio_controller(IjkMediaPlayer *mp, id audioRendering); 34 | void ijkmp_ios_set_automatically_setup_audio_session(IjkMediaPlayer *mp, bool automaticallySetupAudioSession); 35 | -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/CustomView/MRTextField.m: -------------------------------------------------------------------------------- 1 | // 2 | // MRTextField.m 3 | // FSPlayerMacDemo 4 | // 5 | // Created by Reach Matt on 2025/4/15. 6 | // Copyright © 2025 FSPlayer. All rights reserved. 7 | // 8 | 9 | #import "MRTextField.h" 10 | 11 | @implementation MRTextField 12 | 13 | - (BOOL)becomeFirstResponder 14 | { 15 | BOOL success = [super becomeFirstResponder]; 16 | if (success) { 17 | NSTextView * textView = (NSTextView *)[self currentEditor]; 18 | //光标放到末尾 19 | [textView moveToEndOfLine:nil]; 20 | } 21 | return success; 22 | } 23 | 24 | - (BOOL)performKeyEquivalent:(NSEvent *)event 25 | { 26 | // The command key is the ONLY modifier key being pressed. 27 | if (([event modifierFlags] & NSEventModifierFlagDeviceIndependentFlagsMask) == NSEventModifierFlagCommand) { 28 | SEL action = NULL; 29 | NSString *character = [event charactersIgnoringModifiers]; 30 | if ([character isEqualToString:@"x"]) { 31 | action = @selector(cut:); 32 | } else if ([character isEqualToString:@"c"]) { 33 | action = @selector(copy:); 34 | } else if ([character isEqualToString:@"v"]) { 35 | action = @selector(paste:); 36 | } else if ([character isEqualToString:@"a"]) { 37 | action = @selector(selectAll:); 38 | } 39 | id target = [[self window] firstResponder]; 40 | if ([target respondsToSelector:action]) { 41 | return [NSApp sendAction:action to:target from:self]; 42 | } 43 | } 44 | 45 | return [super performKeyEquivalent:event]; 46 | } 47 | @end 48 | -------------------------------------------------------------------------------- /ijkmedia/ijkplayer/config.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2015 Bilibili 3 | * Copyright (c) 2015 Zhang Rui 4 | * Copyright (c) 2019 debugly 5 | * 6 | * This file is part of FSPlayer. 7 | * 8 | * FSPlayer is free software; you can redistribute it and/or 9 | * modify it under the terms of the GNU Lesser General Public 10 | * License as published by the Free Software Foundation; either 11 | * version 3 of the License, or (at your option) any later version. 12 | * 13 | * FSPlayer is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 | * Lesser General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU Lesser General Public 19 | * License along with FSPlayer; if not, write to the Free Software 20 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 21 | */ 22 | 23 | #ifndef FFPLAY__CONFIG_H 24 | #define FFPLAY__CONFIG_H 25 | 26 | #include "libffmpeg/config.h" 27 | 28 | // FIXME: merge filter related code and enable it 29 | // remove these lines to enable avfilter 30 | #ifdef CONFIG_AUDIO_AVFILTER 31 | #undef CONFIG_AUDIO_AVFILTER 32 | #endif 33 | #define CONFIG_AUDIO_AVFILTER 0 34 | 35 | #ifdef CONFIG_VIDEO_AVFILTER 36 | #undef CONFIG_VIDEO_AVFILTER 37 | #endif 38 | #define CONFIG_VIDEO_AVFILTER 0 39 | 40 | 41 | #ifdef FFP_SUB 42 | #undef FFP_SUB 43 | #endif 44 | 45 | #ifndef FFMPEG_LOG_TAG 46 | #define FFMPEG_LOG_TAG "FSMPEG" 47 | #endif 48 | 49 | #endif//FFPLAY__CONFIG_H 50 | -------------------------------------------------------------------------------- /ijkmedia/wrapper/apple/FSPlayerKit.h: -------------------------------------------------------------------------------- 1 | /* 2 | * FSPlayerKit.h 3 | * 4 | * Copyright (c) 2019 debugly 5 | * 6 | * This file is part of FSPlayer. 7 | * 8 | * FSPlayer is free software; you can redistribute it and/or 9 | * modify it under the terms of the GNU Lesser General Public 10 | * License as published by the Free Software Foundation; either 11 | * version 3 of the License, or (at your option) any later version. 12 | * 13 | * FSPlayer is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 | * Lesser General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU Lesser General Public 19 | * License along with FSPlayer; if not, write to the Free Software 20 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 21 | */ 22 | 23 | #ifndef FSPlayerKit_h 24 | #define FSPlayerKit_h 25 | 26 | 27 | #if TARGET_OS_IOS || TARGET_OS_TV 28 | #import 29 | #else 30 | #import 31 | #endif 32 | 33 | #import 34 | #import 35 | #import 36 | #import 37 | #import 38 | #import 39 | #import 40 | #import 41 | #import 42 | #import 43 | #import 44 | #endif /* FSPlayerKit_h */ 45 | -------------------------------------------------------------------------------- /ijkmedia/ijkplayer/ff_packet_list.h: -------------------------------------------------------------------------------- 1 | /* 2 | * ff_packet_list.h 3 | * 4 | * Copyright (c) 2022 debugly 5 | * 6 | * This file is part of FSPlayer. 7 | * 8 | * FSPlayer is free software; you can redistribute it and/or 9 | * modify it under the terms of the GNU Lesser General Public 10 | * License as published by the Free Software Foundation; either 11 | * version 3 of the License, or (at your option) any later version. 12 | * 13 | * FSPlayer is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 | * Lesser General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU Lesser General Public 19 | * License along with FSPlayer; if not, write to the Free Software 20 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 21 | */ 22 | 23 | #ifndef ff_packet_list_h 24 | #define ff_packet_list_h 25 | 26 | #include "ff_ffplay_def.h" 27 | 28 | int packet_queue_put_private(PacketQueue *q, AVPacket *pkt); 29 | int packet_queue_put(PacketQueue *q, AVPacket *pkt); 30 | int packet_queue_put_nullpacket(PacketQueue *q, AVPacket *pkt, int stream_index); 31 | /* packet queue handling */ 32 | int packet_queue_init(PacketQueue *q); 33 | void packet_queue_flush(PacketQueue *q); 34 | void packet_queue_destroy(PacketQueue *q); 35 | void packet_queue_abort(PacketQueue *q); 36 | void packet_queue_start(PacketQueue *q); 37 | int packet_queue_get(PacketQueue *q, AVPacket *pkt, int block, int *serial); 38 | 39 | #endif /* ff_packet_list_h */ 40 | -------------------------------------------------------------------------------- /ijkmedia/ijksdl/ffmpeg/ijksdl_vout_overlay_ffmpeg.h: -------------------------------------------------------------------------------- 1 | /***************************************************************************** 2 | * ijksdl_vout_overlay_ffmpeg.h 3 | ***************************************************************************** 4 | * 5 | * Copyright (c) 2013 Bilibili 6 | * Copyright (c) 2013 Zhang Rui 7 | * Copyright (c) 2019 debugly 8 | * 9 | * This file is part of FSPlayer. 10 | * 11 | * ijkPlayer is free software; you can redistribute it and/or 12 | * modify it under the terms of the GNU Lesser General Public 13 | * License as published by the Free Software Foundation; either 14 | * version 3 of the License, or (at your option) any later version. 15 | * 16 | * FSPlayer is distributed in the hope that it will be useful, 17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 19 | * Lesser General Public License for more details. 20 | * 21 | * You should have received a copy of the GNU Lesser General Public 22 | * License along with ijkPlayer; if not, write to the Free Software 23 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 24 | */ 25 | 26 | #ifndef IJKSDL__FFMPEG__IJKSDL_VOUT_OVERLAY_FFMPEG_H 27 | #define IJKSDL__FFMPEG__IJKSDL_VOUT_OVERLAY_FFMPEG_H 28 | 29 | #include "../ijksdl_stdinc.h" 30 | #include "../ijksdl_vout.h" 31 | #include "ijksdl_inc_ffmpeg.h" 32 | 33 | // TODO: 9 alignment to speed up memcpy when display 34 | SDL_VoutOverlay *SDL_VoutFFmpeg_CreateOverlay(int width, int height, int frame_format, SDL_Vout *vout); 35 | 36 | #endif 37 | -------------------------------------------------------------------------------- /ijkmedia/ijksdl/ijksdl.h: -------------------------------------------------------------------------------- 1 | /***************************************************************************** 2 | * ijksdl.h 3 | ***************************************************************************** 4 | * 5 | * Copyright (c) 2013 Bilibili 6 | * Copyright (c) 2013 Zhang Rui 7 | * Copyright (c) 2019 debugly 8 | * 9 | * This file is part of FSPlayer. 10 | * 11 | * FSPlayer is free software; you can redistribute it and/or 12 | * modify it under the terms of the GNU Lesser General Public 13 | * License as published by the Free Software Foundation; either 14 | * version 3 of the License, or (at your option) any later version. 15 | * 16 | * FSPlayer is distributed in the hope that it will be useful, 17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 19 | * Lesser General Public License for more details. 20 | * 21 | * You should have received a copy of the GNU Lesser General Public 22 | * License along with FSPlayer; if not, write to the Free Software 23 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 24 | */ 25 | 26 | #ifndef FSSDL__IJKSDL_H 27 | #define FSSDL__IJKSDL_H 28 | 29 | #include "ijksdl_audio.h" 30 | #include "ijksdl_aout.h" 31 | #include "ijksdl_class.h" 32 | #include "ijksdl_error.h" 33 | #include "ijksdl_log.h" 34 | #include "ijksdl_misc.h" 35 | #include "ijksdl_mutex.h" 36 | #include "ijksdl_thread.h" 37 | #include "ijksdl_timer.h" 38 | #include "ijksdl_video.h" 39 | #include "ijksdl_vout.h" 40 | 41 | #include "ffmpeg/ijksdl_vout_overlay_ffmpeg.h" 42 | 43 | #endif 44 | -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "icon_16x16.png", 5 | "idiom" : "mac", 6 | "scale" : "1x", 7 | "size" : "16x16" 8 | }, 9 | { 10 | "filename" : "icon_16x16@2x.png", 11 | "idiom" : "mac", 12 | "scale" : "2x", 13 | "size" : "16x16" 14 | }, 15 | { 16 | "filename" : "icon_32x32.png", 17 | "idiom" : "mac", 18 | "scale" : "1x", 19 | "size" : "32x32" 20 | }, 21 | { 22 | "filename" : "icon_32x32@2x.png", 23 | "idiom" : "mac", 24 | "scale" : "2x", 25 | "size" : "32x32" 26 | }, 27 | { 28 | "filename" : "icon_128x128.png", 29 | "idiom" : "mac", 30 | "scale" : "1x", 31 | "size" : "128x128" 32 | }, 33 | { 34 | "filename" : "icon_128x128@2x.png", 35 | "idiom" : "mac", 36 | "scale" : "2x", 37 | "size" : "128x128" 38 | }, 39 | { 40 | "filename" : "icon_256x256.png", 41 | "idiom" : "mac", 42 | "scale" : "1x", 43 | "size" : "256x256" 44 | }, 45 | { 46 | "filename" : "icon_256x256@2x.png", 47 | "idiom" : "mac", 48 | "scale" : "2x", 49 | "size" : "256x256" 50 | }, 51 | { 52 | "filename" : "icon_512x512.png", 53 | "idiom" : "mac", 54 | "scale" : "1x", 55 | "size" : "512x512" 56 | }, 57 | { 58 | "filename" : "icon_512x512@2x.png", 59 | "idiom" : "mac", 60 | "scale" : "2x", 61 | "size" : "512x512" 62 | } 63 | ], 64 | "info" : { 65 | "author" : "xcode", 66 | "version" : 1 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /ijkmedia/ijksdl/apple/ijksdl_vout_overlay_ffmpeg_hw.h: -------------------------------------------------------------------------------- 1 | /***************************************************************************** 2 | * ijksdl_vout_overlay_videotoolbox.h 3 | ***************************************************************************** 4 | * 5 | * Copyright (c) 2014 ZhouQuan 6 | * Copyright (c) 2019 debugly 7 | * 8 | * This file is part of FSPlayer. 9 | * 10 | * FSPlayer is free software; you can redistribute it and/or 11 | * modify it under the terms of the GNU Lesser General Public 12 | * License as published by the Free Software Foundation; either 13 | * version 3 of the License, or (at your option) any later version. 14 | * 15 | * FSPlayer is distributed in the hope that it will be useful, 16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 18 | * Lesser General Public License for more details. 19 | * 20 | * You should have received a copy of the GNU Lesser General Public 21 | * License along with FSPlayer; if not, write to the Free Software 22 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 23 | */ 24 | 25 | #ifndef __IJKMediaPlayer__ijksdl_vout_overlay_ffmpeg_hw__ 26 | #define __IJKMediaPlayer__ijksdl_vout_overlay_ffmpeg_hw__ 27 | 28 | #import 29 | #include "ijksdl_stdinc.h" 30 | #include "ijksdl_vout.h" 31 | #include "ijksdl_inc_ffmpeg.h" 32 | 33 | SDL_VoutOverlay *SDL_VoutFFmpeg_HW_CreateOverlay(int width, int height, SDL_Vout *vout); 34 | CVPixelBufferRef SDL_VoutFFmpeg_HW_GetCVPixelBufferRef(SDL_VoutOverlay *overlay); 35 | 36 | #endif 37 | -------------------------------------------------------------------------------- /ijkmedia/ijksdl/ijksdl_stdinc.h: -------------------------------------------------------------------------------- 1 | /***************************************************************************** 2 | * ijksdl_stdinc.h 3 | ***************************************************************************** 4 | * 5 | * Copyright (c) 2013 Bilibili 6 | * Copyright (c) 2013 Zhang Rui 7 | * Copyright (c) 2019 debugly 8 | * 9 | * This file is part of FSPlayer. 10 | * 11 | * FSPlayer is free software; you can redistribute it and/or 12 | * modify it under the terms of the GNU Lesser General Public 13 | * License as published by the Free Software Foundation; either 14 | * version 3 of the License, or (at your option) any later version. 15 | * 16 | * FSPlayer is distributed in the hope that it will be useful, 17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 19 | * Lesser General Public License for more details. 20 | * 21 | * You should have received a copy of the GNU Lesser General Public 22 | * License along with FSPlayer; if not, write to the Free Software 23 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 24 | */ 25 | 26 | #ifndef FSSDL__IJKSDL_STDINC_H 27 | #define FSSDL__IJKSDL_STDINC_H 28 | 29 | #include 30 | #include 31 | #include 32 | 33 | typedef int8_t Sint8; 34 | typedef uint8_t Uint8; 35 | typedef int16_t Sint16; 36 | typedef uint16_t Uint16; 37 | typedef int32_t Sint32; 38 | typedef uint32_t Uint32; 39 | typedef int64_t Sint64; 40 | typedef uint64_t Uint64; 41 | 42 | char *SDL_getenv(const char *name); 43 | 44 | #endif 45 | -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/MRUtil/MRGlobalNotification.h: -------------------------------------------------------------------------------- 1 | // 2 | // MRGlobalNotification.h 3 | // FSPlayerDemo 4 | // 5 | // Created by debugly on 2019/3/14. 6 | // Copyright © 2019 debugly. All rights reserved. 7 | // 8 | // 全局通知定义 9 | 10 | #import 11 | 12 | #ifndef __MRECS__ 13 | #define __MRECS__ 14 | 15 | #define EXPORT_CONST_STRING(key) FOUNDATION_EXPORT NSString *const key 16 | #define STRINGME_(x) #x 17 | #define STRINGME(x) STRINGME_(x) 18 | #define STRINGME2OC(x) @STRINGME(x) 19 | #define DEFINE_CONST_STRING(key) NSString *const key = STRINGME2OC(key) 20 | 21 | #endif 22 | 23 | 24 | ///播放资源管理器打开的本地视频通知,参数为 obj = [ { bookmark,url },... ] 25 | EXPORT_CONST_STRING(kPlayExplorerMovieNotificationName_G); 26 | ///播放在线视频,参数为 links = [ url1,url2,... ] 27 | EXPORT_CONST_STRING(kPlayNetMovieNotificationName_G); 28 | #define POST_NOTIFICATION(_name_,_obj_,_info_) \ 29 | [[NSNotificationCenter defaultCenter] \ 30 | postNotificationName: _name_ \ 31 | object: _obj_ \ 32 | userInfo: _info_] 33 | 34 | #define OBSERVER_NOTIFICATION(_observer_,_sel_,_name_,_obj_) \ 35 | [[NSNotificationCenter defaultCenter] \ 36 | addObserver:_observer_ \ 37 | selector:@selector(_sel_) \ 38 | name:_name_ \ 39 | object:_obj_ ] 40 | 41 | #define STOP_OBSERING_NOTIFICATION(_observer_,_name_,_obj_) \ 42 | [[NSNotificationCenter defaultCenter] \ 43 | removeObserver: _observer_ \ 44 | name: _name_ \ 45 | object: _obj_] 46 | 47 | @interface MRGlobalNotification : NSObject 48 | 49 | @end 50 | -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/ViewController/MRPlaylistViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // MRPlaylistViewController.m 3 | // FSPlayerMacDemo 4 | // 5 | // Created by debugly on 2024/1/24. 6 | // Copyright © 2024 FSPlayer Mac. All rights reserved. 7 | // 8 | 9 | #import "MRPlaylistViewController.h" 10 | #import "MRPlaylistRowView.h" 11 | 12 | @interface MRPlaylistViewController () 13 | 14 | @property (nonatomic, strong) NSMutableArray *hudDataArray; 15 | 16 | @end 17 | 18 | @implementation MRPlaylistViewController 19 | 20 | - (void)viewDidLoad { 21 | [super viewDidLoad]; 22 | // Do view setup here. 23 | } 24 | 25 | - (NSMutableArray *)hudDataArray 26 | { 27 | if (!_hudDataArray) { 28 | _hudDataArray = [NSMutableArray array]; 29 | } 30 | return _hudDataArray; 31 | } 32 | 33 | - (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView 34 | { 35 | return [self.hudDataArray count]; 36 | } 37 | 38 | - (nullable NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(nullable NSTableColumn *)tableColumn row:(NSInteger)row 39 | { 40 | return nil; 41 | } 42 | 43 | - (NSTableRowView *)tableView:(NSTableView *)tableView rowViewForRow:(NSInteger)row 44 | { 45 | MRPlaylistRowView *rowView = [tableView makeViewWithIdentifier:@"Row" owner:self]; 46 | if (rowView == nil) { 47 | rowView = [[MRPlaylistRowView alloc]init]; 48 | rowView.identifier = @"Row"; 49 | } 50 | if (row < [self.hudDataArray count]) { 51 | MRPlaylistRowData *data = [self.hudDataArray objectAtIndex:row]; 52 | [rowView updateData:data]; 53 | } 54 | 55 | return rowView; 56 | } 57 | @end 58 | -------------------------------------------------------------------------------- /ijkmedia/ijkplayer/ff_subtitle_ex.h: -------------------------------------------------------------------------------- 1 | /* 2 | * ff_subtitle_ex.h 3 | * 4 | * Copyright (c) 2022 debugly 5 | * 6 | * This file is part of FSPlayer. 7 | * 8 | * FSPlayer is free software; you can redistribute it and/or 9 | * modify it under the terms of the GNU Lesser General Public 10 | * License as published by the Free Software Foundation; either 11 | * version 3 of the License, or (at your option) any later version. 12 | * 13 | * FSPlayer is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 | * Lesser General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU Lesser General Public 19 | * License along with FSPlayer; if not, write to the Free Software 20 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 21 | */ 22 | 23 | 24 | #ifndef ff_subtitle_ex_h 25 | #define ff_subtitle_ex_h 26 | 27 | #include 28 | 29 | typedef struct FFExSubtitle FFExSubtitle; 30 | typedef struct PacketQueue PacketQueue; 31 | typedef struct AVStream AVStream; 32 | typedef struct AVDictionary AVDictionary; 33 | 34 | int exSub_open_input(FFExSubtitle **subp, PacketQueue * pktq, const char *file_name, float startTime, AVDictionary *opts); 35 | void exSub_start_read(FFExSubtitle *sub); 36 | void exSub_close_input(FFExSubtitle **sub); 37 | AVStream * exSub_get_stream(FFExSubtitle *sub); 38 | int exSub_get_stream_id(FFExSubtitle *sub); 39 | //when return zero means succ; 40 | int exSub_seek_to(FFExSubtitle *sub, float sec); 41 | 42 | #endif /* ff_subtitle_ex_h */ 43 | -------------------------------------------------------------------------------- /examples/tvos/FSPlayerTVDemo/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /ijkmedia/ijkplayer/ijkavutil/ijkstl.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016 Bilibili 3 | * Copyright (c) 2016 Raymond Zheng 4 | * Copyright (c) 2019 debugly 5 | * 6 | * This file is part of FSPlayer. 7 | * 8 | * FSPlayer is free software; you can redistribute it and/or 9 | * modify it under the terms of the GNU Lesser General Public 10 | * License as published by the Free Software Foundation; either 11 | * version 3 of the License, or (at your option) any later version. 12 | * 13 | * FSPlayer is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 | * Lesser General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU Lesser General Public 19 | * License along with FSPlayer; if not, write to the Free Software 20 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 21 | */ 22 | #ifndef FSAVUTIL_IJKSTL_H 23 | #define FSAVUTIL_IJKSTL_H 24 | 25 | #include 26 | 27 | void* ijk_map_create(void); 28 | void ijk_map_put(void *data, int64_t key, void *value); 29 | void* ijk_map_get(void *data, int64_t key); 30 | int ijk_map_remove(void *data, int64_t key); 31 | int ijk_map_size(void *data); 32 | int ijk_map_max_size(void *data); 33 | void* ijk_map_index_get(void *data, int index); 34 | void ijk_map_traversal_handle(void *data, void *parm, int (*enu)(void *parm, int64_t key, void *elem)); 35 | int64_t ijk_map_get_min_key(void *data); 36 | void ijk_map_clear(void *data); 37 | void ijk_map_destroy(void *data); 38 | 39 | #endif /* FSAVUTIL_IJKSTL_H */ 40 | -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/MRUtil/NSString+Ex.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSString+Ex.m 3 | // FSPlayerDemo 4 | // 5 | // Created by debugly on 2023/6/15. 6 | // Copyright © 2023 debugly. All rights reserved. 7 | // 8 | 9 | #import "NSString+Ex.h" 10 | #import 11 | 12 | @implementation NSString (Ex) 13 | 14 | - (NSString *)md5Hash 15 | { 16 | const char *cStr = [self UTF8String]; 17 | unsigned char result[16]; 18 | CC_MD5( cStr, (unsigned int)strlen(cStr), result ); // md5 call 19 | return [NSString stringWithFormat: 20 | @"%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x%02x", 21 | result[0], result[1], result[2], result[3], 22 | result[4], result[5], result[6], result[7], 23 | result[8], result[9], result[10], result[11], 24 | result[12], result[13], result[14], result[15] 25 | ]; 26 | } 27 | 28 | - (NSString *)percentEncoding 29 | { 30 | NSString *encodedString = nil; 31 | NSString *needPercentCharacters = @"?!@#$^&%*+,:;='\"`<>()[]{}/\\| "; 32 | NSCharacterSet *notAllowedCharacters = [NSCharacterSet characterSetWithCharactersInString:needPercentCharacters]; 33 | NSCharacterSet *allowedCharacters = [notAllowedCharacters invertedSet]; 34 | 35 | encodedString = [self stringByAddingPercentEncodingWithAllowedCharacters:allowedCharacters]; 36 | if(!encodedString) 37 | encodedString = @""; 38 | return encodedString; 39 | } 40 | 41 | - (NSString *)percentDecoding 42 | { 43 | NSString *encodedString = [self stringByRemovingPercentEncoding]; 44 | if(!encodedString) 45 | encodedString = @""; 46 | return encodedString; 47 | } 48 | 49 | @end 50 | -------------------------------------------------------------------------------- /ijkmedia/ijksdl/apple/ijksdl_vout_overlay_ffmpeg.h: -------------------------------------------------------------------------------- 1 | /***************************************************************************** 2 | * ijksdl_vout_overlay_ffmpeg.h 3 | ***************************************************************************** 4 | * 5 | * Copyright (c) 2013 Bilibili 6 | * Copyright (c) 2013 Zhang Rui 7 | * Copyright (c) 2019 debugly 8 | * 9 | * This file is part of FSPlayer. 10 | * 11 | * FSPlayer is free software; you can redistribute it and/or 12 | * modify it under the terms of the GNU Lesser General Public 13 | * License as published by the Free Software Foundation; either 14 | * version 3 of the License, or (at your option) any later version. 15 | * 16 | * FSPlayer is distributed in the hope that it will be useful, 17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 19 | * Lesser General Public License for more details. 20 | * 21 | * You should have received a copy of the GNU Lesser General Public 22 | * License along with FSPlayer; if not, write to the Free Software 23 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 24 | */ 25 | 26 | #ifndef FSSDL__FFMPEG__IJKSDL_VOUT_OVERLAY_FFMPEG_H 27 | #define FSSDL__FFMPEG__IJKSDL_VOUT_OVERLAY_FFMPEG_H 28 | 29 | #include "ijksdl/ijksdl_stdinc.h" 30 | #include "ijksdl/ijksdl_vout.h" 31 | #include "ijksdl_inc_ffmpeg.h" 32 | 33 | #import 34 | #import 35 | 36 | SDL_VoutOverlay *SDL_VoutFFmpeg_CreateOverlay(int width, int height, int src_format, SDL_Vout *vout); 37 | CVPixelBufferRef SDL_VoutFFmpeg_GetCVPixelBufferRef(SDL_VoutOverlay *overlay); 38 | 39 | #endif 40 | -------------------------------------------------------------------------------- /examples/ios/FSPlayerDemo/ViewController/FSMediaControl.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2013-2015 Bilibili 3 | * Copyright (C) 2013-2015 Zhang Rui 4 | * Copyright (c) 2019 debugly 5 | * 6 | * Licensed under the Apache License, Version 2.0 (the "License"); 7 | * you may not use this file except in compliance with the License. 8 | * You may obtain a copy of the License at 9 | * 10 | * http://www.apache.org/licenses/LICENSE-2.0 11 | * 12 | * Unless required by applicable law or agreed to in writing, software 13 | * distributed under the License is distributed on an "AS IS" BASIS, 14 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | * See the License for the specific language governing permissions and 16 | * limitations under the License. 17 | */ 18 | 19 | #import 20 | 21 | @protocol FSMediaPlayback; 22 | 23 | @interface FSMediaControl : UIControl 24 | 25 | - (void)showNoFade; 26 | - (void)showAndFade; 27 | - (void)hide; 28 | - (void)refreshMediaControl; 29 | 30 | - (void)beginDragMediaSlider; 31 | - (void)endDragMediaSlider; 32 | - (void)continueDragMediaSlider; 33 | 34 | @property(nonatomic,weak) id delegatePlayer; 35 | 36 | @property(nonatomic,strong) IBOutlet UIView *overlayPanel; 37 | @property(nonatomic,strong) IBOutlet UIView *topPanel; 38 | @property(nonatomic,strong) IBOutlet UIView *bottomPanel; 39 | 40 | @property(nonatomic,strong) IBOutlet UIButton *playButton; 41 | @property(nonatomic,strong) IBOutlet UIButton *pauseButton; 42 | 43 | @property(nonatomic,strong) IBOutlet UILabel *currentTimeLabel; 44 | @property(nonatomic,strong) IBOutlet UILabel *totalDurationLabel; 45 | @property(nonatomic,strong) IBOutlet UISlider *mediaProgressSlider; 46 | 47 | 48 | @end 49 | -------------------------------------------------------------------------------- /ijkmedia/ijksdl/apple/ijksdl_thread_ios.m: -------------------------------------------------------------------------------- 1 | /* 2 | * ijksdl_thread_ios.m 3 | * 4 | * Copyright (c) 2013 Bilibili 5 | * Copyright (c) 2013 Zhang Rui 6 | * Copyright (c) 2019 debugly 7 | * 8 | * This file is part of FSPlayer. 9 | * 10 | * FSPlayer is free software; you can redistribute it and/or 11 | * modify it under the terms of the GNU Lesser General Public 12 | * License as published by the Free Software Foundation; either 13 | * version 3 of the License, or (at your option) any later version. 14 | * 15 | * FSPlayer is distributed in the hope that it will be useful, 16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 18 | * Lesser General Public License for more details. 19 | * 20 | * You should have received a copy of the GNU Lesser General Public 21 | * License along with FSPlayer; if not, write to the Free Software 22 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 23 | */ 24 | 25 | #import "ijksdl_thread_ios.h" 26 | #include "ijksdl/ijksdl_thread.h" 27 | 28 | static void *SDL_RunThread(void *data) 29 | { 30 | @autoreleasepool { 31 | SDL_Thread *thread = data; 32 | pthread_setname_np(thread->name); 33 | thread->retval = thread->func(thread->data); 34 | return NULL; 35 | } 36 | } 37 | 38 | SDL_Thread *SDL_CreateThreadEx(SDL_Thread *thread, int (*fn)(void *), void *data, const char *name) 39 | { 40 | thread->func = fn; 41 | thread->data = data; 42 | strlcpy(thread->name, name, sizeof(thread->name) - 1); 43 | int retval = pthread_create(&thread->id, NULL, SDL_RunThread, thread); 44 | if (retval) 45 | return NULL; 46 | 47 | return thread; 48 | } 49 | -------------------------------------------------------------------------------- /ijkmedia/ijkplayer/ijkplayer_internal.h: -------------------------------------------------------------------------------- 1 | /* 2 | * ijkplayer_internal.h 3 | * 4 | * Copyright (c) 2013 Bilibili 5 | * Copyright (c) 2013 Zhang Rui 6 | * Copyright (c) 2019 debugly 7 | * 8 | * This file is part of FSPlayer. 9 | * 10 | * FSPlayer is free software; you can redistribute it and/or 11 | * modify it under the terms of the GNU Lesser General Public 12 | * License as published by the Free Software Foundation; either 13 | * version 3 of the License, or (at your option) any later version. 14 | * 15 | * FSPlayer is distributed in the hope that it will be useful, 16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 18 | * Lesser General Public License for more details. 19 | * 20 | * You should have received a copy of the GNU Lesser General Public 21 | * License along with FSPlayer; if not, write to the Free Software 22 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 23 | */ 24 | 25 | #ifndef FSPLAYER_ANDROID__IJKPLAYER_INTERNAL_H 26 | #define FSPLAYER_ANDROID__IJKPLAYER_INTERNAL_H 27 | 28 | #include 29 | #include "ijksdl/ijksdl.h" 30 | #include "ff_fferror.h" 31 | #include "ff_ffplay.h" 32 | #include "ijkplayer.h" 33 | 34 | struct IjkMediaPlayer { 35 | volatile int ref_count; 36 | pthread_mutex_t mutex; 37 | FFPlayer *ffplayer; 38 | 39 | int (*msg_loop)(void*); 40 | SDL_Thread *msg_thread; 41 | SDL_Thread _msg_thread; 42 | 43 | int mp_state; 44 | char *data_source; 45 | void *weak_thiz; 46 | 47 | int restart; 48 | int restart_from_beginning; 49 | int seek_req; 50 | long seek_msec; 51 | int seek_req2; 52 | long seek_msec2; 53 | }; 54 | 55 | #endif 56 | -------------------------------------------------------------------------------- /examples/xcframewrok/template.spec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "FSPlayer", 3 | "version": "__VERSION__", 4 | "summary": "FSPlayer is a free (as in freedom) media player for iOS and macOS and tvOS apps.", 5 | "description": "FSPlayer is a free (as in freedom) media player for iOS and macOS and tvOS apps.\n\nIt supports a wide variety of media file formats, audio and video codecs, and subtitle types.", 6 | "homepage": "https://github.com/debugly/fsplayer", 7 | "documentation_url": "https://github.com/debugly/fsplayer", 8 | "social_media_url": "https://github.com/debugly/fsplayer", 9 | "license": { 10 | "type": "LGPL", 11 | "file": "FSPlayer/LICENSE" 12 | }, 13 | "authors": { 14 | "MattReach": "qianlongxu@gmail.com" 15 | }, 16 | "platforms": { 17 | "ios": "12.0", 18 | "osx": "10.11", 19 | "tvos": "12.0" 20 | }, 21 | "source": { 22 | "http": "https://github.com/debugly/fsplayer/releases/download/__VERSION__/FSPlayer.zip" 23 | }, 24 | "preserve_paths": [ 25 | "FSPlayer/README.md", 26 | "FSPlayer/CHANGELOG.md", 27 | "FSPlayer/LICENSE" 28 | ], 29 | "vendored_frameworks": "FSPlayer.xcframework", 30 | "libraries": [ 31 | "z", 32 | "iconv", 33 | "xml2", 34 | "bz2", 35 | "c++", 36 | "lzma" 37 | ], 38 | "frameworks": [ 39 | "AVFoundation", 40 | "AudioToolbox", 41 | "CoreMedia", 42 | "CoreVideo", 43 | "VideoToolbox", 44 | "Metal" 45 | ], 46 | "osx": { 47 | "frameworks": [ 48 | "Cocoa", 49 | "AudioUnit", 50 | "OpenGL", 51 | "GLKit", 52 | "CoreImage" 53 | ] 54 | }, 55 | "tvos": { 56 | "frameworks": [ 57 | "UIKit", 58 | "OpenGLES" 59 | ] 60 | }, 61 | "ios": { 62 | "frameworks": [ 63 | "UIKit", 64 | "OpenGLES" 65 | ] 66 | } 67 | } -------------------------------------------------------------------------------- /ijkmedia/ijkplayer/ff_ffpipenode.h: -------------------------------------------------------------------------------- 1 | /* 2 | * ff_ffpipenode.h 3 | * 4 | * Copyright (c) 2014 Bilibili 5 | * Copyright (c) 2014 Zhang Rui 6 | * Copyright (c) 2019 debugly 7 | * 8 | * This file is part of FSPlayer. 9 | * 10 | * FSPlayer is free software; you can redistribute it and/or 11 | * modify it under the terms of the GNU Lesser General Public 12 | * License as published by the Free Software Foundation; either 13 | * version 3 of the License, or (at your option) any later version. 14 | * 15 | * FSPlayer is distributed in the hope that it will be useful, 16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 18 | * Lesser General Public License for more details. 19 | * 20 | * You should have received a copy of the GNU Lesser General Public 21 | * License along with FSPlayer; if not, write to the Free Software 22 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 23 | */ 24 | 25 | #ifndef FFPLAY__FF_FFPIPENODE_H 26 | #define FFPLAY__FF_FFPIPENODE_H 27 | 28 | #include "ijksdl/ijksdl_mutex.h" 29 | 30 | typedef struct FS_Pipenode_Opaque FS_Pipenode_Opaque; 31 | typedef struct FS_Pipenode FS_Pipenode; 32 | struct FS_Pipenode { 33 | SDL_mutex *mutex; 34 | void *opaque; 35 | int vdec_type; 36 | void (*func_destroy) (FS_Pipenode *node); 37 | int (*func_run_sync)(FS_Pipenode *node); 38 | int (*func_flush) (FS_Pipenode *node); // optional 39 | }; 40 | 41 | FS_Pipenode *ffpipenode_alloc(size_t opaque_size); 42 | void ffpipenode_free(FS_Pipenode *node); 43 | void ffpipenode_free_p(FS_Pipenode **node); 44 | 45 | int ffpipenode_run_sync(FS_Pipenode *node); 46 | int ffpipenode_flush(FS_Pipenode *node); 47 | 48 | #endif 49 | -------------------------------------------------------------------------------- /ijkmedia/ijksdl/ijksdl_extra_log.h: -------------------------------------------------------------------------------- 1 | /***************************************************************************** 2 | * ijksdl_extra_log.h 3 | ***************************************************************************** 4 | * 5 | * Copyright (c) 2017 Bilibili 6 | * Copyright (c) 2017 Raymond Zheng 7 | * Copyright (c) 2019 debugly 8 | * 9 | * This file is part of FSPlayer. 10 | * 11 | * FSPlayer is free software; you can redistribute it and/or 12 | * modify it under the terms of the GNU Lesser General Public 13 | * License as published by the Free Software Foundation; either 14 | * version 3 of the License, or (at your option) any later version. 15 | * 16 | * FSPlayer is distributed in the hope that it will be useful, 17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 19 | * Lesser General Public License for more details. 20 | * 21 | * You should have received a copy of the GNU Lesser General Public 22 | * License along with FSPlayer; if not, write to the Free Software 23 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 24 | */ 25 | 26 | #ifndef FSSDL__IJKSDL_EXTRA_LOG_H 27 | #define FSSDL__IJKSDL_EXTRA_LOG_H 28 | 29 | #ifdef __ANDROID__ 30 | #include 31 | 32 | void ffp_log_extra_print(int level, const char *tag, const char *fmt, ...); 33 | void ffp_log_extra_vprint(int level, const char *tag, const char *fmt, va_list ap); 34 | 35 | #elif defined __APPLE__ 36 | 37 | void ffp_apple_log_extra_print(int level, const char *tag, const char *fmt, ...); 38 | void ffp_apple_log_extra_vprint(int level, const char *tag, const char *fmt, va_list ap); 39 | 40 | #endif 41 | 42 | #endif // FSSDL__IJKSDL_EXTRA_LOG_H 43 | -------------------------------------------------------------------------------- /ijkmedia/ijksdl/ijksdl_audio.c: -------------------------------------------------------------------------------- 1 | /***************************************************************************** 2 | * ijksdl_audio.c 3 | ***************************************************************************** 4 | * 5 | * Copyright (c) 2013 Bilibili 6 | * Copyright (c) 2013 Zhang Rui 7 | * Copyright (c) 2019 debugly 8 | * 9 | * This file is part of FSPlayer. 10 | * 11 | * FSPlayer is free software; you can redistribute it and/or 12 | * modify it under the terms of the GNU Lesser General Public 13 | * License as published by the Free Software Foundation; either 14 | * version 3 of the License, or (at your option) any later version. 15 | * 16 | * FSPlayer is distributed in the hope that it will be useful, 17 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 18 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 19 | * Lesser General Public License for more details. 20 | * 21 | * You should have received a copy of the GNU Lesser General Public 22 | * License along with FSPlayer; if not, write to the Free Software 23 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 24 | */ 25 | 26 | #include "ijksdl_audio.h" 27 | 28 | void SDL_CalculateAudioSpec(SDL_AudioSpec * spec) 29 | { 30 | switch (spec->format) { 31 | case AUDIO_U8: 32 | spec->silence = 0x80; 33 | break; 34 | default: 35 | spec->silence = 0x00; 36 | break; 37 | } 38 | spec->size = SDL_AUDIO_BITSIZE(spec->format) / 8; 39 | spec->size *= spec->channels; 40 | spec->size *= spec->samples; 41 | } 42 | 43 | void SDL_MixAudio(Uint8* dst, 44 | const Uint8* src, 45 | Uint32 len, 46 | int volume) 47 | { 48 | // do nothing; 49 | } 50 | -------------------------------------------------------------------------------- /examples/ios/build-framework.sh: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env bash 2 | # 3 | # Copyright (C) 2024 Matt Reach 4 | 5 | # Licensed under the Apache License, Version 2.0 (the "License"); 6 | # you may not use this file except in compliance with the License. 7 | # You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | 17 | THIS_DIR=$(DIRNAME=$(dirname "$0"); cd "$DIRNAME"; pwd) 18 | cd "$THIS_DIR" 19 | 20 | set -e 21 | 22 | if [[ ! -d FSPlayer.xcodeproj ]]; then 23 | ./generate-fsplayer.sh 24 | fi 25 | 26 | # 1 27 | PROJECT_NAME="FSPlayer.xcodeproj" 28 | TARGET_NAME="FSPlayer-iOS" 29 | 30 | WORK_DIR="Release-iphoneos" 31 | SIM_WORK_DIR="Release-iphonesimulator" 32 | 33 | # 2 34 | if [ -d ${WORK_DIR} ]; then 35 | rm -rf ${WORK_DIR} 36 | fi 37 | 38 | if [ -d ${SIM_WORK_DIR} ]; then 39 | rm -rf ${SIM_WORK_DIR} 40 | fi 41 | 42 | # 3 43 | # project方式 44 | # xcodebuild -showsdks 45 | # Build the framework for device and simulator with all architectures. 46 | export IPHONEOS_DEPLOYMENT_TARGET=11.0 47 | 48 | xcodebuild -project ${PROJECT_NAME} -target ${TARGET_NAME} \ 49 | -configuration Release \ 50 | -sdk iphonesimulator -arch x86_64 -arch arm64 \ 51 | BUILD_DIR=. \ 52 | clean build 53 | 54 | xcodebuild -project ${PROJECT_NAME} -target ${TARGET_NAME} \ 55 | -configuration Release \ 56 | -sdk iphoneos -arch arm64 \ 57 | BUILD_DIR=. \ 58 | clean build 59 | 60 | echo "ios framework dir:$WORK_DIR" 61 | echo "ios simulator framework dir: $SIM_WORK_DIR" -------------------------------------------------------------------------------- /examples/macos/FSPlayerMacDemo/CustomView/MRProgressIndicator.h: -------------------------------------------------------------------------------- 1 | // 2 | // MRProgressIndicator.h 3 | // FSPlayerMacDemo 4 | // 5 | // Created by debugly on 2022/11/07. 6 | // Copyright © 2022 FSPlayer Mac 版. All rights reserved. 7 | 8 | #import 9 | 10 | NS_ASSUME_NONNULL_BEGIN 11 | 12 | static const CGFloat kProgressIndicatorColorHeight = 6.0; 13 | 14 | @interface MRProgressIndicator : NSView 15 | 16 | //左侧已经播放开始颜色 17 | @property (nonatomic, strong) IBInspectable NSColor *playedStartColor; 18 | //左侧已经播放结束颜色 19 | @property (nonatomic, strong) IBInspectable NSColor *playedEndColor; 20 | //右侧预加载颜色 21 | @property (nonatomic, strong) IBInspectable NSColor *preloadColor; 22 | //右侧未加载颜色 23 | @property (nonatomic, strong) IBInspectable NSColor *unLoadColor; 24 | //已播放时长[min-max]; 25 | @property (nonatomic, assign) IBInspectable CGFloat playedValue; 26 | //预加载时长[min-max]; 27 | @property (nonatomic, assign) IBInspectable CGFloat preloadValue; 28 | //视频时长 29 | @property (nonatomic, assign) IBInspectable CGFloat maxValue; 30 | //最小视频时长;0 31 | @property (nonatomic, assign) IBInspectable CGFloat minValue; 32 | //设置时间点,展示一个竖条,用于实现看点 33 | @property (nonatomic, strong, nullable) NSArray * tags; 34 | //设置进度条是否是圆角,默认 NO 35 | @property (nonatomic, assign) IBInspectable BOOL rounded; 36 | //设置进库条在外侧容器内的水平 padding,默认 0 37 | @property (nonatomic, assign) IBInspectable CGFloat horizontalPadding; 38 | 39 | @property (assign, nonatomic) BOOL userInteraction; 40 | @property (readwrite) NSInteger tag; 41 | 42 | // 停止拖拽时回调 43 | - (void)onDraggedIndicator:(void(^)(double progress,MRProgressIndicator *indicator,BOOL isEndDrag))handler; 44 | // Hover期间回调 45 | - (void)onHoveredBar:(void (^)(double,MRProgressIndicator*))hoveredHandler 46 | onExit:(void (^)(MRProgressIndicator*))exitHandler; 47 | 48 | @end 49 | 50 | NS_ASSUME_NONNULL_END 51 | -------------------------------------------------------------------------------- /examples/tvos/build-framework.sh: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env bash 2 | # 3 | # Copyright (C) 2024 Matt Reach 4 | 5 | # Licensed under the Apache License, Version 2.0 (the "License"); 6 | # you may not use this file except in compliance with the License. 7 | # You may obtain a copy of the License at 8 | # 9 | # http://www.apache.org/licenses/LICENSE-2.0 10 | # 11 | # Unless required by applicable law or agreed to in writing, software 12 | # distributed under the License is distributed on an "AS IS" BASIS, 13 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | # See the License for the specific language governing permissions and 15 | # limitations under the License. 16 | 17 | THIS_DIR=$(DIRNAME=$(dirname "$0"); cd "$DIRNAME"; pwd) 18 | cd "$THIS_DIR" 19 | 20 | set -e 21 | 22 | if [[ ! -d FSPlayer.xcodeproj ]]; then 23 | ./generate-fsplayer.sh 24 | fi 25 | 26 | # 1 27 | PROJECT_NAME="FSPlayer.xcodeproj" 28 | TARGET_NAME="FSPlayer-tvOS" 29 | 30 | WORK_DIR="Release-appletvos" 31 | SIM_WORK_DIR="Release-appletvsimulator" 32 | 33 | # 2 34 | if [ -d ${WORK_DIR} ]; then 35 | rm -rf ${WORK_DIR} 36 | fi 37 | 38 | if [ -d ${SIM_WORK_DIR} ]; then 39 | rm -rf ${SIM_WORK_DIR} 40 | fi 41 | 42 | # 3 43 | # project方式 44 | # xcodebuild -showsdks 45 | # Build the framework for device and simulator with all architectures. 46 | export IPHONEOS_DEPLOYMENT_TARGET=11.0 47 | 48 | xcodebuild -project ${PROJECT_NAME} -target ${TARGET_NAME} \ 49 | -configuration Release \ 50 | -sdk appletvsimulator -arch x86_64 -arch arm64 \ 51 | BUILD_DIR=. \ 52 | clean build 53 | 54 | xcodebuild -project ${PROJECT_NAME} -target ${TARGET_NAME} \ 55 | -configuration Release \ 56 | -sdk appletvos -arch arm64 \ 57 | BUILD_DIR=. \ 58 | clean build 59 | 60 | echo "tvos framework dir:$WORK_DIR" 61 | echo "tvos simulator framework dir: $SIM_WORK_DIR" -------------------------------------------------------------------------------- /examples/tvos/FSPlayerTVDemo/AppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.m 3 | // FSPlayerTVDemo 4 | // 5 | // Created by debugly on 2024/5/23. 6 | // 7 | 8 | #import "AppDelegate.h" 9 | 10 | @interface AppDelegate () 11 | 12 | @end 13 | 14 | @implementation AppDelegate 15 | 16 | 17 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 18 | // Override point for customization after application launch. 19 | return YES; 20 | } 21 | 22 | 23 | - (void)applicationWillResignActive:(UIApplication *)application { 24 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 25 | // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. 26 | } 27 | 28 | 29 | - (void)applicationDidEnterBackground:(UIApplication *)application { 30 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 31 | } 32 | 33 | 34 | - (void)applicationWillEnterForeground:(UIApplication *)application { 35 | // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. 36 | } 37 | 38 | 39 | - (void)applicationDidBecomeActive:(UIApplication *)application { 40 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 41 | } 42 | 43 | 44 | @end 45 | -------------------------------------------------------------------------------- /ijkmedia/wrapper/apple/FSVideoRenderView.m: -------------------------------------------------------------------------------- 1 | /* 2 | * FSVideoRenderView.m 3 | * 4 | * Copyright (c) 2023 debugly 5 | * 6 | * This file is part of FSPlayer. 7 | * 8 | * FSPlayer is free software; you can redistribute it and/or 9 | * modify it under the terms of the GNU Lesser General Public 10 | * License as published by the Free Software Foundation; either 11 | * version 3 of the License, or (at your option) any later version. 12 | * 13 | * FSPlayer is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 | * Lesser General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU Lesser General Public 19 | * License along with FSPlayer; if not, write to the Free Software 20 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 21 | */ 22 | 23 | #import "FSVideoRenderView.h" 24 | #if TARGET_OS_OSX 25 | #import "FSSDLGLView.h" 26 | #endif 27 | #import "FSMetalView.h" 28 | 29 | @implementation FSVideoRenderView 30 | 31 | #if TARGET_OS_OSX 32 | + (UIView *)createGLRenderView 33 | { 34 | #if TARGET_OS_IOS || TARGET_OS_TV 35 | CGRect rect = [[UIScreen mainScreen] bounds]; 36 | #else 37 | CGRect rect = [[[NSScreen screens] firstObject]frame]; 38 | #endif 39 | rect.origin = CGPointZero; 40 | return [[FSSDLGLView alloc] initWithFrame:rect]; 41 | } 42 | #endif 43 | 44 | + (UIView *)createMetalRenderView 45 | { 46 | #if TARGET_OS_IOS || TARGET_OS_TV 47 | CGRect rect = [[UIScreen mainScreen] bounds]; 48 | #else 49 | CGRect rect = [[[NSScreen screens] firstObject]frame]; 50 | #endif 51 | rect.origin = CGPointZero; 52 | return [[FSMetalView alloc] initWithFrame:rect]; 53 | } 54 | 55 | @end 56 | -------------------------------------------------------------------------------- /ijkmedia/ijksdl/gles2/color_matrix.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2016 Bilibili 3 | * Copyright (c) 2016 Zhang Rui 4 | * Copyright (c) 2019 debugly 5 | * 6 | * This file is part of FSPlayer. 7 | * 8 | * FSPlayer is free software; you can redistribute it and/or 9 | * modify it under the terms of the GNU Lesser General Public 10 | * License as published by the Free Software Foundation; either 11 | * version 3 of the License, or (at your option) any later version. 12 | * 13 | * FSPlayer is distributed in the hope that it will be useful, 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 | * Lesser General Public License for more details. 17 | * 18 | * You should have received a copy of the GNU Lesser General Public 19 | * License along with FSPlayer; if not, write to the Free Software 20 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 21 | */ 22 | 23 | //https://github.com/lemenkov/libyuv/blob/6900494d90ae095d44405cd4cc3f346971fa69c9/source/row_common.cc#L2 24 | 25 | #ifndef _COLOR_MATRIX_HEADER_ 26 | #define _COLOR_MATRIX_HEADER_ 27 | typedef enum : int { 28 | YUV_2_RGB_Color_Matrix_None, 29 | YUV_2_RGB_Color_Matrix_BT601, 30 | YUV_2_RGB_Color_Matrix_BT709, 31 | YUV_2_RGB_Color_Matrix_BT2020 32 | } YUV_2_RGB_Color_Matrix; 33 | 34 | typedef enum : int { 35 | FS_Color_Transfer_Function_LINEAR, 36 | FS_Color_Transfer_Function_PQ, 37 | FS_Color_Transfer_Function_HLG, 38 | } FS_Color_Transfer_Function; 39 | 40 | //Full Range YUV to RGB reference 41 | const GLfloat *FS_GLES2_getColorMatrix_bt2020(void); 42 | const GLfloat *FS_GLES2_getColorMatrix_bt709(void); 43 | const GLfloat *FS_GLES2_getColorMatrix_bt601(void); 44 | const GLfloat *FS_GLES2_getColorMatrix(YUV_2_RGB_Color_Matrix type); 45 | #endif 46 | -------------------------------------------------------------------------------- /examples/ios/FSPlayerDemo/ViewController/FSMoviePlayerViewController.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2013-2015 Bilibili 3 | * Copyright (C) 2013-2015 Zhang Rui 4 | * Copyright (c) 2019 debugly 5 | * 6 | * Licensed under the Apache License, Version 2.0 (the "License"); 7 | * you may not use this file except in compliance with the License. 8 | * You may obtain a copy of the License at 9 | * 10 | * http://www.apache.org/licenses/LICENSE-2.0 11 | * 12 | * Unless required by applicable law or agreed to in writing, software 13 | * distributed under the License is distributed on an "AS IS" BASIS, 14 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | * See the License for the specific language governing permissions and 16 | * limitations under the License. 17 | */ 18 | 19 | #import 20 | #import 21 | 22 | @class FSMediaControl; 23 | 24 | @interface FSVideoViewController : UIViewController 25 | 26 | @property(atomic,strong) NSURL *url; 27 | @property(strong,nonatomic) NSString* manifest; 28 | @property(atomic, retain) id player; 29 | 30 | - (id)initWithURL:(NSURL *)url; 31 | - (id)initWithManifest:(NSString*)manifest_string; 32 | 33 | + (void)presentFromViewController:(UIViewController *)viewController withTitle:(NSString *)title URL:(NSURL *)url completion:(void(^)(void))completion; 34 | 35 | - (IBAction)onClickMediaControl:(id)sender; 36 | - (IBAction)onClickOverlay:(id)sender; 37 | - (IBAction)onClickDone:(id)sender; 38 | - (IBAction)onClickPlay:(id)sender; 39 | - (IBAction)onClickPause:(id)sender; 40 | 41 | - (IBAction)didSliderTouchDown; 42 | - (IBAction)didSliderTouchCancel; 43 | - (IBAction)didSliderTouchUpOutside; 44 | - (IBAction)didSliderTouchUpInside; 45 | - (IBAction)didSliderValueChanged; 46 | 47 | @property(nonatomic,strong) IBOutlet FSMediaControl *mediaControl; 48 | 49 | @end 50 | -------------------------------------------------------------------------------- /examples/tvos/FSPlayerTVDemo/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | --------------------------------------------------------------------------------