├── DemoPlayer-Bridging-Header.h ├── DemoPlayer.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcuserdata │ │ └── Chandan.xcuserdatad │ │ └── UserInterfaceState.xcuserstate └── xcuserdata │ └── Chandan.xcuserdatad │ ├── xcdebugger │ └── Breakpoints_v2.xcbkptlist │ └── xcschemes │ ├── DemoPlayer.xcscheme │ └── xcschememanagement.plist ├── DemoPlayer.xcworkspace ├── contents.xcworkspacedata └── xcuserdata │ └── Chandan.xcuserdatad │ ├── UserInterfaceState.xcuserstate │ └── xcdebugger │ └── Breakpoints_v2.xcbkptlist ├── DemoPlayer ├── AppDelegate.swift ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ └── Contents.json │ ├── BMPlayer_fullscreen.imageset │ │ ├── BMPlayer_fullscreen@2x.png │ │ ├── BMPlayer_fullscreen@3x.png │ │ └── Contents.json │ ├── BMPlayer_pause.imageset │ │ ├── BMPlayer_pause@2x.png │ │ ├── BMPlayer_pause@3x.png │ │ └── Contents.json │ ├── BMPlayer_play.imageset │ │ ├── BMPlayer_play@2x.png │ │ ├── BMPlayer_play@3x.png │ │ └── Contents.json │ ├── BMPlayer_portialscreen.imageset │ │ ├── BMPlayer_portialscreen@2x.png │ │ ├── BMPlayer_portialscreen@3x.png │ │ └── Contents.json │ ├── BMPlayer_replay.imageset │ │ ├── BMPlayer_replay@2x.png │ │ ├── BMPlayer_replay@3x.png │ │ └── Contents.json │ ├── Contents.json │ ├── icon_pause.imageset │ │ ├── Contents.json │ │ ├── icon_pause.png │ │ ├── icon_pause@2x.png │ │ └── icon_pause@3x.png │ ├── icon_play.imageset │ │ ├── Contents.json │ │ ├── icon_play.png │ │ ├── icon_play@2x.png │ │ └── icon_play@3x.png │ ├── icon_screen.imageset │ │ ├── Contents.json │ │ ├── icon_screen.png │ │ ├── icon_screen@2x.png │ │ └── icon_screen@3x.png │ ├── icon_volume.imageset │ │ ├── Contents.json │ │ ├── icon_volume.png │ │ ├── icon_volume@2x.png │ │ └── icon_volume@3x.png │ └── sound.imageset │ │ ├── Contents.json │ │ ├── sound@2x.png │ │ └── sound@3x.png ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard ├── Controllers │ ├── AVViewController.swift │ ├── ChoseTableViewController.swift │ ├── CommonMethods.swift │ ├── HelperClass.swift │ ├── MediaViewController.swift │ ├── VLCViewController.swift │ └── ViewController.swift ├── Info.plist ├── View │ └── PlayerOverlayVC.swift └── trailer_720p.mov ├── DemoPlayerTests ├── DemoPlayerTests.swift └── Info.plist ├── DemoPlayerUITests ├── DemoPlayerUITests.swift └── Info.plist ├── LICENSE ├── Podfile ├── Podfile.lock ├── Pods ├── Manifest.lock ├── Pods.xcodeproj │ ├── project.pbxproj │ └── xcuserdata │ │ └── Chandan.xcuserdatad │ │ └── xcschemes │ │ ├── Pods-DemoPlayer.xcscheme │ │ └── xcschememanagement.plist └── Target Support Files │ └── Pods-DemoPlayer │ ├── Info.plist │ ├── Pods-DemoPlayer-acknowledgements.markdown │ ├── Pods-DemoPlayer-acknowledgements.plist │ ├── Pods-DemoPlayer-dummy.m │ ├── Pods-DemoPlayer-frameworks.sh │ ├── Pods-DemoPlayer-resources.sh │ ├── Pods-DemoPlayer-umbrella.h │ ├── Pods-DemoPlayer.debug.xcconfig │ ├── Pods-DemoPlayer.modulemap │ └── Pods-DemoPlayer.release.xcconfig └── README.md /DemoPlayer-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | // 2 | // Use this file to import your target's public headers that you would like to expose to Swift. 3 | // 4 | 5 | #import -------------------------------------------------------------------------------- /DemoPlayer.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /DemoPlayer.xcodeproj/project.xcworkspace/xcuserdata/Chandan.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chandansingh5/CSVideoPlayer/870c584bd51ebb2fa14716baf833b964625c7f8e/DemoPlayer.xcodeproj/project.xcworkspace/xcuserdata/Chandan.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /DemoPlayer.xcodeproj/xcuserdata/Chandan.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 8 | 20 | 21 | 22 | 24 | 36 | 37 | 38 | 40 | 52 | 53 | 54 | 56 | 68 | 69 | 70 | 71 | 72 | -------------------------------------------------------------------------------- /DemoPlayer.xcodeproj/xcuserdata/Chandan.xcuserdatad/xcschemes/DemoPlayer.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 33 | 39 | 40 | 41 | 43 | 49 | 50 | 51 | 52 | 53 | 59 | 60 | 61 | 62 | 63 | 64 | 74 | 76 | 82 | 83 | 84 | 85 | 86 | 87 | 93 | 95 | 101 | 102 | 103 | 104 | 106 | 107 | 110 | 111 | 112 | -------------------------------------------------------------------------------- /DemoPlayer.xcodeproj/xcuserdata/Chandan.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | DemoPlayer.xcscheme 8 | 9 | orderHint 10 | 0 11 | 12 | 13 | SuppressBuildableAutocreation 14 | 15 | 1735B0AC1DA6087800A06BD4 16 | 17 | primary 18 | 19 | 20 | 1735B0C01DA6087800A06BD4 21 | 22 | primary 23 | 24 | 25 | 1735B0CB1DA6087800A06BD4 26 | 27 | primary 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /DemoPlayer.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /DemoPlayer.xcworkspace/xcuserdata/Chandan.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chandansingh5/CSVideoPlayer/870c584bd51ebb2fa14716baf833b964625c7f8e/DemoPlayer.xcworkspace/xcuserdata/Chandan.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /DemoPlayer.xcworkspace/xcuserdata/Chandan.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | -------------------------------------------------------------------------------- /DemoPlayer/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // DemoPlayer 4 | // 5 | // Created by Chandan Singh on 10/6/16. 6 | // Copyright © 2016 Chandan Singh. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | @UIApplicationMain 12 | class AppDelegate: UIResponder, UIApplicationDelegate { 13 | 14 | var window: UIWindow? 15 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 16 | // Override point for customization after application launch. 17 | return true 18 | } 19 | 20 | func applicationWillResignActive(_ application: UIApplication) { 21 | // 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. 22 | // 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. 23 | } 24 | 25 | func applicationDidEnterBackground(_ application: UIApplication) { 26 | // 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. 27 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 28 | } 29 | 30 | func applicationWillEnterForeground(_ application: UIApplication) { 31 | // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. 32 | } 33 | 34 | func applicationDidBecomeActive(_ application: UIApplication) { 35 | // 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. 36 | } 37 | 38 | func applicationWillTerminate(_ application: UIApplication) { 39 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 40 | } 41 | 42 | 43 | } 44 | 45 | -------------------------------------------------------------------------------- /DemoPlayer/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "20x20", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "20x20", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "29x29", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "29x29", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "40x40", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "40x40", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "idiom" : "iphone", 35 | "size" : "60x60", 36 | "scale" : "2x" 37 | }, 38 | { 39 | "idiom" : "iphone", 40 | "size" : "60x60", 41 | "scale" : "3x" 42 | }, 43 | { 44 | "idiom" : "ios-marketing", 45 | "size" : "1024x1024", 46 | "scale" : "1x" 47 | } 48 | ], 49 | "info" : { 50 | "version" : 1, 51 | "author" : "xcode" 52 | } 53 | } -------------------------------------------------------------------------------- /DemoPlayer/Assets.xcassets/BMPlayer_fullscreen.imageset/BMPlayer_fullscreen@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chandansingh5/CSVideoPlayer/870c584bd51ebb2fa14716baf833b964625c7f8e/DemoPlayer/Assets.xcassets/BMPlayer_fullscreen.imageset/BMPlayer_fullscreen@2x.png -------------------------------------------------------------------------------- /DemoPlayer/Assets.xcassets/BMPlayer_fullscreen.imageset/BMPlayer_fullscreen@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chandansingh5/CSVideoPlayer/870c584bd51ebb2fa14716baf833b964625c7f8e/DemoPlayer/Assets.xcassets/BMPlayer_fullscreen.imageset/BMPlayer_fullscreen@3x.png -------------------------------------------------------------------------------- /DemoPlayer/Assets.xcassets/BMPlayer_fullscreen.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "BMPlayer_fullscreen@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "BMPlayer_fullscreen@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /DemoPlayer/Assets.xcassets/BMPlayer_pause.imageset/BMPlayer_pause@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chandansingh5/CSVideoPlayer/870c584bd51ebb2fa14716baf833b964625c7f8e/DemoPlayer/Assets.xcassets/BMPlayer_pause.imageset/BMPlayer_pause@2x.png -------------------------------------------------------------------------------- /DemoPlayer/Assets.xcassets/BMPlayer_pause.imageset/BMPlayer_pause@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chandansingh5/CSVideoPlayer/870c584bd51ebb2fa14716baf833b964625c7f8e/DemoPlayer/Assets.xcassets/BMPlayer_pause.imageset/BMPlayer_pause@3x.png -------------------------------------------------------------------------------- /DemoPlayer/Assets.xcassets/BMPlayer_pause.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "BMPlayer_pause@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "BMPlayer_pause@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /DemoPlayer/Assets.xcassets/BMPlayer_play.imageset/BMPlayer_play@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chandansingh5/CSVideoPlayer/870c584bd51ebb2fa14716baf833b964625c7f8e/DemoPlayer/Assets.xcassets/BMPlayer_play.imageset/BMPlayer_play@2x.png -------------------------------------------------------------------------------- /DemoPlayer/Assets.xcassets/BMPlayer_play.imageset/BMPlayer_play@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chandansingh5/CSVideoPlayer/870c584bd51ebb2fa14716baf833b964625c7f8e/DemoPlayer/Assets.xcassets/BMPlayer_play.imageset/BMPlayer_play@3x.png -------------------------------------------------------------------------------- /DemoPlayer/Assets.xcassets/BMPlayer_play.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "BMPlayer_play@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "BMPlayer_play@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /DemoPlayer/Assets.xcassets/BMPlayer_portialscreen.imageset/BMPlayer_portialscreen@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chandansingh5/CSVideoPlayer/870c584bd51ebb2fa14716baf833b964625c7f8e/DemoPlayer/Assets.xcassets/BMPlayer_portialscreen.imageset/BMPlayer_portialscreen@2x.png -------------------------------------------------------------------------------- /DemoPlayer/Assets.xcassets/BMPlayer_portialscreen.imageset/BMPlayer_portialscreen@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chandansingh5/CSVideoPlayer/870c584bd51ebb2fa14716baf833b964625c7f8e/DemoPlayer/Assets.xcassets/BMPlayer_portialscreen.imageset/BMPlayer_portialscreen@3x.png -------------------------------------------------------------------------------- /DemoPlayer/Assets.xcassets/BMPlayer_portialscreen.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "BMPlayer_portialscreen@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "BMPlayer_portialscreen@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /DemoPlayer/Assets.xcassets/BMPlayer_replay.imageset/BMPlayer_replay@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chandansingh5/CSVideoPlayer/870c584bd51ebb2fa14716baf833b964625c7f8e/DemoPlayer/Assets.xcassets/BMPlayer_replay.imageset/BMPlayer_replay@2x.png -------------------------------------------------------------------------------- /DemoPlayer/Assets.xcassets/BMPlayer_replay.imageset/BMPlayer_replay@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chandansingh5/CSVideoPlayer/870c584bd51ebb2fa14716baf833b964625c7f8e/DemoPlayer/Assets.xcassets/BMPlayer_replay.imageset/BMPlayer_replay@3x.png -------------------------------------------------------------------------------- /DemoPlayer/Assets.xcassets/BMPlayer_replay.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "BMPlayer_replay@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "BMPlayer_replay@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /DemoPlayer/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /DemoPlayer/Assets.xcassets/icon_pause.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_pause.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_pause@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "icon_pause@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /DemoPlayer/Assets.xcassets/icon_pause.imageset/icon_pause.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chandansingh5/CSVideoPlayer/870c584bd51ebb2fa14716baf833b964625c7f8e/DemoPlayer/Assets.xcassets/icon_pause.imageset/icon_pause.png -------------------------------------------------------------------------------- /DemoPlayer/Assets.xcassets/icon_pause.imageset/icon_pause@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chandansingh5/CSVideoPlayer/870c584bd51ebb2fa14716baf833b964625c7f8e/DemoPlayer/Assets.xcassets/icon_pause.imageset/icon_pause@2x.png -------------------------------------------------------------------------------- /DemoPlayer/Assets.xcassets/icon_pause.imageset/icon_pause@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chandansingh5/CSVideoPlayer/870c584bd51ebb2fa14716baf833b964625c7f8e/DemoPlayer/Assets.xcassets/icon_pause.imageset/icon_pause@3x.png -------------------------------------------------------------------------------- /DemoPlayer/Assets.xcassets/icon_play.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_play.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_play@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "icon_play@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /DemoPlayer/Assets.xcassets/icon_play.imageset/icon_play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chandansingh5/CSVideoPlayer/870c584bd51ebb2fa14716baf833b964625c7f8e/DemoPlayer/Assets.xcassets/icon_play.imageset/icon_play.png -------------------------------------------------------------------------------- /DemoPlayer/Assets.xcassets/icon_play.imageset/icon_play@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chandansingh5/CSVideoPlayer/870c584bd51ebb2fa14716baf833b964625c7f8e/DemoPlayer/Assets.xcassets/icon_play.imageset/icon_play@2x.png -------------------------------------------------------------------------------- /DemoPlayer/Assets.xcassets/icon_play.imageset/icon_play@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chandansingh5/CSVideoPlayer/870c584bd51ebb2fa14716baf833b964625c7f8e/DemoPlayer/Assets.xcassets/icon_play.imageset/icon_play@3x.png -------------------------------------------------------------------------------- /DemoPlayer/Assets.xcassets/icon_screen.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_screen.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_screen@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "icon_screen@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /DemoPlayer/Assets.xcassets/icon_screen.imageset/icon_screen.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chandansingh5/CSVideoPlayer/870c584bd51ebb2fa14716baf833b964625c7f8e/DemoPlayer/Assets.xcassets/icon_screen.imageset/icon_screen.png -------------------------------------------------------------------------------- /DemoPlayer/Assets.xcassets/icon_screen.imageset/icon_screen@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chandansingh5/CSVideoPlayer/870c584bd51ebb2fa14716baf833b964625c7f8e/DemoPlayer/Assets.xcassets/icon_screen.imageset/icon_screen@2x.png -------------------------------------------------------------------------------- /DemoPlayer/Assets.xcassets/icon_screen.imageset/icon_screen@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chandansingh5/CSVideoPlayer/870c584bd51ebb2fa14716baf833b964625c7f8e/DemoPlayer/Assets.xcassets/icon_screen.imageset/icon_screen@3x.png -------------------------------------------------------------------------------- /DemoPlayer/Assets.xcassets/icon_volume.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "icon_volume.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "icon_volume@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "icon_volume@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /DemoPlayer/Assets.xcassets/icon_volume.imageset/icon_volume.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chandansingh5/CSVideoPlayer/870c584bd51ebb2fa14716baf833b964625c7f8e/DemoPlayer/Assets.xcassets/icon_volume.imageset/icon_volume.png -------------------------------------------------------------------------------- /DemoPlayer/Assets.xcassets/icon_volume.imageset/icon_volume@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chandansingh5/CSVideoPlayer/870c584bd51ebb2fa14716baf833b964625c7f8e/DemoPlayer/Assets.xcassets/icon_volume.imageset/icon_volume@2x.png -------------------------------------------------------------------------------- /DemoPlayer/Assets.xcassets/icon_volume.imageset/icon_volume@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chandansingh5/CSVideoPlayer/870c584bd51ebb2fa14716baf833b964625c7f8e/DemoPlayer/Assets.xcassets/icon_volume.imageset/icon_volume@3x.png -------------------------------------------------------------------------------- /DemoPlayer/Assets.xcassets/sound.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "sound@2x.png", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "filename" : "sound@3x.png", 15 | "scale" : "3x" 16 | } 17 | ], 18 | "info" : { 19 | "version" : 1, 20 | "author" : "xcode" 21 | } 22 | } -------------------------------------------------------------------------------- /DemoPlayer/Assets.xcassets/sound.imageset/sound@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chandansingh5/CSVideoPlayer/870c584bd51ebb2fa14716baf833b964625c7f8e/DemoPlayer/Assets.xcassets/sound.imageset/sound@2x.png -------------------------------------------------------------------------------- /DemoPlayer/Assets.xcassets/sound.imageset/sound@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chandansingh5/CSVideoPlayer/870c584bd51ebb2fa14716baf833b964625c7f8e/DemoPlayer/Assets.xcassets/sound.imageset/sound@3x.png -------------------------------------------------------------------------------- /DemoPlayer/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 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /DemoPlayer/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 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 143 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 193 | 209 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | 316 | 317 | 318 | 319 | 320 | 321 | 322 | 323 | 324 | 325 | 326 | 327 | 328 | 329 | 330 | 331 | 332 | 333 | 334 | 335 | 336 | 337 | 338 | 339 | 340 | 341 | 342 | 343 | 344 | 345 | 346 | 347 | 348 | 349 | 350 | 351 | 352 | 353 | 354 | 355 | 356 | 357 | 358 | 359 | 360 | 361 | 362 | 363 | 364 | -------------------------------------------------------------------------------- /DemoPlayer/Controllers/AVViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // DemoPlayer 4 | // 5 | // Created by Chandan Singh on 10/6/16. 6 | // Copyright © 2016 Chandan Singh. All rights reserved. 7 | // 8 | 9 | 10 | 11 | import AVFoundation 12 | import AVKit 13 | 14 | class AVViewController: UIViewController { 15 | 16 | var overlayVC : PlayerOverlayVC! 17 | let avPlayer :AVPlayer = AVPlayer() 18 | var avPlayerLayer: AVPlayerLayer! 19 | var url : URL! 20 | 21 | override func viewDidLoad() { 22 | super.viewDidLoad() 23 | self.setupAVplayer() //initialization AVPlayer 24 | } 25 | 26 | override func viewWillAppear(_ animated: Bool) { 27 | super.viewWillAppear(animated) 28 | self.addOverlayView() 29 | avPlayer.play() // Start the playback 30 | } 31 | 32 | override func viewWillLayoutSubviews() { 33 | super.viewWillLayoutSubviews() 34 | avPlayerLayer.frame = view.bounds // Layout subviews manually 35 | } 36 | 37 | override func viewWillDisappear(_ animated: Bool) { 38 | self.avPlayer.pause() //Pause the playback 39 | self.overlayVC.removeFromParent() //Remove overlay 40 | } 41 | 42 | override func didReceiveMemoryWarning() { 43 | super.didReceiveMemoryWarning() 44 | } 45 | 46 | 47 | // MARK: AvPlayer initialization 48 | func setupAVplayer() { 49 | 50 | avPlayerLayer = AVPlayerLayer(player: avPlayer) 51 | view.layer.insertSublayer(avPlayerLayer, at: 0) 52 | let playerItem = AVPlayerItem(url:self.url) 53 | avPlayer.replaceCurrentItem(with: playerItem) 54 | /* Observer for playing video */ 55 | avPlayer.addPeriodicTimeObserver(forInterval: CMTimeMake(value: 1, timescale: 60), queue: DispatchQueue.main) { 56 | [unowned self] time in 57 | self.updateProgressBar() 58 | } 59 | } 60 | 61 | // MARK: OverlayVC initialization 62 | func addOverlayView() { 63 | overlayVC = self.storyboard?.instantiateViewController(withIdentifier: "AVPlayerOverlayVC") as! PlayerOverlayVC 64 | self.addChild(overlayVC) 65 | self.view.addSubview(overlayVC.view) 66 | overlayVC.deleget = self 67 | overlayVC.didMove(toParent: self) 68 | } 69 | 70 | // MARK: Update Vedio Sldier on OverlayVC View 71 | func updateProgressBar() { 72 | 73 | /** The current state of the video player */ 74 | let duration = CMTimeGetSeconds(avPlayer.currentItem!.duration) 75 | let myIntValue:Int = Int(duration) 76 | 77 | if (myIntValue != 0) { 78 | let totalDuration = Float(duration) 79 | let currentDuration = Float(CMTimeGetSeconds(avPlayer.currentTime())) 80 | overlayVC.didTapedSwitch(totalDuration, currentDuration: currentDuration) 81 | } 82 | } 83 | } 84 | 85 | // MARK: - PlayerOverlayVCDelegate 86 | extension AVViewController : PlayerOverlayVCDelegate{ 87 | 88 | func didVideoSliderSliderValueChanged(_ totalDuration :Double!){ 89 | 90 | let timeStart = totalDuration 91 | let timeScale = avPlayer.currentItem!.asset.duration.timescale 92 | let seektime = CMTimeMakeWithSeconds(timeStart!, preferredTimescale: timeScale) 93 | if CMTIME_IS_VALID(seektime) { 94 | avPlayer.seek(to: seektime, toleranceBefore: CMTime.zero, toleranceAfter: CMTime.zero) 95 | } 96 | } 97 | 98 | func didPlayButtonSelected(_ isplayorPouse : Bool!){ 99 | if (isplayorPouse == true) { 100 | avPlayer.play() // Start the playback 101 | } 102 | else { 103 | avPlayer.pause() // Stop the playback 104 | } 105 | } 106 | } 107 | 108 | -------------------------------------------------------------------------------- /DemoPlayer/Controllers/ChoseTableViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ChoseTableViewController.swift 3 | // DemoPlayer 4 | // 5 | // Created by Chandan Singh on 10/10/16. 6 | // Copyright © 2016 Chandan Singh. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class ChoseTableViewController: UITableViewController { 12 | 13 | var videoListArray = [VideoList]() 14 | var selectPlayer : String! 15 | 16 | override func viewDidLoad() { 17 | super.viewDidLoad() 18 | 19 | tableView.tableFooterView = UIView() /* Remove extra separators */ 20 | if selectPlayer == "vlcController" { 21 | /* VLC support video list */ 22 | videoListArray = VideoSectionsData().getVLCPlayListFArrayFromData() 23 | }else{ 24 | /* AvPlayer support video list */ 25 | videoListArray = VideoSectionsData().getAVPlayerPlayListArrayFromData() 26 | } 27 | } 28 | 29 | override func didReceiveMemoryWarning() { 30 | super.didReceiveMemoryWarning() 31 | // Dispose of any resources that can be recreated. 32 | } 33 | 34 | // MARK: - Table view data source 35 | override func numberOfSections(in tableView: UITableView) -> Int { 36 | return videoListArray.count 37 | } 38 | 39 | override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 40 | return videoListArray[section].items.count 41 | } 42 | 43 | override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? { 44 | return videoListArray[section].heading 45 | } 46 | 47 | override func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { 48 | return 50 49 | } 50 | override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 51 | let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier", for: indexPath) 52 | // Configure the cell... 53 | let urlString = videoListArray[indexPath.section].items[indexPath.row] 54 | let fullNameArr : [String] = urlString.components(separatedBy: "/") 55 | let lastName : String = fullNameArr.last! 56 | cell.textLabel?.text = lastName 57 | return cell 58 | } 59 | 60 | override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){ 61 | var url : URL! 62 | 63 | if indexPath.section == 0 { 64 | let urlString = videoListArray[indexPath.section].items[indexPath.row] 65 | let (firstName,lastName ) = CommonMethods.separatedByString(".", fulname: urlString) 66 | let videoFile = Bundle.main.path(forResource: firstName, ofType: lastName) 67 | url = URL(fileURLWithPath: videoFile!) 68 | }else { 69 | url = URL(string:videoListArray[indexPath.section].items[indexPath.row])! 70 | } 71 | if (url != nil) { 72 | self.performSegue(withIdentifier: selectPlayer as String, sender:url) 73 | } 74 | } 75 | 76 | // MARK: - Navigation 77 | override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 78 | 79 | let url = sender as! URL 80 | if segue.identifier == "avController"{ 81 | let targetController = segue.destination as! AVViewController 82 | targetController.url = url 83 | }else if segue.identifier == "mpController" { 84 | let targetController = segue.destination as! MediaViewController 85 | targetController.url = url 86 | }else if segue.identifier == "vlcController" { 87 | let targetController = segue.destination as! VLCViewController 88 | targetController.url = url 89 | } 90 | } 91 | } 92 | 93 | 94 | 95 | -------------------------------------------------------------------------------- /DemoPlayer/Controllers/CommonMethods.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CommonMethods.swift 3 | // DemoPlayer 4 | // 5 | // Created by Chandan Singh on 10/11/16. 6 | // Copyright © 2016 Chandan Singh. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | 12 | class CommonMethods { 13 | 14 | class func separatedByString(_ seprateStr:String ,fulname:String) -> (String,String){ 15 | let fullNameArr : [String] = fulname.components(separatedBy: seprateStr) 16 | guard fullNameArr.count > 0 else { 17 | return("","") 18 | } 19 | let firstName : String = fullNameArr[0] 20 | let lastName : String = fullNameArr[1] 21 | return (firstName,lastName) 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /DemoPlayer/Controllers/HelperClass.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Helper.swift 3 | // DemoPlayer 4 | // 5 | // Created by Chandan Singh on 10/11/16. 6 | // Copyright © 2016 Chandan Singh. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | struct PlayerList { 12 | var name: String? 13 | var identifier: String? 14 | init(name: String, identifier:String) { 15 | self.name = name 16 | self.identifier = identifier 17 | } 18 | } 19 | 20 | class PlayerListData { 21 | func getPlayerList() -> [PlayerList] { 22 | let player = ["AV Player", "Movie Player", "VLC Player"] 23 | let storybord = ["avController","mpController","vlcController"] 24 | var playList = [] as [PlayerList] 25 | for index in 0...2 { 26 | let item = PlayerList(name:player[index] ,identifier:storybord[index]) 27 | playList.append(item) 28 | } 29 | return playList 30 | } 31 | } 32 | 33 | struct VideoList { 34 | var heading : String 35 | var items : [String] 36 | init(title: String, objects : [String]) { 37 | heading = title 38 | items = objects 39 | } 40 | } 41 | 42 | class VideoSectionsData { 43 | 44 | /* VLC support video list */ 45 | func getVLCPlayListFArrayFromData() -> [VideoList] { 46 | var sectionsArray = [VideoList]() 47 | let DownloadUrl = VideoList(title: "Offline videos", objects: ["trailer_720p.mov"]) 48 | let liveUrl = VideoList(title: "Online videos", objects: ["http://www.sample-videos.com/video/mp4/720/big_buck_bunny_720p_1mb.mp4", 49 | "http://www.sample-videos.com/video/flv/720/big_buck_bunny_720p_1mb.flv", 50 | "http://www.sample-videos.com/video/mkv/720/big_buck_bunny_720p_20mb.mkv", 51 | "http://www.sample-videos.com/video/3gp/144/big_buck_bunny_144p_10mb.3gp","http://trailers.divx.com/divx_prod/profiles/Micayala_DivX1080p_ASP.divx"]) 52 | sectionsArray.append(DownloadUrl) 53 | sectionsArray.append(liveUrl) 54 | return sectionsArray 55 | } 56 | 57 | /* AVPlayer support video list */ 58 | func getAVPlayerPlayListArrayFromData() -> [VideoList] { 59 | var sectionsArray = [VideoList]() 60 | let DownloadUrl = VideoList(title: "Offline videos", objects: ["trailer_720p.mov"]) 61 | let liveUrl = VideoList(title: "Online videos", objects: ["http://www.sample-videos.com/video/mp4/720/big_buck_bunny_720p_1mb.mp4"]) 62 | sectionsArray.append(DownloadUrl) 63 | sectionsArray.append(liveUrl) 64 | return sectionsArray 65 | } 66 | } -------------------------------------------------------------------------------- /DemoPlayer/Controllers/MediaViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MediaViewController.swift 3 | // DemoPlayer 4 | // 5 | // Created by Chandan Singh on 10/8/16. 6 | // Copyright © 2016 Chandan Singh. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import MediaPlayer 11 | 12 | class MediaViewController: UIViewController{ 13 | 14 | var mpPlayer: MPMoviePlayerController = MPMoviePlayerController() 15 | var myTimer : Timer! 16 | var overlayVC : PlayerOverlayVC! 17 | var url : URL! 18 | 19 | override func viewDidLoad() { 20 | super.viewDidLoad() 21 | self.setupMoviePlayer() 22 | 23 | /* Register for Playing video MPMoviePlayer DidChangeNotification */ 24 | NotificationCenter.default.addObserver(forName: NSNotification.Name.MPMoviePlayerNowPlayingMovieDidChange, object: nil, queue: OperationQueue.main) { _ in 25 | self.setTimer() 26 | } 27 | 28 | /* Register for Playing video MPMoviePlayer FinishNotification */ 29 | NotificationCenter.default.addObserver(forName: NSNotification.Name.MPMoviePlayerPlaybackDidFinish, object: nil, queue: OperationQueue.main) { _ in 30 | self.myTimer.invalidate() 31 | } 32 | } 33 | 34 | override func didReceiveMemoryWarning() { 35 | super.didReceiveMemoryWarning() 36 | // Dispose of any resources that can be recreated. 37 | } 38 | 39 | override func viewWillLayoutSubviews() { 40 | super.viewWillLayoutSubviews() 41 | // Layout subviews manually 42 | mpPlayer.view.frame = view.bounds 43 | } 44 | 45 | override func viewWillAppear(_ animated: Bool) { 46 | super.viewWillAppear(animated) 47 | self.addOverlayView() 48 | mpPlayer.play() // Start the playback 49 | } 50 | 51 | override func viewWillDisappear(_ animated: Bool) { 52 | mpPlayer.stop() // Stop the playback 53 | self.overlayVC.removeFromParent() // remove overlay 54 | } 55 | 56 | // MARK: OverlayVC initialization 57 | func addOverlayView() { 58 | overlayVC = self.storyboard?.instantiateViewController(withIdentifier: "AVPlayerOverlayVC") as! PlayerOverlayVC 59 | self.addChild(overlayVC) 60 | self.view.addSubview(overlayVC.view) 61 | overlayVC.deleget = self 62 | overlayVC.didMove(toParent: self) 63 | } 64 | 65 | // MARK: MPMoviePlayerController initialization 66 | func setupMoviePlayer() { 67 | mpPlayer = MPMoviePlayerController(contentURL:self.url) 68 | mpPlayer.movieSourceType = MPMovieSourceType.unknown 69 | mpPlayer.view.frame = self.view.bounds 70 | mpPlayer.scalingMode = MPMovieScalingMode.aspectFit 71 | mpPlayer.controlStyle = MPMovieControlStyle.none 72 | mpPlayer.shouldAutoplay = true 73 | mpPlayer.backgroundView.backgroundColor = UIColor.clear 74 | self.view.addSubview(mpPlayer.view) 75 | mpPlayer.prepareToPlay() 76 | } 77 | 78 | // MARK: NSTimer initialization 79 | func setTimer() { 80 | /* schedule timer */ 81 | myTimer = Timer.scheduledTimer(timeInterval: 0, target: self, selector: #selector(MediaViewController.updateTimer(_:)), userInfo: nil, repeats: true) 82 | } 83 | 84 | 85 | @objc func updateTimer(_ timer: Timer) { 86 | /* The Total duration of the video player */ 87 | let totalDuration = Float(mpPlayer.duration) 88 | /* The current state of the video player */ 89 | let currentDuration = Float(mpPlayer.currentPlaybackTime) 90 | overlayVC.didTapedSwitch(totalDuration, currentDuration: currentDuration) 91 | } 92 | } 93 | 94 | // MARK: - PlayerOverlayVCDelegate 95 | extension MediaViewController : PlayerOverlayVCDelegate{ 96 | 97 | func didPlayButtonSelected(_ isplayorPouse : Bool!){ 98 | if isplayorPouse == true { 99 | self.setTimer() 100 | mpPlayer.play() // Start the playback 101 | } 102 | else { 103 | self.myTimer.invalidate() 104 | mpPlayer.pause() // Pause the playback 105 | } 106 | } 107 | 108 | func didVideoSliderSliderValueChanged(_ totalDuration :Double!){ 109 | //update 110 | mpPlayer.currentPlaybackTime = totalDuration 111 | } 112 | } 113 | -------------------------------------------------------------------------------- /DemoPlayer/Controllers/VLCViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // VLCViewController.swift 3 | // DemoPlayer 4 | // 5 | // Created by Chandan Singh on 10/8/16. 6 | // Copyright © 2016 Chandan Singh. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class VLCViewController: UIViewController,VLCMediaPlayerDelegate { 12 | 13 | var vlcMediaPlayer = VLCMediaPlayer() 14 | var overlayVC : PlayerOverlayVC! 15 | var movieView: UIView! 16 | var url : URL! 17 | 18 | override func viewDidLoad() { 19 | super.viewDidLoad() 20 | self.addMovieView() 21 | self.setupVLCPalyer() 22 | /* Register for start PlayerTime video notification */ 23 | NotificationCenter.default.addObserver(forName: NSNotification.Name(rawValue: VLCMediaPlayerTimeChanged), object: nil, queue: OperationQueue.main) { _ in 24 | self .timechangedLoadStateDidChange() 25 | } 26 | } 27 | 28 | override func viewWillAppear(_ animated: Bool) { 29 | super.viewWillAppear(animated) 30 | self.addOverlayView() 31 | vlcMediaPlayer.play() // Start the playback 32 | } 33 | 34 | override func viewWillDisappear(_ animated: Bool) { 35 | vlcMediaPlayer.stop() // Stop the playback 36 | overlayVC.removeFromParent() // Remove overlay 37 | } 38 | 39 | override func didReceiveMemoryWarning() { 40 | super.didReceiveMemoryWarning() 41 | // Dispose of any resources that can be recreated. 42 | } 43 | 44 | override func viewWillLayoutSubviews() { 45 | super.viewWillLayoutSubviews() 46 | /* Layout subviews manually */ 47 | self.movieView.frame = self.view.frame 48 | } 49 | 50 | func timechangedLoadStateDidChange() { 51 | 52 | /* The Total duration of the video player */ 53 | guard let grandtotal = self.vlcMediaPlayer.media.length.value else { 54 | return 55 | } 56 | /* The current state of the video player */ 57 | guard let guardcurrent = vlcMediaPlayer.time.value else { 58 | return 59 | } 60 | let total = Float(grandtotal) / 100 61 | let current = Float(guardcurrent) / 100 62 | overlayVC.didTapedSwitch(total, currentDuration:current) 63 | } 64 | 65 | // MARK: - PlayerOverlayVC initialization 66 | func addOverlayView() { 67 | overlayVC = self.storyboard?.instantiateViewController(withIdentifier: "AVPlayerOverlayVC") as! PlayerOverlayVC 68 | self.addChild(overlayVC) 69 | self.view.addSubview(overlayVC.view) 70 | overlayVC.deleget = self 71 | overlayVC.didMove(toParent: self) 72 | } 73 | 74 | // MARK: - MovieeView initializatio 75 | func addMovieView() { 76 | self.movieView = UIView() 77 | self.movieView.backgroundColor = UIColor.gray 78 | self.movieView.frame = UIScreen.screens[0].bounds 79 | } 80 | 81 | // MARK: - VlcMediaPlayer initializatio 82 | func setupVLCPalyer() { 83 | vlcMediaPlayer.delegate = self 84 | vlcMediaPlayer.drawable = self.movieView 85 | vlcMediaPlayer.media = VLCMedia(url:self.url) 86 | self.view.addSubview(self.movieView) 87 | } 88 | } 89 | 90 | // MARK: - PlayerOverlayVCDelegate 91 | 92 | extension VLCViewController :PlayerOverlayVCDelegate { 93 | 94 | func didPlayButtonSelected(_ isplayorPouse : Bool!){ 95 | if (vlcMediaPlayer.time.intValue != 0) { 96 | if isplayorPouse == true { 97 | vlcMediaPlayer.play() // Start the playback 98 | } 99 | else { 100 | vlcMediaPlayer.pause() // Pauser the playback 101 | } 102 | } 103 | } 104 | 105 | 106 | func didVideoSliderSliderValueChanged(_ currrentDuration :Double!){ 107 | 108 | let range = Float(self.vlcMediaPlayer.media.length.value)/100 109 | let perCent = (Float(currrentDuration) / range) 110 | self.vlcMediaPlayer.position = Float (perCent) 111 | 112 | } 113 | } 114 | -------------------------------------------------------------------------------- /DemoPlayer/Controllers/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ChooseOptionViewController.swift 3 | // DemoPlayer 4 | // 5 | // Created by Chandan Singh on 10/8/16. 6 | // Copyright © 2016 Chandan Singh. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | 12 | class ViewController: UITableViewController { 13 | 14 | var playerListArray = PlayerListData().getPlayerList() 15 | 16 | override func viewDidLoad(){ 17 | super.viewDidLoad() 18 | /* Remove extra separators */ 19 | tableView.tableFooterView = UIView() 20 | } 21 | 22 | override func didReceiveMemoryWarning() { 23 | super.didReceiveMemoryWarning() 24 | // Dispose of any resources that can be recreated. 25 | } 26 | 27 | // MARK: - Table view data source 28 | override func numberOfSections(in tableView: UITableView) -> Int { 29 | return 1 30 | } 31 | 32 | override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int{ 33 | return playerListArray.count 34 | } 35 | 36 | 37 | override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 38 | let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier", for: indexPath) 39 | let playList = playerListArray[indexPath.row] 40 | cell.textLabel?.text = playList.name 41 | return cell 42 | } 43 | 44 | // MARK: - Table view deleget 45 | override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){ 46 | self.performSegue(withIdentifier: "choseController", sender:indexPath) 47 | } 48 | 49 | // In a storyboard-based application, you will often want to do a little preparation before navigation 50 | override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 51 | // Pass the selected object to the new view controller 52 | if segue.identifier == "choseController"{ 53 | let indexPath = sender as! IndexPath 54 | let playList = playerListArray[indexPath.row] 55 | let targetController = segue.destination as! ChoseTableViewController 56 | targetController.selectPlayer = playList.identifier 57 | } 58 | } 59 | } 60 | 61 | 62 | 63 | 64 | 65 | -------------------------------------------------------------------------------- /DemoPlayer/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | NSAppTransportSecurity 26 | 27 | NSAllowsArbitraryLoads 28 | 29 | 30 | UILaunchStoryboardName 31 | LaunchScreen 32 | UIMainStoryboardFile 33 | Main 34 | UIRequiredDeviceCapabilities 35 | 36 | armv7 37 | 38 | UISupportedInterfaceOrientations 39 | 40 | UIInterfaceOrientationPortrait 41 | UIInterfaceOrientationLandscapeLeft 42 | UIInterfaceOrientationLandscapeRight 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /DemoPlayer/View/PlayerOverlayVC.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AVPlayerOverlayVC.swift 3 | // DemoPlayer 4 | // 5 | // Created by Chandan Singh on 10/6/16. 6 | // Copyright © 2016 Chandan Singh. All rights reserved. 7 | // 8 | 9 | import AVFoundation 10 | import MediaPlayer; 11 | import AVKit 12 | 13 | protocol PlayerOverlayVCDelegate{ 14 | 15 | func didVideoSliderSliderValueChanged(_ totalDuration :Double!) 16 | func didPlayButtonSelected(_ isplayorPouse : Bool!) 17 | } 18 | 19 | class PlayerOverlayVC: UIViewController { 20 | 21 | @IBOutlet weak var mpView: MPVolumeView! 22 | @IBOutlet weak var activityIndicator: UIActivityIndicatorView! 23 | @IBOutlet weak var playerBarView: UIView! 24 | @IBOutlet weak var playButton:UIButton! 25 | @IBOutlet weak var playBigButton:UIButton! 26 | @IBOutlet weak var volumeButton:UIButton! 27 | @IBOutlet weak var videoSlider:UISlider! 28 | @IBOutlet weak var volumeSlider:UISlider! 29 | @IBOutlet weak var playerBarViewHightContraint: NSLayoutConstraint! 30 | @IBOutlet weak var remainingDurationLabel: UILabel! 31 | @IBOutlet weak var currentDurationlLabel: UILabel! 32 | 33 | var playBarAutoideInterval : TimeInterval! 34 | var isVideoSliderMoving: Bool! = true 35 | var isVideoSliderComplete: Bool! = true 36 | var volume:MPVolumeView! 37 | var mpSlider:UISlider! 38 | var deleget : PlayerOverlayVCDelegate! 39 | 40 | var isFullScreen:Bool { 41 | get { 42 | return UIApplication.shared.statusBarOrientation.isLandscape 43 | } 44 | } 45 | 46 | required init?(coder aDecoder: NSCoder) { 47 | super.init(coder: aDecoder) 48 | self.playBarAutoideInterval = 5.0 49 | } 50 | 51 | override func viewDidLoad() { 52 | super.viewDidLoad() 53 | 54 | isVideoSliderMoving = true 55 | self.volumeSlider.isHidden = true 56 | self.playBigButton.isHidden = true 57 | 58 | self.activityIndicator.startAnimating() 59 | self.view.layoutIfNeeded() 60 | 61 | /* VloumeSlider transform into 90 degree */ 62 | self.volumeSlider.transform = CGAffineTransform(rotationAngle: CGFloat(-M_PI_2)) 63 | self.volumeSlider.value = AVAudioSession.sharedInstance().outputVolume 64 | 65 | /* Tap gesture */ 66 | let tap = UITapGestureRecognizer(target: self, action: #selector(self.didTapGesture)) 67 | self.view.addGestureRecognizer(tap) 68 | 69 | self.hidePlayerBar() 70 | self.setUpAudoBackground() 71 | self.systemVolume() 72 | 73 | } 74 | 75 | // MARK: - Actions 76 | @IBAction func btnVolumeButtonSelected(_ sender: AnyObject) { 77 | if volumeSlider.isHidden { 78 | UIView.animate(withDuration: 0.25, animations: {() -> Void in 79 | self.volumeSlider.isHidden = false // Show Volume Slider 80 | }) 81 | } 82 | else { 83 | UIView.animate(withDuration: 0.25, animations: {() -> Void in 84 | self.volumeSlider.isHidden = true // Hide Volume Slider 85 | }) 86 | } 87 | self.autoHidePlayerBar() 88 | } 89 | 90 | @IBAction func btnFullscreenButtonSelected(_ sender: AnyObject) { 91 | 92 | if isFullScreen { 93 | 94 | /* Change Portrait Orientaion */ 95 | UIDevice.current.setValue(UIInterfaceOrientation.portrait.rawValue, forKey: "orientation") 96 | UIApplication.shared.setStatusBarHidden(false, with: UIStatusBarAnimation.fade) 97 | UIApplication.shared.setStatusBarOrientation(UIInterfaceOrientation.portrait, animated: false) 98 | } else { 99 | 100 | /* Change LandscapeRight Orientaion */ 101 | 102 | UIDevice.current.setValue(UIInterfaceOrientation.landscapeRight.rawValue, forKey: "orientation") 103 | UIApplication.shared.setStatusBarHidden(false, with: UIStatusBarAnimation.fade) 104 | UIApplication.shared.setStatusBarOrientation(UIInterfaceOrientation.landscapeRight, animated: false) 105 | } 106 | } 107 | 108 | @IBAction func btnRestartButtonSelected(_ sender: AnyObject) { 109 | 110 | /* Reset Video With Update OverlayView */ 111 | isVideoSliderMoving = false 112 | isVideoSliderComplete = true 113 | self.deleget.didVideoSliderSliderValueChanged(0.1) 114 | UIView.animate(withDuration: 0.25, animations: { 115 | /* Hide PlayBigbutton On ReStrat */ 116 | self.playBigButton.isHidden = true 117 | }) 118 | self.currentDurationlLabel.text = self.remainingDurationLabel.text 119 | self.remainingDurationLabel.text = NSString(format: "%.2f",00.00) as String 120 | self.videoSlider.value = 0.0 121 | self.btnPlayButtonSelected(false as AnyObject) 122 | } 123 | 124 | @IBAction func btnPlayButtonSelected(_ sender: AnyObject) { 125 | 126 | if (isVideoSliderMoving == true && isVideoSliderComplete == true ) { 127 | /* Pause */ 128 | self.playButton.isSelected = true 129 | isVideoSliderMoving = false 130 | deleget.didPlayButtonSelected(isVideoSliderMoving) 131 | }else if (isVideoSliderMoving == false && isVideoSliderComplete == true ){ 132 | /* Play */ 133 | self.playButton.isSelected = false 134 | isVideoSliderMoving = true 135 | deleget.didPlayButtonSelected(isVideoSliderMoving) 136 | } 137 | self.autoHidePlayerBar() 138 | } 139 | 140 | // MARK: - Stop VideoSlider 141 | @IBAction func didVideoSliderTouchDown(_ sender: AnyObject) { 142 | self.isVideoSliderMoving = false; 143 | } 144 | 145 | @IBAction func didVideoSliderTouchUp(_ sender: AnyObject) { 146 | if (isVideoSliderMoving == false) { 147 | isVideoSliderComplete = true 148 | /** The current duration of the VideoSlider */ 149 | let timeStart = Double((sender as! UISlider).value) // 150 | self.deleget.didVideoSliderSliderValueChanged(timeStart) 151 | } 152 | isVideoSliderMoving = true 153 | self.autoHidePlayerBar() 154 | } 155 | 156 | // Mark: - VolumeSlider 157 | @IBAction func didVolumeSliderValueChanged(_ sender: AnyObject) { 158 | self.playBigButton.isHidden = true 159 | self.mpSlider.value = (sender as! UISlider).value 160 | self.mpSlider.sendActions(for: .touchUpInside) 161 | self.autoHidePlayerBar() 162 | } 163 | 164 | 165 | // Mark: - SystemVolume initialization 166 | func systemVolume(){ 167 | self.volume = MPVolumeView(frame: mpView.bounds) 168 | self.volume.showsRouteButton = true 169 | self.volume.showsVolumeSlider = false 170 | self.mpView.addSubview(self.volume) 171 | for view: AnyObject in volume!.subviews { 172 | if (view is UISlider) { 173 | self.mpSlider = view as! UISlider 174 | } 175 | } 176 | } 177 | 178 | // Mark: - TapOnVideoSlider 179 | func didTapedSwitch(_ totalDuration :Float!,currentDuration:Float!){ 180 | 181 | if isVideoSliderMoving == true { 182 | var remaingDruation = totalDuration - currentDuration 183 | if remaingDruation <= 0 { 184 | /* show Restart Button After complete Slider */ 185 | isVideoSliderMoving = false 186 | isVideoSliderComplete = false 187 | playBigButton.isHidden = false 188 | remaingDruation = 00.00 189 | } 190 | self.currentDurationlLabel.text = NSString(format: "%.2f",currentDuration) as String 191 | self.remainingDurationLabel.text = NSString(format: "%.2f",remaingDruation) as String 192 | self.videoSlider.maximumValue = totalDuration 193 | self.videoSlider.value = currentDuration 194 | self.activityIndicator.stopAnimating() 195 | self.activityIndicator.isHidden = true 196 | } 197 | } 198 | 199 | 200 | // Mark: - Setup Audio/Video in 201 | func setUpAudoBackground() { 202 | let audioSession = AVAudioSession.sharedInstance() 203 | do 204 | { 205 | try audioSession.setCategory(.playback, mode: .default) 206 | try audioSession.setActive(true) 207 | 208 | } 209 | catch let e 210 | { 211 | debugPrint("failed to initialize audio session: \(e)") 212 | } 213 | } 214 | 215 | // Mark: - Add\Remove PerformSelector 216 | func autoHidePlayerBar(){ 217 | NSObject.cancelPreviousPerformRequests(withTarget: self, selector: #selector(self.hidePlayerBar), object: nil) // Cancel privious Request 218 | self.perform(#selector(self.hidePlayerBar), with: nil, afterDelay: playBarAutoideInterval!) // Add New Request 219 | } 220 | 221 | 222 | // Mark: - Hide PlayBarView 223 | @objc func hidePlayerBar() { 224 | UIView.animate(withDuration: 0.5, animations: { 225 | self.playerBarViewHightContraint.constant = 0 226 | self.volumeSlider.isHidden = true 227 | self.playerBarView.isHidden = true 228 | 229 | }) 230 | } 231 | 232 | // Mark: - Show PlayBarView 233 | func showPlayerBar() { 234 | // self.playBigButton.hidden = false 235 | self.playerBarView.isHidden = false 236 | UIView.animate(withDuration: 0.5, animations: { 237 | self.playerBarViewHightContraint.constant = 50 238 | }) 239 | } 240 | 241 | // Mark: - TapGesture 242 | @objc func didTapGesture(_ sender: AnyObject) { 243 | if playerBarView.isHidden { 244 | self.showPlayerBar() 245 | }else{ 246 | self.hidePlayerBar() 247 | } 248 | } 249 | } 250 | -------------------------------------------------------------------------------- /DemoPlayer/trailer_720p.mov: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/chandansingh5/CSVideoPlayer/870c584bd51ebb2fa14716baf833b964625c7f8e/DemoPlayer/trailer_720p.mov -------------------------------------------------------------------------------- /DemoPlayerTests/DemoPlayerTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DemoPlayerTests.swift 3 | // DemoPlayerTests 4 | // 5 | // Created by Chandan Singh on 10/6/16. 6 | // Copyright © 2016 Chandan Singh. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | @testable import DemoPlayer 11 | 12 | class DemoPlayerTests: XCTestCase { 13 | 14 | override func setUp() { 15 | super.setUp() 16 | // Put setup code here. This method is called before the invocation of each test method in the class. 17 | } 18 | 19 | override func tearDown() { 20 | // Put teardown code here. This method is called after the invocation of each test method in the class. 21 | super.tearDown() 22 | } 23 | 24 | func testExample() { 25 | // This is an example of a functional test case. 26 | // Use XCTAssert and related functions to verify your tests produce the correct results. 27 | } 28 | 29 | func testPerformanceExample() { 30 | // This is an example of a performance test case. 31 | self.measure { 32 | // Put the code you want to measure the time of here. 33 | } 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /DemoPlayerTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /DemoPlayerUITests/DemoPlayerUITests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DemoPlayerUITests.swift 3 | // DemoPlayerUITests 4 | // 5 | // Created by Chandan Singh on 10/6/16. 6 | // Copyright © 2016 Chandan Singh. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | 11 | class DemoPlayerUITests: XCTestCase { 12 | 13 | override func setUp() { 14 | super.setUp() 15 | 16 | // Put setup code here. This method is called before the invocation of each test method in the class. 17 | 18 | // In UI tests it is usually best to stop immediately when a failure occurs. 19 | continueAfterFailure = false 20 | // UI tests must launch the application that they test. Doing this in setup will make sure it happens for each test method. 21 | XCUIApplication().launch() 22 | 23 | // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. 24 | } 25 | 26 | override func tearDown() { 27 | // Put teardown code here. This method is called after the invocation of each test method in the class. 28 | super.tearDown() 29 | } 30 | 31 | func testExample() { 32 | // Use recording to get started writing UI tests. 33 | // Use XCTAssert and related functions to verify your tests produce the correct results. 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /DemoPlayerUITests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Chandan Singh 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Podfile: -------------------------------------------------------------------------------- 1 | source 'https://github.com/CocoaPods/Specs.git' 2 | platform :ios, '10.0' 3 | use_frameworks! 4 | 5 | target ‘DemoPlayer’ do 6 | pod 'MobileVLCKit' 7 | end 8 | 9 | -------------------------------------------------------------------------------- /Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - MobileVLCKit (3.3.9) 3 | 4 | DEPENDENCIES: 5 | - MobileVLCKit 6 | 7 | SPEC REPOS: 8 | https://github.com/CocoaPods/Specs.git: 9 | - MobileVLCKit 10 | 11 | SPEC CHECKSUMS: 12 | MobileVLCKit: cf10c4a138d89f3843b6290f94823609b34215a1 13 | 14 | PODFILE CHECKSUM: 58e404f84a26529331c21379b2d89f8a27d19370 15 | 16 | COCOAPODS: 1.8.1 17 | -------------------------------------------------------------------------------- /Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - MobileVLCKit (3.3.9) 3 | 4 | DEPENDENCIES: 5 | - MobileVLCKit 6 | 7 | SPEC REPOS: 8 | https://github.com/CocoaPods/Specs.git: 9 | - MobileVLCKit 10 | 11 | SPEC CHECKSUMS: 12 | MobileVLCKit: cf10c4a138d89f3843b6290f94823609b34215a1 13 | 14 | PODFILE CHECKSUM: 58e404f84a26529331c21379b2d89f8a27d19370 15 | 16 | COCOAPODS: 1.8.1 17 | -------------------------------------------------------------------------------- /Pods/Pods.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXAggregateTarget section */ 10 | DD6DBFB0950D5ACA7BBB5F25E1C1A342 /* MobileVLCKit */ = { 11 | isa = PBXAggregateTarget; 12 | buildConfigurationList = 1F5605C76E377A68DE52E25A53DF5480 /* Build configuration list for PBXAggregateTarget "MobileVLCKit" */; 13 | buildPhases = ( 14 | ); 15 | dependencies = ( 16 | ); 17 | name = MobileVLCKit; 18 | }; 19 | /* End PBXAggregateTarget section */ 20 | 21 | /* Begin PBXBuildFile section */ 22 | 42743C87C8F6CA447669145D6A323F1A /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3212113385A8FBBDB272BD23C409FF61 /* Foundation.framework */; }; 23 | 702465FCAE1F3EF7379134FD1CFEF09A /* Pods-DemoPlayer-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 8F956F81BA7FCD3F1134C8B523CA8739 /* Pods-DemoPlayer-dummy.m */; }; 24 | A8735A5CCF97C80465B4E6878019197B /* Pods-DemoPlayer-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 10CAD2FBB2C2C8FB7536D3F867271835 /* Pods-DemoPlayer-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 25 | /* End PBXBuildFile section */ 26 | 27 | /* Begin PBXContainerItemProxy section */ 28 | 7914C14BBF419D916449959E097E391A /* PBXContainerItemProxy */ = { 29 | isa = PBXContainerItemProxy; 30 | containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; 31 | proxyType = 1; 32 | remoteGlobalIDString = DD6DBFB0950D5ACA7BBB5F25E1C1A342; 33 | remoteInfo = MobileVLCKit; 34 | }; 35 | /* End PBXContainerItemProxy section */ 36 | 37 | /* Begin PBXFileReference section */ 38 | 0D55D396ED5E631DE6D2F18204704499 /* Pods-DemoPlayer-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-DemoPlayer-Info.plist"; sourceTree = ""; }; 39 | 0E1BDED911BAE6BC6437D4BAD90DE838 /* VLCRendererDiscoverer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VLCRendererDiscoverer.h; path = MobileVLCKit.framework/Headers/VLCRendererDiscoverer.h; sourceTree = ""; }; 40 | 10CAD2FBB2C2C8FB7536D3F867271835 /* Pods-DemoPlayer-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-DemoPlayer-umbrella.h"; sourceTree = ""; }; 41 | 116530E9FCD1D5C9ABE4C916F0F84AED /* VLCMediaListPlayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VLCMediaListPlayer.h; path = MobileVLCKit.framework/Headers/VLCMediaListPlayer.h; sourceTree = ""; }; 42 | 1ADA47F9137DCCC31EFB599EC760EBFC /* Pods_DemoPlayer.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_DemoPlayer.framework; path = "Pods-DemoPlayer.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; 43 | 27C7D5B9C54B062849FA5A5D04EAF3FC /* VLCDialogProvider.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VLCDialogProvider.h; path = MobileVLCKit.framework/Headers/VLCDialogProvider.h; sourceTree = ""; }; 44 | 3212113385A8FBBDB272BD23C409FF61 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; 45 | 370B1B2DB1F7F5CD5220187C1C487CB4 /* VLCMediaThumbnailer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VLCMediaThumbnailer.h; path = MobileVLCKit.framework/Headers/VLCMediaThumbnailer.h; sourceTree = ""; }; 46 | 39059C5F8A242119E56BBDDA904DF2AA /* Pods-DemoPlayer.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-DemoPlayer.modulemap"; sourceTree = ""; }; 47 | 3D7D85E21015B5726DB0F507A64A3C46 /* Pods-DemoPlayer.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-DemoPlayer.release.xcconfig"; sourceTree = ""; }; 48 | 6986B9AD93B98ECA82619DFBAEFEBFF6 /* Pods-DemoPlayer.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-DemoPlayer.debug.xcconfig"; sourceTree = ""; }; 49 | 78D467F37CA6D0AA6FA6AFE68EBEB6EF /* MobileVLCKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = MobileVLCKit.framework; sourceTree = ""; }; 50 | 7A1DF9F2BBC0C579BF95B24F5802802E /* VLCMediaList.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VLCMediaList.h; path = MobileVLCKit.framework/Headers/VLCMediaList.h; sourceTree = ""; }; 51 | 80C0588E4CB39FB5CEFFEF1CF739CCC8 /* VLCTranscoder.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VLCTranscoder.h; path = MobileVLCKit.framework/Headers/VLCTranscoder.h; sourceTree = ""; }; 52 | 8F956F81BA7FCD3F1134C8B523CA8739 /* Pods-DemoPlayer-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-DemoPlayer-dummy.m"; sourceTree = ""; }; 53 | 9BCE7A6EAF45EC644BC3B63598139622 /* VLCMediaDiscoverer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VLCMediaDiscoverer.h; path = MobileVLCKit.framework/Headers/VLCMediaDiscoverer.h; sourceTree = ""; }; 54 | 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 55 | 9FB40237EA766AF769C646A24E5307F2 /* VLCMedia.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VLCMedia.h; path = MobileVLCKit.framework/Headers/VLCMedia.h; sourceTree = ""; }; 56 | C4D91D753B70FE40682A9302034016D7 /* VLCMediaPlayer.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VLCMediaPlayer.h; path = MobileVLCKit.framework/Headers/VLCMediaPlayer.h; sourceTree = ""; }; 57 | CD863A43908904CD667FB643C3B96AD6 /* VLCRendererItem.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VLCRendererItem.h; path = MobileVLCKit.framework/Headers/VLCRendererItem.h; sourceTree = ""; }; 58 | E2D00D460A76966603005AA944497046 /* VLCAudio.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VLCAudio.h; path = MobileVLCKit.framework/Headers/VLCAudio.h; sourceTree = ""; }; 59 | E46A1D1B4D33DC3176B63F7042895356 /* VLCTime.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VLCTime.h; path = MobileVLCKit.framework/Headers/VLCTime.h; sourceTree = ""; }; 60 | E654D7F04DC28432D96612155232E6DE /* Pods-DemoPlayer-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-DemoPlayer-acknowledgements.markdown"; sourceTree = ""; }; 61 | E81BE69D44C27550186E13120FFB165C /* MobileVLCKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = MobileVLCKit.h; path = MobileVLCKit.framework/Headers/MobileVLCKit.h; sourceTree = ""; }; 62 | EC75D750D42AE6958A0DACDA9495ACDB /* Pods-DemoPlayer-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-DemoPlayer-acknowledgements.plist"; sourceTree = ""; }; 63 | F5E85580B80E2510B3163BF5C5473477 /* VLCLibrary.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = VLCLibrary.h; path = MobileVLCKit.framework/Headers/VLCLibrary.h; sourceTree = ""; }; 64 | F6053164DC9D9C353DC50C33C5B48D88 /* MobileVLCKit.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = MobileVLCKit.xcconfig; sourceTree = ""; }; 65 | /* End PBXFileReference section */ 66 | 67 | /* Begin PBXFrameworksBuildPhase section */ 68 | 6F7801F6565044F3878023BE725AF44B /* Frameworks */ = { 69 | isa = PBXFrameworksBuildPhase; 70 | buildActionMask = 2147483647; 71 | files = ( 72 | 42743C87C8F6CA447669145D6A323F1A /* Foundation.framework in Frameworks */, 73 | ); 74 | runOnlyForDeploymentPostprocessing = 0; 75 | }; 76 | /* End PBXFrameworksBuildPhase section */ 77 | 78 | /* Begin PBXGroup section */ 79 | 16B2AF867DC516C171A1D433171F7CB8 /* MobileVLCKit */ = { 80 | isa = PBXGroup; 81 | children = ( 82 | E81BE69D44C27550186E13120FFB165C /* MobileVLCKit.h */, 83 | E2D00D460A76966603005AA944497046 /* VLCAudio.h */, 84 | 27C7D5B9C54B062849FA5A5D04EAF3FC /* VLCDialogProvider.h */, 85 | F5E85580B80E2510B3163BF5C5473477 /* VLCLibrary.h */, 86 | 9FB40237EA766AF769C646A24E5307F2 /* VLCMedia.h */, 87 | 9BCE7A6EAF45EC644BC3B63598139622 /* VLCMediaDiscoverer.h */, 88 | 7A1DF9F2BBC0C579BF95B24F5802802E /* VLCMediaList.h */, 89 | 116530E9FCD1D5C9ABE4C916F0F84AED /* VLCMediaListPlayer.h */, 90 | C4D91D753B70FE40682A9302034016D7 /* VLCMediaPlayer.h */, 91 | 370B1B2DB1F7F5CD5220187C1C487CB4 /* VLCMediaThumbnailer.h */, 92 | 0E1BDED911BAE6BC6437D4BAD90DE838 /* VLCRendererDiscoverer.h */, 93 | CD863A43908904CD667FB643C3B96AD6 /* VLCRendererItem.h */, 94 | E46A1D1B4D33DC3176B63F7042895356 /* VLCTime.h */, 95 | 80C0588E4CB39FB5CEFFEF1CF739CCC8 /* VLCTranscoder.h */, 96 | 399041B9F37BC6BE03FED0D3D9619B3F /* Frameworks */, 97 | 70AC1AAE9A1677884F74C2FB19043D34 /* Support Files */, 98 | ); 99 | name = MobileVLCKit; 100 | path = MobileVLCKit; 101 | sourceTree = ""; 102 | }; 103 | 399041B9F37BC6BE03FED0D3D9619B3F /* Frameworks */ = { 104 | isa = PBXGroup; 105 | children = ( 106 | 78D467F37CA6D0AA6FA6AFE68EBEB6EF /* MobileVLCKit.framework */, 107 | ); 108 | name = Frameworks; 109 | sourceTree = ""; 110 | }; 111 | 70AC1AAE9A1677884F74C2FB19043D34 /* Support Files */ = { 112 | isa = PBXGroup; 113 | children = ( 114 | F6053164DC9D9C353DC50C33C5B48D88 /* MobileVLCKit.xcconfig */, 115 | ); 116 | name = "Support Files"; 117 | path = "../Target Support Files/MobileVLCKit"; 118 | sourceTree = ""; 119 | }; 120 | 7FA5E144D81C771C9F635ADD1E07E092 /* Products */ = { 121 | isa = PBXGroup; 122 | children = ( 123 | 1ADA47F9137DCCC31EFB599EC760EBFC /* Pods_DemoPlayer.framework */, 124 | ); 125 | name = Products; 126 | sourceTree = ""; 127 | }; 128 | 99FC32FAD7C0E416362FDE93D8E039F5 /* Targets Support Files */ = { 129 | isa = PBXGroup; 130 | children = ( 131 | ABB363C7D27A4C19CBF2F03A20789787 /* Pods-DemoPlayer */, 132 | ); 133 | name = "Targets Support Files"; 134 | sourceTree = ""; 135 | }; 136 | ABB363C7D27A4C19CBF2F03A20789787 /* Pods-DemoPlayer */ = { 137 | isa = PBXGroup; 138 | children = ( 139 | 39059C5F8A242119E56BBDDA904DF2AA /* Pods-DemoPlayer.modulemap */, 140 | E654D7F04DC28432D96612155232E6DE /* Pods-DemoPlayer-acknowledgements.markdown */, 141 | EC75D750D42AE6958A0DACDA9495ACDB /* Pods-DemoPlayer-acknowledgements.plist */, 142 | 8F956F81BA7FCD3F1134C8B523CA8739 /* Pods-DemoPlayer-dummy.m */, 143 | 0D55D396ED5E631DE6D2F18204704499 /* Pods-DemoPlayer-Info.plist */, 144 | 10CAD2FBB2C2C8FB7536D3F867271835 /* Pods-DemoPlayer-umbrella.h */, 145 | 6986B9AD93B98ECA82619DFBAEFEBFF6 /* Pods-DemoPlayer.debug.xcconfig */, 146 | 3D7D85E21015B5726DB0F507A64A3C46 /* Pods-DemoPlayer.release.xcconfig */, 147 | ); 148 | name = "Pods-DemoPlayer"; 149 | path = "Target Support Files/Pods-DemoPlayer"; 150 | sourceTree = ""; 151 | }; 152 | C0834CEBB1379A84116EF29F93051C60 /* iOS */ = { 153 | isa = PBXGroup; 154 | children = ( 155 | 3212113385A8FBBDB272BD23C409FF61 /* Foundation.framework */, 156 | ); 157 | name = iOS; 158 | sourceTree = ""; 159 | }; 160 | CF1408CF629C7361332E53B88F7BD30C = { 161 | isa = PBXGroup; 162 | children = ( 163 | 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, 164 | D210D550F4EA176C3123ED886F8F87F5 /* Frameworks */, 165 | F7E31DC2ED372B8CB69B79D357245730 /* Pods */, 166 | 7FA5E144D81C771C9F635ADD1E07E092 /* Products */, 167 | 99FC32FAD7C0E416362FDE93D8E039F5 /* Targets Support Files */, 168 | ); 169 | sourceTree = ""; 170 | }; 171 | D210D550F4EA176C3123ED886F8F87F5 /* Frameworks */ = { 172 | isa = PBXGroup; 173 | children = ( 174 | C0834CEBB1379A84116EF29F93051C60 /* iOS */, 175 | ); 176 | name = Frameworks; 177 | sourceTree = ""; 178 | }; 179 | F7E31DC2ED372B8CB69B79D357245730 /* Pods */ = { 180 | isa = PBXGroup; 181 | children = ( 182 | 16B2AF867DC516C171A1D433171F7CB8 /* MobileVLCKit */, 183 | ); 184 | name = Pods; 185 | sourceTree = ""; 186 | }; 187 | /* End PBXGroup section */ 188 | 189 | /* Begin PBXHeadersBuildPhase section */ 190 | AFB1E0FDAE750DEC272F4786E6BEEB82 /* Headers */ = { 191 | isa = PBXHeadersBuildPhase; 192 | buildActionMask = 2147483647; 193 | files = ( 194 | A8735A5CCF97C80465B4E6878019197B /* Pods-DemoPlayer-umbrella.h in Headers */, 195 | ); 196 | runOnlyForDeploymentPostprocessing = 0; 197 | }; 198 | /* End PBXHeadersBuildPhase section */ 199 | 200 | /* Begin PBXNativeTarget section */ 201 | 228369CD0676EB7DAE59A24980A0A941 /* Pods-DemoPlayer */ = { 202 | isa = PBXNativeTarget; 203 | buildConfigurationList = 16EDD5E316845D7EFD3B69B8649BB39B /* Build configuration list for PBXNativeTarget "Pods-DemoPlayer" */; 204 | buildPhases = ( 205 | AFB1E0FDAE750DEC272F4786E6BEEB82 /* Headers */, 206 | 07AE3F5340C39DE4CD90C5DD22BCBE14 /* Sources */, 207 | 6F7801F6565044F3878023BE725AF44B /* Frameworks */, 208 | 139D9C62739D9262FD074C1EAD70F6B0 /* Resources */, 209 | ); 210 | buildRules = ( 211 | ); 212 | dependencies = ( 213 | D7EAAAD19BC39F790D62D75CF29F1A16 /* PBXTargetDependency */, 214 | ); 215 | name = "Pods-DemoPlayer"; 216 | productName = "Pods-DemoPlayer"; 217 | productReference = 1ADA47F9137DCCC31EFB599EC760EBFC /* Pods_DemoPlayer.framework */; 218 | productType = "com.apple.product-type.framework"; 219 | }; 220 | /* End PBXNativeTarget section */ 221 | 222 | /* Begin PBXProject section */ 223 | BFDFE7DC352907FC980B868725387E98 /* Project object */ = { 224 | isa = PBXProject; 225 | attributes = { 226 | LastSwiftUpdateCheck = 1100; 227 | LastUpgradeCheck = 1100; 228 | }; 229 | buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */; 230 | compatibilityVersion = "Xcode 3.2"; 231 | developmentRegion = en; 232 | hasScannedForEncodings = 0; 233 | knownRegions = ( 234 | en, 235 | ); 236 | mainGroup = CF1408CF629C7361332E53B88F7BD30C; 237 | productRefGroup = 7FA5E144D81C771C9F635ADD1E07E092 /* Products */; 238 | projectDirPath = ""; 239 | projectRoot = ""; 240 | targets = ( 241 | DD6DBFB0950D5ACA7BBB5F25E1C1A342 /* MobileVLCKit */, 242 | 228369CD0676EB7DAE59A24980A0A941 /* Pods-DemoPlayer */, 243 | ); 244 | }; 245 | /* End PBXProject section */ 246 | 247 | /* Begin PBXResourcesBuildPhase section */ 248 | 139D9C62739D9262FD074C1EAD70F6B0 /* Resources */ = { 249 | isa = PBXResourcesBuildPhase; 250 | buildActionMask = 2147483647; 251 | files = ( 252 | ); 253 | runOnlyForDeploymentPostprocessing = 0; 254 | }; 255 | /* End PBXResourcesBuildPhase section */ 256 | 257 | /* Begin PBXSourcesBuildPhase section */ 258 | 07AE3F5340C39DE4CD90C5DD22BCBE14 /* Sources */ = { 259 | isa = PBXSourcesBuildPhase; 260 | buildActionMask = 2147483647; 261 | files = ( 262 | 702465FCAE1F3EF7379134FD1CFEF09A /* Pods-DemoPlayer-dummy.m in Sources */, 263 | ); 264 | runOnlyForDeploymentPostprocessing = 0; 265 | }; 266 | /* End PBXSourcesBuildPhase section */ 267 | 268 | /* Begin PBXTargetDependency section */ 269 | D7EAAAD19BC39F790D62D75CF29F1A16 /* PBXTargetDependency */ = { 270 | isa = PBXTargetDependency; 271 | name = MobileVLCKit; 272 | target = DD6DBFB0950D5ACA7BBB5F25E1C1A342 /* MobileVLCKit */; 273 | targetProxy = 7914C14BBF419D916449959E097E391A /* PBXContainerItemProxy */; 274 | }; 275 | /* End PBXTargetDependency section */ 276 | 277 | /* Begin XCBuildConfiguration section */ 278 | 196DFA3E4A09A28224918543529A1885 /* Debug */ = { 279 | isa = XCBuildConfiguration; 280 | buildSettings = { 281 | ALWAYS_SEARCH_USER_PATHS = NO; 282 | CLANG_ANALYZER_NONNULL = YES; 283 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 284 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 285 | CLANG_CXX_LIBRARY = "libc++"; 286 | CLANG_ENABLE_MODULES = YES; 287 | CLANG_ENABLE_OBJC_ARC = YES; 288 | CLANG_ENABLE_OBJC_WEAK = YES; 289 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 290 | CLANG_WARN_BOOL_CONVERSION = YES; 291 | CLANG_WARN_COMMA = YES; 292 | CLANG_WARN_CONSTANT_CONVERSION = YES; 293 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 294 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 295 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 296 | CLANG_WARN_EMPTY_BODY = YES; 297 | CLANG_WARN_ENUM_CONVERSION = YES; 298 | CLANG_WARN_INFINITE_RECURSION = YES; 299 | CLANG_WARN_INT_CONVERSION = YES; 300 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 301 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 302 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 303 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 304 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 305 | CLANG_WARN_STRICT_PROTOTYPES = YES; 306 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 307 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 308 | CLANG_WARN_UNREACHABLE_CODE = YES; 309 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 310 | COPY_PHASE_STRIP = NO; 311 | DEBUG_INFORMATION_FORMAT = dwarf; 312 | ENABLE_STRICT_OBJC_MSGSEND = YES; 313 | ENABLE_TESTABILITY = YES; 314 | GCC_C_LANGUAGE_STANDARD = gnu11; 315 | GCC_DYNAMIC_NO_PIC = NO; 316 | GCC_NO_COMMON_BLOCKS = YES; 317 | GCC_OPTIMIZATION_LEVEL = 0; 318 | GCC_PREPROCESSOR_DEFINITIONS = ( 319 | "POD_CONFIGURATION_DEBUG=1", 320 | "DEBUG=1", 321 | "$(inherited)", 322 | ); 323 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 324 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 325 | GCC_WARN_UNDECLARED_SELECTOR = YES; 326 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 327 | GCC_WARN_UNUSED_FUNCTION = YES; 328 | GCC_WARN_UNUSED_VARIABLE = YES; 329 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 330 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 331 | MTL_FAST_MATH = YES; 332 | ONLY_ACTIVE_ARCH = YES; 333 | PRODUCT_NAME = "$(TARGET_NAME)"; 334 | STRIP_INSTALLED_PRODUCT = NO; 335 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 336 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 337 | SWIFT_VERSION = 5.0; 338 | SYMROOT = "${SRCROOT}/../build"; 339 | }; 340 | name = Debug; 341 | }; 342 | 487644A6C97280F1CA3252E3EFB8662D /* Release */ = { 343 | isa = XCBuildConfiguration; 344 | baseConfigurationReference = F6053164DC9D9C353DC50C33C5B48D88 /* MobileVLCKit.xcconfig */; 345 | buildSettings = { 346 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 347 | CODE_SIGN_IDENTITY = "iPhone Developer"; 348 | IPHONEOS_DEPLOYMENT_TARGET = 8.4; 349 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 350 | SDKROOT = iphoneos; 351 | TARGETED_DEVICE_FAMILY = "1,2"; 352 | VALIDATE_PRODUCT = YES; 353 | }; 354 | name = Release; 355 | }; 356 | 5D746887AE42A13576631074C3A59A1B /* Debug */ = { 357 | isa = XCBuildConfiguration; 358 | baseConfigurationReference = 6986B9AD93B98ECA82619DFBAEFEBFF6 /* Pods-DemoPlayer.debug.xcconfig */; 359 | buildSettings = { 360 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; 361 | CLANG_ENABLE_OBJC_WEAK = NO; 362 | CODE_SIGN_IDENTITY = ""; 363 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 364 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 365 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 366 | CURRENT_PROJECT_VERSION = 1; 367 | DEFINES_MODULE = YES; 368 | DYLIB_COMPATIBILITY_VERSION = 1; 369 | DYLIB_CURRENT_VERSION = 1; 370 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 371 | INFOPLIST_FILE = "Target Support Files/Pods-DemoPlayer/Pods-DemoPlayer-Info.plist"; 372 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 373 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 374 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 375 | MACH_O_TYPE = staticlib; 376 | MODULEMAP_FILE = "Target Support Files/Pods-DemoPlayer/Pods-DemoPlayer.modulemap"; 377 | OTHER_LDFLAGS = ""; 378 | OTHER_LIBTOOLFLAGS = ""; 379 | PODS_ROOT = "$(SRCROOT)"; 380 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 381 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; 382 | SDKROOT = iphoneos; 383 | SKIP_INSTALL = YES; 384 | TARGETED_DEVICE_FAMILY = "1,2"; 385 | VERSIONING_SYSTEM = "apple-generic"; 386 | VERSION_INFO_PREFIX = ""; 387 | }; 388 | name = Debug; 389 | }; 390 | 834EE252583125BF2A7F6B48C90B3762 /* Release */ = { 391 | isa = XCBuildConfiguration; 392 | baseConfigurationReference = 3D7D85E21015B5726DB0F507A64A3C46 /* Pods-DemoPlayer.release.xcconfig */; 393 | buildSettings = { 394 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; 395 | CLANG_ENABLE_OBJC_WEAK = NO; 396 | CODE_SIGN_IDENTITY = ""; 397 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 398 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 399 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 400 | CURRENT_PROJECT_VERSION = 1; 401 | DEFINES_MODULE = YES; 402 | DYLIB_COMPATIBILITY_VERSION = 1; 403 | DYLIB_CURRENT_VERSION = 1; 404 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 405 | INFOPLIST_FILE = "Target Support Files/Pods-DemoPlayer/Pods-DemoPlayer-Info.plist"; 406 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 407 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 408 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 409 | MACH_O_TYPE = staticlib; 410 | MODULEMAP_FILE = "Target Support Files/Pods-DemoPlayer/Pods-DemoPlayer.modulemap"; 411 | OTHER_LDFLAGS = ""; 412 | OTHER_LIBTOOLFLAGS = ""; 413 | PODS_ROOT = "$(SRCROOT)"; 414 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 415 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; 416 | SDKROOT = iphoneos; 417 | SKIP_INSTALL = YES; 418 | TARGETED_DEVICE_FAMILY = "1,2"; 419 | VALIDATE_PRODUCT = YES; 420 | VERSIONING_SYSTEM = "apple-generic"; 421 | VERSION_INFO_PREFIX = ""; 422 | }; 423 | name = Release; 424 | }; 425 | B01D14FDC83DCF9D4BE53066BEA96D05 /* Release */ = { 426 | isa = XCBuildConfiguration; 427 | buildSettings = { 428 | ALWAYS_SEARCH_USER_PATHS = NO; 429 | CLANG_ANALYZER_NONNULL = YES; 430 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 431 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 432 | CLANG_CXX_LIBRARY = "libc++"; 433 | CLANG_ENABLE_MODULES = YES; 434 | CLANG_ENABLE_OBJC_ARC = YES; 435 | CLANG_ENABLE_OBJC_WEAK = YES; 436 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 437 | CLANG_WARN_BOOL_CONVERSION = YES; 438 | CLANG_WARN_COMMA = YES; 439 | CLANG_WARN_CONSTANT_CONVERSION = YES; 440 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 441 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 442 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 443 | CLANG_WARN_EMPTY_BODY = YES; 444 | CLANG_WARN_ENUM_CONVERSION = YES; 445 | CLANG_WARN_INFINITE_RECURSION = YES; 446 | CLANG_WARN_INT_CONVERSION = YES; 447 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 448 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 449 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 450 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 451 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 452 | CLANG_WARN_STRICT_PROTOTYPES = YES; 453 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 454 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 455 | CLANG_WARN_UNREACHABLE_CODE = YES; 456 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 457 | COPY_PHASE_STRIP = NO; 458 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 459 | ENABLE_NS_ASSERTIONS = NO; 460 | ENABLE_STRICT_OBJC_MSGSEND = YES; 461 | GCC_C_LANGUAGE_STANDARD = gnu11; 462 | GCC_NO_COMMON_BLOCKS = YES; 463 | GCC_PREPROCESSOR_DEFINITIONS = ( 464 | "POD_CONFIGURATION_RELEASE=1", 465 | "$(inherited)", 466 | ); 467 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 468 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 469 | GCC_WARN_UNDECLARED_SELECTOR = YES; 470 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 471 | GCC_WARN_UNUSED_FUNCTION = YES; 472 | GCC_WARN_UNUSED_VARIABLE = YES; 473 | IPHONEOS_DEPLOYMENT_TARGET = 10.0; 474 | MTL_ENABLE_DEBUG_INFO = NO; 475 | MTL_FAST_MATH = YES; 476 | PRODUCT_NAME = "$(TARGET_NAME)"; 477 | STRIP_INSTALLED_PRODUCT = NO; 478 | SWIFT_COMPILATION_MODE = wholemodule; 479 | SWIFT_OPTIMIZATION_LEVEL = "-O"; 480 | SWIFT_VERSION = 5.0; 481 | SYMROOT = "${SRCROOT}/../build"; 482 | }; 483 | name = Release; 484 | }; 485 | D38BD269B72F0282464452679E7BDC12 /* Debug */ = { 486 | isa = XCBuildConfiguration; 487 | baseConfigurationReference = F6053164DC9D9C353DC50C33C5B48D88 /* MobileVLCKit.xcconfig */; 488 | buildSettings = { 489 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 490 | CODE_SIGN_IDENTITY = "iPhone Developer"; 491 | IPHONEOS_DEPLOYMENT_TARGET = 8.4; 492 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 493 | SDKROOT = iphoneos; 494 | TARGETED_DEVICE_FAMILY = "1,2"; 495 | }; 496 | name = Debug; 497 | }; 498 | /* End XCBuildConfiguration section */ 499 | 500 | /* Begin XCConfigurationList section */ 501 | 16EDD5E316845D7EFD3B69B8649BB39B /* Build configuration list for PBXNativeTarget "Pods-DemoPlayer" */ = { 502 | isa = XCConfigurationList; 503 | buildConfigurations = ( 504 | 5D746887AE42A13576631074C3A59A1B /* Debug */, 505 | 834EE252583125BF2A7F6B48C90B3762 /* Release */, 506 | ); 507 | defaultConfigurationIsVisible = 0; 508 | defaultConfigurationName = Release; 509 | }; 510 | 1F5605C76E377A68DE52E25A53DF5480 /* Build configuration list for PBXAggregateTarget "MobileVLCKit" */ = { 511 | isa = XCConfigurationList; 512 | buildConfigurations = ( 513 | D38BD269B72F0282464452679E7BDC12 /* Debug */, 514 | 487644A6C97280F1CA3252E3EFB8662D /* Release */, 515 | ); 516 | defaultConfigurationIsVisible = 0; 517 | defaultConfigurationName = Release; 518 | }; 519 | 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { 520 | isa = XCConfigurationList; 521 | buildConfigurations = ( 522 | 196DFA3E4A09A28224918543529A1885 /* Debug */, 523 | B01D14FDC83DCF9D4BE53066BEA96D05 /* Release */, 524 | ); 525 | defaultConfigurationIsVisible = 0; 526 | defaultConfigurationName = Release; 527 | }; 528 | /* End XCConfigurationList section */ 529 | }; 530 | rootObject = BFDFE7DC352907FC980B868725387E98 /* Project object */; 531 | } 532 | -------------------------------------------------------------------------------- /Pods/Pods.xcodeproj/xcuserdata/Chandan.xcuserdatad/xcschemes/Pods-DemoPlayer.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 34 | 35 | 45 | 46 | 52 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 66 | 67 | 70 | 71 | 72 | -------------------------------------------------------------------------------- /Pods/Pods.xcodeproj/xcuserdata/Chandan.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | Pods-DemoPlayer.xcscheme 8 | 9 | isShown 10 | 11 | 12 | 13 | SuppressBuildableAutocreation 14 | 15 | 38ABB663E9E496FA01E36DFF491497FC 16 | 17 | primary 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-DemoPlayer/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-DemoPlayer/Pods-DemoPlayer-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | 4 | ## MobileVLCKit 5 | 6 | GNU LESSER GENERAL PUBLIC LICENSE 7 | Version 2.1, February 1999 8 | 9 | Copyright (C) 1991, 1999 Free Software Foundation, Inc. 10 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 11 | Everyone is permitted to copy and distribute verbatim copies 12 | of this license document, but changing it is not allowed. 13 | 14 | [This is the first released version of the Lesser GPL. It also counts 15 | as the successor of the GNU Library Public License, version 2, hence 16 | the version number 2.1.] 17 | 18 | Preamble 19 | 20 | The licenses for most software are designed to take away your 21 | freedom to share and change it. By contrast, the GNU General Public 22 | Licenses are intended to guarantee your freedom to share and change 23 | free software--to make sure the software is free for all its users. 24 | 25 | This license, the Lesser General Public License, applies to some 26 | specially designated software packages--typically libraries--of the 27 | Free Software Foundation and other authors who decide to use it. You 28 | can use it too, but we suggest you first think carefully about whether 29 | this license or the ordinary General Public License is the better 30 | strategy to use in any particular case, based on the explanations below. 31 | 32 | When we speak of free software, we are referring to freedom of use, 33 | not price. Our General Public Licenses are designed to make sure that 34 | you have the freedom to distribute copies of free software (and charge 35 | for this service if you wish); that you receive source code or can get 36 | it if you want it; that you can change the software and use pieces of 37 | it in new free programs; and that you are informed that you can do 38 | these things. 39 | 40 | To protect your rights, we need to make restrictions that forbid 41 | distributors to deny you these rights or to ask you to surrender these 42 | rights. These restrictions translate to certain responsibilities for 43 | you if you distribute copies of the library or if you modify it. 44 | 45 | For example, if you distribute copies of the library, whether gratis 46 | or for a fee, you must give the recipients all the rights that we gave 47 | you. You must make sure that they, too, receive or can get the source 48 | code. If you link other code with the library, you must provide 49 | complete object files to the recipients, so that they can relink them 50 | with the library after making changes to the library and recompiling 51 | it. And you must show them these terms so they know their rights. 52 | 53 | We protect your rights with a two-step method: (1) we copyright the 54 | library, and (2) we offer you this license, which gives you legal 55 | permission to copy, distribute and/or modify the library. 56 | 57 | To protect each distributor, we want to make it very clear that 58 | there is no warranty for the free library. Also, if the library is 59 | modified by someone else and passed on, the recipients should know 60 | that what they have is not the original version, so that the original 61 | author's reputation will not be affected by problems that might be 62 | introduced by others. 63 | 64 | Finally, software patents pose a constant threat to the existence of 65 | any free program. We wish to make sure that a company cannot 66 | effectively restrict the users of a free program by obtaining a 67 | restrictive license from a patent holder. Therefore, we insist that 68 | any patent license obtained for a version of the library must be 69 | consistent with the full freedom of use specified in this license. 70 | 71 | Most GNU software, including some libraries, is covered by the 72 | ordinary GNU General Public License. This license, the GNU Lesser 73 | General Public License, applies to certain designated libraries, and 74 | is quite different from the ordinary General Public License. We use 75 | this license for certain libraries in order to permit linking those 76 | libraries into non-free programs. 77 | 78 | When a program is linked with a library, whether statically or using 79 | a shared library, the combination of the two is legally speaking a 80 | combined work, a derivative of the original library. The ordinary 81 | General Public License therefore permits such linking only if the 82 | entire combination fits its criteria of freedom. The Lesser General 83 | Public License permits more lax criteria for linking other code with 84 | the library. 85 | 86 | We call this license the "Lesser" General Public License because it 87 | does Less to protect the user's freedom than the ordinary General 88 | Public License. It also provides other free software developers Less 89 | of an advantage over competing non-free programs. These disadvantages 90 | are the reason we use the ordinary General Public License for many 91 | libraries. However, the Lesser license provides advantages in certain 92 | special circumstances. 93 | 94 | For example, on rare occasions, there may be a special need to 95 | encourage the widest possible use of a certain library, so that it becomes 96 | a de-facto standard. To achieve this, non-free programs must be 97 | allowed to use the library. A more frequent case is that a free 98 | library does the same job as widely used non-free libraries. In this 99 | case, there is little to gain by limiting the free library to free 100 | software only, so we use the Lesser General Public License. 101 | 102 | In other cases, permission to use a particular library in non-free 103 | programs enables a greater number of people to use a large body of 104 | free software. For example, permission to use the GNU C Library in 105 | non-free programs enables many more people to use the whole GNU 106 | operating system, as well as its variant, the GNU/Linux operating 107 | system. 108 | 109 | Although the Lesser General Public License is Less protective of the 110 | users' freedom, it does ensure that the user of a program that is 111 | linked with the Library has the freedom and the wherewithal to run 112 | that program using a modified version of the Library. 113 | 114 | The precise terms and conditions for copying, distribution and 115 | modification follow. Pay close attention to the difference between a 116 | "work based on the library" and a "work that uses the library". The 117 | former contains code derived from the library, whereas the latter must 118 | be combined with the library in order to run. 119 | 120 | GNU LESSER GENERAL PUBLIC LICENSE 121 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 122 | 123 | 0. This License Agreement applies to any software library or other 124 | program which contains a notice placed by the copyright holder or 125 | other authorized party saying it may be distributed under the terms of 126 | this Lesser General Public License (also called "this License"). 127 | Each licensee is addressed as "you". 128 | 129 | A "library" means a collection of software functions and/or data 130 | prepared so as to be conveniently linked with application programs 131 | (which use some of those functions and data) to form executables. 132 | 133 | The "Library", below, refers to any such software library or work 134 | which has been distributed under these terms. A "work based on the 135 | Library" means either the Library or any derivative work under 136 | copyright law: that is to say, a work containing the Library or a 137 | portion of it, either verbatim or with modifications and/or translated 138 | straightforwardly into another language. (Hereinafter, translation is 139 | included without limitation in the term "modification".) 140 | 141 | "Source code" for a work means the preferred form of the work for 142 | making modifications to it. For a library, complete source code means 143 | all the source code for all modules it contains, plus any associated 144 | interface definition files, plus the scripts used to control compilation 145 | and installation of the library. 146 | 147 | Activities other than copying, distribution and modification are not 148 | covered by this License; they are outside its scope. The act of 149 | running a program using the Library is not restricted, and output from 150 | such a program is covered only if its contents constitute a work based 151 | on the Library (independent of the use of the Library in a tool for 152 | writing it). Whether that is true depends on what the Library does 153 | and what the program that uses the Library does. 154 | 155 | 1. You may copy and distribute verbatim copies of the Library's 156 | complete source code as you receive it, in any medium, provided that 157 | you conspicuously and appropriately publish on each copy an 158 | appropriate copyright notice and disclaimer of warranty; keep intact 159 | all the notices that refer to this License and to the absence of any 160 | warranty; and distribute a copy of this License along with the 161 | Library. 162 | 163 | You may charge a fee for the physical act of transferring a copy, 164 | and you may at your option offer warranty protection in exchange for a 165 | fee. 166 | 167 | 2. You may modify your copy or copies of the Library or any portion 168 | of it, thus forming a work based on the Library, and copy and 169 | distribute such modifications or work under the terms of Section 1 170 | above, provided that you also meet all of these conditions: 171 | 172 | a) The modified work must itself be a software library. 173 | 174 | b) You must cause the files modified to carry prominent notices 175 | stating that you changed the files and the date of any change. 176 | 177 | c) You must cause the whole of the work to be licensed at no 178 | charge to all third parties under the terms of this License. 179 | 180 | d) If a facility in the modified Library refers to a function or a 181 | table of data to be supplied by an application program that uses 182 | the facility, other than as an argument passed when the facility 183 | is invoked, then you must make a good faith effort to ensure that, 184 | in the event an application does not supply such function or 185 | table, the facility still operates, and performs whatever part of 186 | its purpose remains meaningful. 187 | 188 | (For example, a function in a library to compute square roots has 189 | a purpose that is entirely well-defined independent of the 190 | application. Therefore, Subsection 2d requires that any 191 | application-supplied function or table used by this function must 192 | be optional: if the application does not supply it, the square 193 | root function must still compute square roots.) 194 | 195 | These requirements apply to the modified work as a whole. If 196 | identifiable sections of that work are not derived from the Library, 197 | and can be reasonably considered independent and separate works in 198 | themselves, then this License, and its terms, do not apply to those 199 | sections when you distribute them as separate works. But when you 200 | distribute the same sections as part of a whole which is a work based 201 | on the Library, the distribution of the whole must be on the terms of 202 | this License, whose permissions for other licensees extend to the 203 | entire whole, and thus to each and every part regardless of who wrote 204 | it. 205 | 206 | Thus, it is not the intent of this section to claim rights or contest 207 | your rights to work written entirely by you; rather, the intent is to 208 | exercise the right to control the distribution of derivative or 209 | collective works based on the Library. 210 | 211 | In addition, mere aggregation of another work not based on the Library 212 | with the Library (or with a work based on the Library) on a volume of 213 | a storage or distribution medium does not bring the other work under 214 | the scope of this License. 215 | 216 | 3. You may opt to apply the terms of the ordinary GNU General Public 217 | License instead of this License to a given copy of the Library. To do 218 | this, you must alter all the notices that refer to this License, so 219 | that they refer to the ordinary GNU General Public License, version 2, 220 | instead of to this License. (If a newer version than version 2 of the 221 | ordinary GNU General Public License has appeared, then you can specify 222 | that version instead if you wish.) Do not make any other change in 223 | these notices. 224 | 225 | Once this change is made in a given copy, it is irreversible for 226 | that copy, so the ordinary GNU General Public License applies to all 227 | subsequent copies and derivative works made from that copy. 228 | 229 | This option is useful when you wish to copy part of the code of 230 | the Library into a program that is not a library. 231 | 232 | 4. You may copy and distribute the Library (or a portion or 233 | derivative of it, under Section 2) in object code or executable form 234 | under the terms of Sections 1 and 2 above provided that you accompany 235 | it with the complete corresponding machine-readable source code, which 236 | must be distributed under the terms of Sections 1 and 2 above on a 237 | medium customarily used for software interchange. 238 | 239 | If distribution of object code is made by offering access to copy 240 | from a designated place, then offering equivalent access to copy the 241 | source code from the same place satisfies the requirement to 242 | distribute the source code, even though third parties are not 243 | compelled to copy the source along with the object code. 244 | 245 | 5. A program that contains no derivative of any portion of the 246 | Library, but is designed to work with the Library by being compiled or 247 | linked with it, is called a "work that uses the Library". Such a 248 | work, in isolation, is not a derivative work of the Library, and 249 | therefore falls outside the scope of this License. 250 | 251 | However, linking a "work that uses the Library" with the Library 252 | creates an executable that is a derivative of the Library (because it 253 | contains portions of the Library), rather than a "work that uses the 254 | library". The executable is therefore covered by this License. 255 | Section 6 states terms for distribution of such executables. 256 | 257 | When a "work that uses the Library" uses material from a header file 258 | that is part of the Library, the object code for the work may be a 259 | derivative work of the Library even though the source code is not. 260 | Whether this is true is especially significant if the work can be 261 | linked without the Library, or if the work is itself a library. The 262 | threshold for this to be true is not precisely defined by law. 263 | 264 | If such an object file uses only numerical parameters, data 265 | structure layouts and accessors, and small macros and small inline 266 | functions (ten lines or less in length), then the use of the object 267 | file is unrestricted, regardless of whether it is legally a derivative 268 | work. (Executables containing this object code plus portions of the 269 | Library will still fall under Section 6.) 270 | 271 | Otherwise, if the work is a derivative of the Library, you may 272 | distribute the object code for the work under the terms of Section 6. 273 | Any executables containing that work also fall under Section 6, 274 | whether or not they are linked directly with the Library itself. 275 | 276 | 6. As an exception to the Sections above, you may also combine or 277 | link a "work that uses the Library" with the Library to produce a 278 | work containing portions of the Library, and distribute that work 279 | under terms of your choice, provided that the terms permit 280 | modification of the work for the customer's own use and reverse 281 | engineering for debugging such modifications. 282 | 283 | You must give prominent notice with each copy of the work that the 284 | Library is used in it and that the Library and its use are covered by 285 | this License. You must supply a copy of this License. If the work 286 | during execution displays copyright notices, you must include the 287 | copyright notice for the Library among them, as well as a reference 288 | directing the user to the copy of this License. Also, you must do one 289 | of these things: 290 | 291 | a) Accompany the work with the complete corresponding 292 | machine-readable source code for the Library including whatever 293 | changes were used in the work (which must be distributed under 294 | Sections 1 and 2 above); and, if the work is an executable linked 295 | with the Library, with the complete machine-readable "work that 296 | uses the Library", as object code and/or source code, so that the 297 | user can modify the Library and then relink to produce a modified 298 | executable containing the modified Library. (It is understood 299 | that the user who changes the contents of definitions files in the 300 | Library will not necessarily be able to recompile the application 301 | to use the modified definitions.) 302 | 303 | b) Use a suitable shared library mechanism for linking with the 304 | Library. A suitable mechanism is one that (1) uses at run time a 305 | copy of the library already present on the user's computer system, 306 | rather than copying library functions into the executable, and (2) 307 | will operate properly with a modified version of the library, if 308 | the user installs one, as long as the modified version is 309 | interface-compatible with the version that the work was made with. 310 | 311 | c) Accompany the work with a written offer, valid for at 312 | least three years, to give the same user the materials 313 | specified in Subsection 6a, above, for a charge no more 314 | than the cost of performing this distribution. 315 | 316 | d) If distribution of the work is made by offering access to copy 317 | from a designated place, offer equivalent access to copy the above 318 | specified materials from the same place. 319 | 320 | e) Verify that the user has already received a copy of these 321 | materials or that you have already sent this user a copy. 322 | 323 | For an executable, the required form of the "work that uses the 324 | Library" must include any data and utility programs needed for 325 | reproducing the executable from it. However, as a special exception, 326 | the materials to be distributed need not include anything that is 327 | normally distributed (in either source or binary form) with the major 328 | components (compiler, kernel, and so on) of the operating system on 329 | which the executable runs, unless that component itself accompanies 330 | the executable. 331 | 332 | It may happen that this requirement contradicts the license 333 | restrictions of other proprietary libraries that do not normally 334 | accompany the operating system. Such a contradiction means you cannot 335 | use both them and the Library together in an executable that you 336 | distribute. 337 | 338 | 7. You may place library facilities that are a work based on the 339 | Library side-by-side in a single library together with other library 340 | facilities not covered by this License, and distribute such a combined 341 | library, provided that the separate distribution of the work based on 342 | the Library and of the other library facilities is otherwise 343 | permitted, and provided that you do these two things: 344 | 345 | a) Accompany the combined library with a copy of the same work 346 | based on the Library, uncombined with any other library 347 | facilities. This must be distributed under the terms of the 348 | Sections above. 349 | 350 | b) Give prominent notice with the combined library of the fact 351 | that part of it is a work based on the Library, and explaining 352 | where to find the accompanying uncombined form of the same work. 353 | 354 | 8. You may not copy, modify, sublicense, link with, or distribute 355 | the Library except as expressly provided under this License. Any 356 | attempt otherwise to copy, modify, sublicense, link with, or 357 | distribute the Library is void, and will automatically terminate your 358 | rights under this License. However, parties who have received copies, 359 | or rights, from you under this License will not have their licenses 360 | terminated so long as such parties remain in full compliance. 361 | 362 | 9. You are not required to accept this License, since you have not 363 | signed it. However, nothing else grants you permission to modify or 364 | distribute the Library or its derivative works. These actions are 365 | prohibited by law if you do not accept this License. Therefore, by 366 | modifying or distributing the Library (or any work based on the 367 | Library), you indicate your acceptance of this License to do so, and 368 | all its terms and conditions for copying, distributing or modifying 369 | the Library or works based on it. 370 | 371 | 10. Each time you redistribute the Library (or any work based on the 372 | Library), the recipient automatically receives a license from the 373 | original licensor to copy, distribute, link with or modify the Library 374 | subject to these terms and conditions. You may not impose any further 375 | restrictions on the recipients' exercise of the rights granted herein. 376 | You are not responsible for enforcing compliance by third parties with 377 | this License. 378 | 379 | 11. If, as a consequence of a court judgment or allegation of patent 380 | infringement or for any other reason (not limited to patent issues), 381 | conditions are imposed on you (whether by court order, agreement or 382 | otherwise) that contradict the conditions of this License, they do not 383 | excuse you from the conditions of this License. If you cannot 384 | distribute so as to satisfy simultaneously your obligations under this 385 | License and any other pertinent obligations, then as a consequence you 386 | may not distribute the Library at all. For example, if a patent 387 | license would not permit royalty-free redistribution of the Library by 388 | all those who receive copies directly or indirectly through you, then 389 | the only way you could satisfy both it and this License would be to 390 | refrain entirely from distribution of the Library. 391 | 392 | If any portion of this section is held invalid or unenforceable under any 393 | particular circumstance, the balance of the section is intended to apply, 394 | and the section as a whole is intended to apply in other circumstances. 395 | 396 | It is not the purpose of this section to induce you to infringe any 397 | patents or other property right claims or to contest validity of any 398 | such claims; this section has the sole purpose of protecting the 399 | integrity of the free software distribution system which is 400 | implemented by public license practices. Many people have made 401 | generous contributions to the wide range of software distributed 402 | through that system in reliance on consistent application of that 403 | system; it is up to the author/donor to decide if he or she is willing 404 | to distribute software through any other system and a licensee cannot 405 | impose that choice. 406 | 407 | This section is intended to make thoroughly clear what is believed to 408 | be a consequence of the rest of this License. 409 | 410 | 12. If the distribution and/or use of the Library is restricted in 411 | certain countries either by patents or by copyrighted interfaces, the 412 | original copyright holder who places the Library under this License may add 413 | an explicit geographical distribution limitation excluding those countries, 414 | so that distribution is permitted only in or among countries not thus 415 | excluded. In such case, this License incorporates the limitation as if 416 | written in the body of this License. 417 | 418 | 13. The Free Software Foundation may publish revised and/or new 419 | versions of the Lesser General Public License from time to time. 420 | Such new versions will be similar in spirit to the present version, 421 | but may differ in detail to address new problems or concerns. 422 | 423 | Each version is given a distinguishing version number. If the Library 424 | specifies a version number of this License which applies to it and 425 | "any later version", you have the option of following the terms and 426 | conditions either of that version or of any later version published by 427 | the Free Software Foundation. If the Library does not specify a 428 | license version number, you may choose any version ever published by 429 | the Free Software Foundation. 430 | 431 | 14. If you wish to incorporate parts of the Library into other free 432 | programs whose distribution conditions are incompatible with these, 433 | write to the author to ask for permission. For software which is 434 | copyrighted by the Free Software Foundation, write to the Free 435 | Software Foundation; we sometimes make exceptions for this. Our 436 | decision will be guided by the two goals of preserving the free status 437 | of all derivatives of our free software and of promoting the sharing 438 | and reuse of software generally. 439 | 440 | NO WARRANTY 441 | 442 | 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO 443 | WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. 444 | EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR 445 | OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY 446 | KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE 447 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 448 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE 449 | LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME 450 | THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 451 | 452 | 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN 453 | WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY 454 | AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU 455 | FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR 456 | CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE 457 | LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING 458 | RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A 459 | FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF 460 | SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH 461 | DAMAGES. 462 | 463 | END OF TERMS AND CONDITIONS 464 | 465 | How to Apply These Terms to Your New Libraries 466 | 467 | If you develop a new library, and you want it to be of the greatest 468 | possible use to the public, we recommend making it free software that 469 | everyone can redistribute and change. You can do so by permitting 470 | redistribution under these terms (or, alternatively, under the terms of the 471 | ordinary General Public License). 472 | 473 | To apply these terms, attach the following notices to the library. It is 474 | safest to attach them to the start of each source file to most effectively 475 | convey the exclusion of warranty; and each file should have at least the 476 | "copyright" line and a pointer to where the full notice is found. 477 | 478 | 479 | Copyright (C) 480 | 481 | This library is free software; you can redistribute it and/or 482 | modify it under the terms of the GNU Lesser General Public 483 | License as published by the Free Software Foundation; either 484 | version 2.1 of the License, or (at your option) any later version. 485 | 486 | This library is distributed in the hope that it will be useful, 487 | but WITHOUT ANY WARRANTY; without even the implied warranty of 488 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 489 | Lesser General Public License for more details. 490 | 491 | You should have received a copy of the GNU Lesser General Public 492 | License along with this library; if not, write to the Free Software 493 | Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 494 | 495 | Also add information on how to contact you by electronic and paper mail. 496 | 497 | You should also get your employer (if you work as a programmer) or your 498 | school, if any, to sign a "copyright disclaimer" for the library, if 499 | necessary. Here is a sample; alter the names: 500 | 501 | Yoyodyne, Inc., hereby disclaims all copyright interest in the 502 | library `Frob' (a library for tweaking knobs) written by James Random Hacker. 503 | 504 | , 1 April 1990 505 | Ty Coon, President of Vice 506 | 507 | That's all there is to it! 508 | 509 | Generated by CocoaPods - https://cocoapods.org 510 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-DemoPlayer/Pods-DemoPlayer-acknowledgements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreferenceSpecifiers 6 | 7 | 8 | FooterText 9 | This application makes use of the following third party libraries: 10 | Title 11 | Acknowledgements 12 | Type 13 | PSGroupSpecifier 14 | 15 | 16 | FooterText 17 | GNU LESSER GENERAL PUBLIC LICENSE 18 | Version 2.1, February 1999 19 | 20 | Copyright (C) 1991, 1999 Free Software Foundation, Inc. 21 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 22 | Everyone is permitted to copy and distribute verbatim copies 23 | of this license document, but changing it is not allowed. 24 | 25 | [This is the first released version of the Lesser GPL. It also counts 26 | as the successor of the GNU Library Public License, version 2, hence 27 | the version number 2.1.] 28 | 29 | Preamble 30 | 31 | The licenses for most software are designed to take away your 32 | freedom to share and change it. By contrast, the GNU General Public 33 | Licenses are intended to guarantee your freedom to share and change 34 | free software--to make sure the software is free for all its users. 35 | 36 | This license, the Lesser General Public License, applies to some 37 | specially designated software packages--typically libraries--of the 38 | Free Software Foundation and other authors who decide to use it. You 39 | can use it too, but we suggest you first think carefully about whether 40 | this license or the ordinary General Public License is the better 41 | strategy to use in any particular case, based on the explanations below. 42 | 43 | When we speak of free software, we are referring to freedom of use, 44 | not price. Our General Public Licenses are designed to make sure that 45 | you have the freedom to distribute copies of free software (and charge 46 | for this service if you wish); that you receive source code or can get 47 | it if you want it; that you can change the software and use pieces of 48 | it in new free programs; and that you are informed that you can do 49 | these things. 50 | 51 | To protect your rights, we need to make restrictions that forbid 52 | distributors to deny you these rights or to ask you to surrender these 53 | rights. These restrictions translate to certain responsibilities for 54 | you if you distribute copies of the library or if you modify it. 55 | 56 | For example, if you distribute copies of the library, whether gratis 57 | or for a fee, you must give the recipients all the rights that we gave 58 | you. You must make sure that they, too, receive or can get the source 59 | code. If you link other code with the library, you must provide 60 | complete object files to the recipients, so that they can relink them 61 | with the library after making changes to the library and recompiling 62 | it. And you must show them these terms so they know their rights. 63 | 64 | We protect your rights with a two-step method: (1) we copyright the 65 | library, and (2) we offer you this license, which gives you legal 66 | permission to copy, distribute and/or modify the library. 67 | 68 | To protect each distributor, we want to make it very clear that 69 | there is no warranty for the free library. Also, if the library is 70 | modified by someone else and passed on, the recipients should know 71 | that what they have is not the original version, so that the original 72 | author's reputation will not be affected by problems that might be 73 | introduced by others. 74 | 75 | Finally, software patents pose a constant threat to the existence of 76 | any free program. We wish to make sure that a company cannot 77 | effectively restrict the users of a free program by obtaining a 78 | restrictive license from a patent holder. Therefore, we insist that 79 | any patent license obtained for a version of the library must be 80 | consistent with the full freedom of use specified in this license. 81 | 82 | Most GNU software, including some libraries, is covered by the 83 | ordinary GNU General Public License. This license, the GNU Lesser 84 | General Public License, applies to certain designated libraries, and 85 | is quite different from the ordinary General Public License. We use 86 | this license for certain libraries in order to permit linking those 87 | libraries into non-free programs. 88 | 89 | When a program is linked with a library, whether statically or using 90 | a shared library, the combination of the two is legally speaking a 91 | combined work, a derivative of the original library. The ordinary 92 | General Public License therefore permits such linking only if the 93 | entire combination fits its criteria of freedom. The Lesser General 94 | Public License permits more lax criteria for linking other code with 95 | the library. 96 | 97 | We call this license the "Lesser" General Public License because it 98 | does Less to protect the user's freedom than the ordinary General 99 | Public License. It also provides other free software developers Less 100 | of an advantage over competing non-free programs. These disadvantages 101 | are the reason we use the ordinary General Public License for many 102 | libraries. However, the Lesser license provides advantages in certain 103 | special circumstances. 104 | 105 | For example, on rare occasions, there may be a special need to 106 | encourage the widest possible use of a certain library, so that it becomes 107 | a de-facto standard. To achieve this, non-free programs must be 108 | allowed to use the library. A more frequent case is that a free 109 | library does the same job as widely used non-free libraries. In this 110 | case, there is little to gain by limiting the free library to free 111 | software only, so we use the Lesser General Public License. 112 | 113 | In other cases, permission to use a particular library in non-free 114 | programs enables a greater number of people to use a large body of 115 | free software. For example, permission to use the GNU C Library in 116 | non-free programs enables many more people to use the whole GNU 117 | operating system, as well as its variant, the GNU/Linux operating 118 | system. 119 | 120 | Although the Lesser General Public License is Less protective of the 121 | users' freedom, it does ensure that the user of a program that is 122 | linked with the Library has the freedom and the wherewithal to run 123 | that program using a modified version of the Library. 124 | 125 | The precise terms and conditions for copying, distribution and 126 | modification follow. Pay close attention to the difference between a 127 | "work based on the library" and a "work that uses the library". The 128 | former contains code derived from the library, whereas the latter must 129 | be combined with the library in order to run. 130 | 131 | GNU LESSER GENERAL PUBLIC LICENSE 132 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 133 | 134 | 0. This License Agreement applies to any software library or other 135 | program which contains a notice placed by the copyright holder or 136 | other authorized party saying it may be distributed under the terms of 137 | this Lesser General Public License (also called "this License"). 138 | Each licensee is addressed as "you". 139 | 140 | A "library" means a collection of software functions and/or data 141 | prepared so as to be conveniently linked with application programs 142 | (which use some of those functions and data) to form executables. 143 | 144 | The "Library", below, refers to any such software library or work 145 | which has been distributed under these terms. A "work based on the 146 | Library" means either the Library or any derivative work under 147 | copyright law: that is to say, a work containing the Library or a 148 | portion of it, either verbatim or with modifications and/or translated 149 | straightforwardly into another language. (Hereinafter, translation is 150 | included without limitation in the term "modification".) 151 | 152 | "Source code" for a work means the preferred form of the work for 153 | making modifications to it. For a library, complete source code means 154 | all the source code for all modules it contains, plus any associated 155 | interface definition files, plus the scripts used to control compilation 156 | and installation of the library. 157 | 158 | Activities other than copying, distribution and modification are not 159 | covered by this License; they are outside its scope. The act of 160 | running a program using the Library is not restricted, and output from 161 | such a program is covered only if its contents constitute a work based 162 | on the Library (independent of the use of the Library in a tool for 163 | writing it). Whether that is true depends on what the Library does 164 | and what the program that uses the Library does. 165 | 166 | 1. You may copy and distribute verbatim copies of the Library's 167 | complete source code as you receive it, in any medium, provided that 168 | you conspicuously and appropriately publish on each copy an 169 | appropriate copyright notice and disclaimer of warranty; keep intact 170 | all the notices that refer to this License and to the absence of any 171 | warranty; and distribute a copy of this License along with the 172 | Library. 173 | 174 | You may charge a fee for the physical act of transferring a copy, 175 | and you may at your option offer warranty protection in exchange for a 176 | fee. 177 | 178 | 2. You may modify your copy or copies of the Library or any portion 179 | of it, thus forming a work based on the Library, and copy and 180 | distribute such modifications or work under the terms of Section 1 181 | above, provided that you also meet all of these conditions: 182 | 183 | a) The modified work must itself be a software library. 184 | 185 | b) You must cause the files modified to carry prominent notices 186 | stating that you changed the files and the date of any change. 187 | 188 | c) You must cause the whole of the work to be licensed at no 189 | charge to all third parties under the terms of this License. 190 | 191 | d) If a facility in the modified Library refers to a function or a 192 | table of data to be supplied by an application program that uses 193 | the facility, other than as an argument passed when the facility 194 | is invoked, then you must make a good faith effort to ensure that, 195 | in the event an application does not supply such function or 196 | table, the facility still operates, and performs whatever part of 197 | its purpose remains meaningful. 198 | 199 | (For example, a function in a library to compute square roots has 200 | a purpose that is entirely well-defined independent of the 201 | application. Therefore, Subsection 2d requires that any 202 | application-supplied function or table used by this function must 203 | be optional: if the application does not supply it, the square 204 | root function must still compute square roots.) 205 | 206 | These requirements apply to the modified work as a whole. If 207 | identifiable sections of that work are not derived from the Library, 208 | and can be reasonably considered independent and separate works in 209 | themselves, then this License, and its terms, do not apply to those 210 | sections when you distribute them as separate works. But when you 211 | distribute the same sections as part of a whole which is a work based 212 | on the Library, the distribution of the whole must be on the terms of 213 | this License, whose permissions for other licensees extend to the 214 | entire whole, and thus to each and every part regardless of who wrote 215 | it. 216 | 217 | Thus, it is not the intent of this section to claim rights or contest 218 | your rights to work written entirely by you; rather, the intent is to 219 | exercise the right to control the distribution of derivative or 220 | collective works based on the Library. 221 | 222 | In addition, mere aggregation of another work not based on the Library 223 | with the Library (or with a work based on the Library) on a volume of 224 | a storage or distribution medium does not bring the other work under 225 | the scope of this License. 226 | 227 | 3. You may opt to apply the terms of the ordinary GNU General Public 228 | License instead of this License to a given copy of the Library. To do 229 | this, you must alter all the notices that refer to this License, so 230 | that they refer to the ordinary GNU General Public License, version 2, 231 | instead of to this License. (If a newer version than version 2 of the 232 | ordinary GNU General Public License has appeared, then you can specify 233 | that version instead if you wish.) Do not make any other change in 234 | these notices. 235 | 236 | Once this change is made in a given copy, it is irreversible for 237 | that copy, so the ordinary GNU General Public License applies to all 238 | subsequent copies and derivative works made from that copy. 239 | 240 | This option is useful when you wish to copy part of the code of 241 | the Library into a program that is not a library. 242 | 243 | 4. You may copy and distribute the Library (or a portion or 244 | derivative of it, under Section 2) in object code or executable form 245 | under the terms of Sections 1 and 2 above provided that you accompany 246 | it with the complete corresponding machine-readable source code, which 247 | must be distributed under the terms of Sections 1 and 2 above on a 248 | medium customarily used for software interchange. 249 | 250 | If distribution of object code is made by offering access to copy 251 | from a designated place, then offering equivalent access to copy the 252 | source code from the same place satisfies the requirement to 253 | distribute the source code, even though third parties are not 254 | compelled to copy the source along with the object code. 255 | 256 | 5. A program that contains no derivative of any portion of the 257 | Library, but is designed to work with the Library by being compiled or 258 | linked with it, is called a "work that uses the Library". Such a 259 | work, in isolation, is not a derivative work of the Library, and 260 | therefore falls outside the scope of this License. 261 | 262 | However, linking a "work that uses the Library" with the Library 263 | creates an executable that is a derivative of the Library (because it 264 | contains portions of the Library), rather than a "work that uses the 265 | library". The executable is therefore covered by this License. 266 | Section 6 states terms for distribution of such executables. 267 | 268 | When a "work that uses the Library" uses material from a header file 269 | that is part of the Library, the object code for the work may be a 270 | derivative work of the Library even though the source code is not. 271 | Whether this is true is especially significant if the work can be 272 | linked without the Library, or if the work is itself a library. The 273 | threshold for this to be true is not precisely defined by law. 274 | 275 | If such an object file uses only numerical parameters, data 276 | structure layouts and accessors, and small macros and small inline 277 | functions (ten lines or less in length), then the use of the object 278 | file is unrestricted, regardless of whether it is legally a derivative 279 | work. (Executables containing this object code plus portions of the 280 | Library will still fall under Section 6.) 281 | 282 | Otherwise, if the work is a derivative of the Library, you may 283 | distribute the object code for the work under the terms of Section 6. 284 | Any executables containing that work also fall under Section 6, 285 | whether or not they are linked directly with the Library itself. 286 | 287 | 6. As an exception to the Sections above, you may also combine or 288 | link a "work that uses the Library" with the Library to produce a 289 | work containing portions of the Library, and distribute that work 290 | under terms of your choice, provided that the terms permit 291 | modification of the work for the customer's own use and reverse 292 | engineering for debugging such modifications. 293 | 294 | You must give prominent notice with each copy of the work that the 295 | Library is used in it and that the Library and its use are covered by 296 | this License. You must supply a copy of this License. If the work 297 | during execution displays copyright notices, you must include the 298 | copyright notice for the Library among them, as well as a reference 299 | directing the user to the copy of this License. Also, you must do one 300 | of these things: 301 | 302 | a) Accompany the work with the complete corresponding 303 | machine-readable source code for the Library including whatever 304 | changes were used in the work (which must be distributed under 305 | Sections 1 and 2 above); and, if the work is an executable linked 306 | with the Library, with the complete machine-readable "work that 307 | uses the Library", as object code and/or source code, so that the 308 | user can modify the Library and then relink to produce a modified 309 | executable containing the modified Library. (It is understood 310 | that the user who changes the contents of definitions files in the 311 | Library will not necessarily be able to recompile the application 312 | to use the modified definitions.) 313 | 314 | b) Use a suitable shared library mechanism for linking with the 315 | Library. A suitable mechanism is one that (1) uses at run time a 316 | copy of the library already present on the user's computer system, 317 | rather than copying library functions into the executable, and (2) 318 | will operate properly with a modified version of the library, if 319 | the user installs one, as long as the modified version is 320 | interface-compatible with the version that the work was made with. 321 | 322 | c) Accompany the work with a written offer, valid for at 323 | least three years, to give the same user the materials 324 | specified in Subsection 6a, above, for a charge no more 325 | than the cost of performing this distribution. 326 | 327 | d) If distribution of the work is made by offering access to copy 328 | from a designated place, offer equivalent access to copy the above 329 | specified materials from the same place. 330 | 331 | e) Verify that the user has already received a copy of these 332 | materials or that you have already sent this user a copy. 333 | 334 | For an executable, the required form of the "work that uses the 335 | Library" must include any data and utility programs needed for 336 | reproducing the executable from it. However, as a special exception, 337 | the materials to be distributed need not include anything that is 338 | normally distributed (in either source or binary form) with the major 339 | components (compiler, kernel, and so on) of the operating system on 340 | which the executable runs, unless that component itself accompanies 341 | the executable. 342 | 343 | It may happen that this requirement contradicts the license 344 | restrictions of other proprietary libraries that do not normally 345 | accompany the operating system. Such a contradiction means you cannot 346 | use both them and the Library together in an executable that you 347 | distribute. 348 | 349 | 7. You may place library facilities that are a work based on the 350 | Library side-by-side in a single library together with other library 351 | facilities not covered by this License, and distribute such a combined 352 | library, provided that the separate distribution of the work based on 353 | the Library and of the other library facilities is otherwise 354 | permitted, and provided that you do these two things: 355 | 356 | a) Accompany the combined library with a copy of the same work 357 | based on the Library, uncombined with any other library 358 | facilities. This must be distributed under the terms of the 359 | Sections above. 360 | 361 | b) Give prominent notice with the combined library of the fact 362 | that part of it is a work based on the Library, and explaining 363 | where to find the accompanying uncombined form of the same work. 364 | 365 | 8. You may not copy, modify, sublicense, link with, or distribute 366 | the Library except as expressly provided under this License. Any 367 | attempt otherwise to copy, modify, sublicense, link with, or 368 | distribute the Library is void, and will automatically terminate your 369 | rights under this License. However, parties who have received copies, 370 | or rights, from you under this License will not have their licenses 371 | terminated so long as such parties remain in full compliance. 372 | 373 | 9. You are not required to accept this License, since you have not 374 | signed it. However, nothing else grants you permission to modify or 375 | distribute the Library or its derivative works. These actions are 376 | prohibited by law if you do not accept this License. Therefore, by 377 | modifying or distributing the Library (or any work based on the 378 | Library), you indicate your acceptance of this License to do so, and 379 | all its terms and conditions for copying, distributing or modifying 380 | the Library or works based on it. 381 | 382 | 10. Each time you redistribute the Library (or any work based on the 383 | Library), the recipient automatically receives a license from the 384 | original licensor to copy, distribute, link with or modify the Library 385 | subject to these terms and conditions. You may not impose any further 386 | restrictions on the recipients' exercise of the rights granted herein. 387 | You are not responsible for enforcing compliance by third parties with 388 | this License. 389 | 390 | 11. If, as a consequence of a court judgment or allegation of patent 391 | infringement or for any other reason (not limited to patent issues), 392 | conditions are imposed on you (whether by court order, agreement or 393 | otherwise) that contradict the conditions of this License, they do not 394 | excuse you from the conditions of this License. If you cannot 395 | distribute so as to satisfy simultaneously your obligations under this 396 | License and any other pertinent obligations, then as a consequence you 397 | may not distribute the Library at all. For example, if a patent 398 | license would not permit royalty-free redistribution of the Library by 399 | all those who receive copies directly or indirectly through you, then 400 | the only way you could satisfy both it and this License would be to 401 | refrain entirely from distribution of the Library. 402 | 403 | If any portion of this section is held invalid or unenforceable under any 404 | particular circumstance, the balance of the section is intended to apply, 405 | and the section as a whole is intended to apply in other circumstances. 406 | 407 | It is not the purpose of this section to induce you to infringe any 408 | patents or other property right claims or to contest validity of any 409 | such claims; this section has the sole purpose of protecting the 410 | integrity of the free software distribution system which is 411 | implemented by public license practices. Many people have made 412 | generous contributions to the wide range of software distributed 413 | through that system in reliance on consistent application of that 414 | system; it is up to the author/donor to decide if he or she is willing 415 | to distribute software through any other system and a licensee cannot 416 | impose that choice. 417 | 418 | This section is intended to make thoroughly clear what is believed to 419 | be a consequence of the rest of this License. 420 | 421 | 12. If the distribution and/or use of the Library is restricted in 422 | certain countries either by patents or by copyrighted interfaces, the 423 | original copyright holder who places the Library under this License may add 424 | an explicit geographical distribution limitation excluding those countries, 425 | so that distribution is permitted only in or among countries not thus 426 | excluded. In such case, this License incorporates the limitation as if 427 | written in the body of this License. 428 | 429 | 13. The Free Software Foundation may publish revised and/or new 430 | versions of the Lesser General Public License from time to time. 431 | Such new versions will be similar in spirit to the present version, 432 | but may differ in detail to address new problems or concerns. 433 | 434 | Each version is given a distinguishing version number. If the Library 435 | specifies a version number of this License which applies to it and 436 | "any later version", you have the option of following the terms and 437 | conditions either of that version or of any later version published by 438 | the Free Software Foundation. If the Library does not specify a 439 | license version number, you may choose any version ever published by 440 | the Free Software Foundation. 441 | 442 | 14. If you wish to incorporate parts of the Library into other free 443 | programs whose distribution conditions are incompatible with these, 444 | write to the author to ask for permission. For software which is 445 | copyrighted by the Free Software Foundation, write to the Free 446 | Software Foundation; we sometimes make exceptions for this. Our 447 | decision will be guided by the two goals of preserving the free status 448 | of all derivatives of our free software and of promoting the sharing 449 | and reuse of software generally. 450 | 451 | NO WARRANTY 452 | 453 | 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO 454 | WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. 455 | EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR 456 | OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY 457 | KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE 458 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 459 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE 460 | LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME 461 | THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 462 | 463 | 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN 464 | WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY 465 | AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU 466 | FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR 467 | CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE 468 | LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING 469 | RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A 470 | FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF 471 | SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH 472 | DAMAGES. 473 | 474 | END OF TERMS AND CONDITIONS 475 | 476 | How to Apply These Terms to Your New Libraries 477 | 478 | If you develop a new library, and you want it to be of the greatest 479 | possible use to the public, we recommend making it free software that 480 | everyone can redistribute and change. You can do so by permitting 481 | redistribution under these terms (or, alternatively, under the terms of the 482 | ordinary General Public License). 483 | 484 | To apply these terms, attach the following notices to the library. It is 485 | safest to attach them to the start of each source file to most effectively 486 | convey the exclusion of warranty; and each file should have at least the 487 | "copyright" line and a pointer to where the full notice is found. 488 | 489 | <one line to give the library's name and a brief idea of what it does.> 490 | Copyright (C) <year> <name of author> 491 | 492 | This library is free software; you can redistribute it and/or 493 | modify it under the terms of the GNU Lesser General Public 494 | License as published by the Free Software Foundation; either 495 | version 2.1 of the License, or (at your option) any later version. 496 | 497 | This library is distributed in the hope that it will be useful, 498 | but WITHOUT ANY WARRANTY; without even the implied warranty of 499 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 500 | Lesser General Public License for more details. 501 | 502 | You should have received a copy of the GNU Lesser General Public 503 | License along with this library; if not, write to the Free Software 504 | Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 505 | 506 | Also add information on how to contact you by electronic and paper mail. 507 | 508 | You should also get your employer (if you work as a programmer) or your 509 | school, if any, to sign a "copyright disclaimer" for the library, if 510 | necessary. Here is a sample; alter the names: 511 | 512 | Yoyodyne, Inc., hereby disclaims all copyright interest in the 513 | library `Frob' (a library for tweaking knobs) written by James Random Hacker. 514 | 515 | <signature of Ty Coon>, 1 April 1990 516 | Ty Coon, President of Vice 517 | 518 | That's all there is to it! 519 | 520 | License 521 | LGPL v2.1 522 | Title 523 | MobileVLCKit 524 | Type 525 | PSGroupSpecifier 526 | 527 | 528 | FooterText 529 | Generated by CocoaPods - https://cocoapods.org 530 | Title 531 | 532 | Type 533 | PSGroupSpecifier 534 | 535 | 536 | StringsTable 537 | Acknowledgements 538 | Title 539 | Acknowledgements 540 | 541 | 542 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-DemoPlayer/Pods-DemoPlayer-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_DemoPlayer : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_DemoPlayer 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-DemoPlayer/Pods-DemoPlayer-frameworks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 5 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 6 | 7 | SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" 8 | 9 | install_framework() 10 | { 11 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then 12 | local source="${BUILT_PRODUCTS_DIR}/$1" 13 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then 14 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" 15 | elif [ -r "$1" ]; then 16 | local source="$1" 17 | fi 18 | 19 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 20 | 21 | if [ -L "${source}" ]; then 22 | echo "Symlinked..." 23 | source="$(readlink "${source}")" 24 | fi 25 | 26 | # use filter instead of exclude so missing patterns dont' throw errors 27 | echo "rsync -av --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" 28 | rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" 29 | 30 | local basename 31 | basename="$(basename -s .framework "$1")" 32 | binary="${destination}/${basename}.framework/${basename}" 33 | if ! [ -r "$binary" ]; then 34 | binary="${destination}/${basename}" 35 | fi 36 | 37 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 38 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then 39 | strip_invalid_archs "$binary" 40 | fi 41 | 42 | # Resign the code if required by the build settings to avoid unstable apps 43 | code_sign_if_enabled "${destination}/$(basename "$1")" 44 | 45 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. 46 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then 47 | local swift_runtime_libs 48 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) 49 | for lib in $swift_runtime_libs; do 50 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" 51 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" 52 | code_sign_if_enabled "${destination}/${lib}" 53 | done 54 | fi 55 | } 56 | 57 | # Signs a framework with the provided identity 58 | code_sign_if_enabled() { 59 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 60 | # Use the current code_sign_identitiy 61 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 62 | echo "/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements \"$1\"" 63 | /usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements "$1" 64 | fi 65 | } 66 | 67 | # Strip invalid architectures 68 | strip_invalid_archs() { 69 | binary="$1" 70 | # Get architectures for current file 71 | archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" 72 | stripped="" 73 | for arch in $archs; do 74 | if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then 75 | # Strip non-valid architectures in-place 76 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1 77 | stripped="$stripped $arch" 78 | fi 79 | done 80 | if [[ "$stripped" ]]; then 81 | echo "Stripped $binary of architectures:$stripped" 82 | fi 83 | } 84 | 85 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-DemoPlayer/Pods-DemoPlayer-resources.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 5 | 6 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt 7 | > "$RESOURCES_TO_COPY" 8 | 9 | XCASSET_FILES=() 10 | 11 | case "${TARGETED_DEVICE_FAMILY}" in 12 | 1,2) 13 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" 14 | ;; 15 | 1) 16 | TARGET_DEVICE_ARGS="--target-device iphone" 17 | ;; 18 | 2) 19 | TARGET_DEVICE_ARGS="--target-device ipad" 20 | ;; 21 | *) 22 | TARGET_DEVICE_ARGS="--target-device mac" 23 | ;; 24 | esac 25 | 26 | install_resource() 27 | { 28 | if [[ "$1" = /* ]] ; then 29 | RESOURCE_PATH="$1" 30 | else 31 | RESOURCE_PATH="${PODS_ROOT}/$1" 32 | fi 33 | if [[ ! -e "$RESOURCE_PATH" ]] ; then 34 | cat << EOM 35 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. 36 | EOM 37 | exit 1 38 | fi 39 | case $RESOURCE_PATH in 40 | *.storyboard) 41 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" 42 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 43 | ;; 44 | *.xib) 45 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" 46 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 47 | ;; 48 | *.framework) 49 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 50 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 51 | echo "rsync -av $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 52 | rsync -av "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 53 | ;; 54 | *.xcdatamodel) 55 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" 56 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" 57 | ;; 58 | *.xcdatamodeld) 59 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" 60 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" 61 | ;; 62 | *.xcmappingmodel) 63 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" 64 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" 65 | ;; 66 | *.xcassets) 67 | ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" 68 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 69 | ;; 70 | *) 71 | echo "$RESOURCE_PATH" 72 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" 73 | ;; 74 | esac 75 | } 76 | 77 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 78 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 79 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 80 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 81 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 82 | fi 83 | rm -f "$RESOURCES_TO_COPY" 84 | 85 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] 86 | then 87 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 88 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 89 | while read line; do 90 | if [[ $line != "${PODS_ROOT}*" ]]; then 91 | XCASSET_FILES+=("$line") 92 | fi 93 | done <<<"$OTHER_XCASSETS" 94 | 95 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 96 | fi 97 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-DemoPlayer/Pods-DemoPlayer-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double Pods_DemoPlayerVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_DemoPlayerVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-DemoPlayer/Pods-DemoPlayer.debug.xcconfig: -------------------------------------------------------------------------------- 1 | CLANG_CXX_LANGUAGE_STANDARD = c++11 2 | CLANG_CXX_LIBRARY = libc++ 3 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/MobileVLCKit" 4 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 5 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 6 | OTHER_LDFLAGS = $(inherited) -ObjC -l"bz2" -l"c++" -l"iconv" -l"xml2" -l"z" -framework "AVFoundation" -framework "AudioToolbox" -framework "CFNetwork" -framework "CoreGraphics" -framework "CoreMedia" -framework "CoreText" -framework "MobileVLCKit" -framework "OpenGLES" -framework "QuartzCore" -framework "Security" -framework "VideoToolbox" 7 | PODS_BUILD_DIR = ${BUILD_DIR} 8 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 9 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 10 | PODS_ROOT = ${SRCROOT}/Pods 11 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 12 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-DemoPlayer/Pods-DemoPlayer.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_DemoPlayer { 2 | umbrella header "Pods-DemoPlayer-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-DemoPlayer/Pods-DemoPlayer.release.xcconfig: -------------------------------------------------------------------------------- 1 | CLANG_CXX_LANGUAGE_STANDARD = c++11 2 | CLANG_CXX_LIBRARY = libc++ 3 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/MobileVLCKit" 4 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 5 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 6 | OTHER_LDFLAGS = $(inherited) -ObjC -l"bz2" -l"c++" -l"iconv" -l"xml2" -l"z" -framework "AVFoundation" -framework "AudioToolbox" -framework "CFNetwork" -framework "CoreGraphics" -framework "CoreMedia" -framework "CoreText" -framework "MobileVLCKit" -framework "OpenGLES" -framework "QuartzCore" -framework "Security" -framework "VideoToolbox" 7 | PODS_BUILD_DIR = ${BUILD_DIR} 8 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 9 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 10 | PODS_ROOT = ${SRCROOT}/Pods 11 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 12 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # CSVideoPlayer 2 | 3 | 4 | A completely customizable video player that support `MobileVLCKit`,`AVPlayer` and `Media Player`.It is in pure swift 3. 5 | 6 | # Features 7 | 8 | 9 | - [x] Airplay support. 10 | - [x] Customizable UI and user interaction 11 | - [x] Support for horizontal and vertical play mode 12 | - [x] Support play with online URL and local file 13 | - [x] Adjust volume by slide vertical at right side of screen 14 | - [x] Slide horizontal to fast forward and rewind 15 | 16 | 17 | # FrameWork Used 18 | 19 | - [x] MobileVLCKit 20 | - [x] Avfoundation framework 21 | - [x] Media Player Framework 22 | 23 | 24 | # Usage 25 | 26 | To run the Demo project; clone the repo, and run pod install from the DemoPlayer directory first. After installed pod, open`DemoPlayer.xcworkspace` in Xcode to run DemoPlayer Application. 27 | 28 | # Animated Demo 29 | 30 | W3Schools 31 | 32 | 33 | 34 | 35 | 36 | 37 | --------------------------------------------------------------------------------