├── .gitignore ├── AlphaVideoiOS.podspec ├── Classes ├── AlphaFrameFilter.swift └── AlphaVideoView.swift ├── Examples └── AlphaVideoiOSDemo │ ├── AlphaVideoiOSDemo.xcodeproj │ ├── project.pbxproj │ └── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist │ ├── AlphaVideoiOSDemo.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist │ ├── AlphaVideoiOSDemo │ ├── AppDelegate.swift │ ├── Assets.xcassets │ │ ├── AppIcon.appiconset │ │ │ └── Contents.json │ │ └── Contents.json │ ├── Base.lproj │ │ ├── LaunchScreen.storyboard │ │ └── Main.storyboard │ ├── Info.plist │ ├── ViewController.swift │ └── playdoh-bat.mp4 │ ├── Podfile │ └── Podfile.lock └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | # Created by https://www.gitignore.io/api/xcode,objective-c,swift 3 | 4 | ### Objective-C ### 5 | # Xcode 6 | # 7 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 8 | 9 | ## Build generated 10 | build/ 11 | DerivedData/ 12 | 13 | ## Various settings 14 | *.pbxuser 15 | !default.pbxuser 16 | *.mode1v3 17 | !default.mode1v3 18 | *.mode2v3 19 | !default.mode2v3 20 | *.perspectivev3 21 | !default.perspectivev3 22 | xcuserdata/ 23 | 24 | ## Other 25 | *.moved-aside 26 | *.xccheckout 27 | *.xcscmblueprint 28 | 29 | ## Obj-C/Swift specific 30 | *.hmap 31 | *.ipa 32 | *.dSYM.zip 33 | *.dSYM 34 | 35 | # CocoaPods - Refactored to standalone file 36 | Pods/ 37 | 38 | 39 | # Carthage - Refactored to standalone file 40 | 41 | # fastlane 42 | # 43 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 44 | # screenshots whenever they are needed. 45 | # For more information about the recommended setup visit: 46 | # https://docs.fastlane.tools/best-practices/source-control/#source-control 47 | 48 | fastlane/report.xml 49 | fastlane/Preview.html 50 | fastlane/screenshots 51 | fastlane/test_output 52 | 53 | # Code Injection 54 | # 55 | # After new code Injection tools there's a generated folder /iOSInjectionProject 56 | # https://github.com/johnno1962/injectionforxcode 57 | 58 | iOSInjectionProject/ 59 | 60 | ### Objective-C Patch ### 61 | 62 | ### Swift ### 63 | # Xcode 64 | # 65 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 66 | 67 | ## Build generated 68 | 69 | ## Various settings 70 | 71 | ## Other 72 | 73 | ## Obj-C/Swift specific 74 | 75 | ## Playgrounds 76 | timeline.xctimeline 77 | playground.xcworkspace 78 | 79 | # Swift Package Manager 80 | # 81 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. 82 | # Packages/ 83 | # Package.pins 84 | .build/ 85 | 86 | # CocoaPods - Refactored to standalone file 87 | 88 | # Carthage - Refactored to standalone file 89 | 90 | # fastlane 91 | # 92 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 93 | # screenshots whenever they are needed. 94 | # For more information about the recommended setup visit: 95 | # https://docs.fastlane.tools/best-practices/source-control/#source-control 96 | 97 | 98 | ### Xcode ### 99 | # Xcode 100 | # 101 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 102 | 103 | ## Build generated 104 | 105 | ## Various settings 106 | 107 | ## Other 108 | 109 | ### Xcode Patch ### 110 | *.xcodeproj/* 111 | !*.xcodeproj/project.pbxproj 112 | !*.xcodeproj/xcshareddata/ 113 | !*.xcworkspace/contents.xcworkspacedata 114 | /*.gcno 115 | 116 | 117 | # End of https://www.gitignore.io/api/xcode,objective-c,swift 118 | 119 | *.xcworkspace/xcshareddata 120 | -------------------------------------------------------------------------------- /AlphaVideoiOS.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |spec| 2 | spec.name = "AlphaVideoiOS" 3 | spec.version = "0.0.1" 4 | spec.summary = "A short description of AlphaVideoiOS." 5 | spec.description = <<-DESC 6 | render video with alpha 7 | DESC 8 | spec.homepage = "#" 9 | spec.license = "MIT" 10 | spec.author = { "lvpengwei" => "pengwei.lv@gmail.com" } 11 | spec.source = { :git => "#", :tag => "#{spec.version}" } 12 | 13 | spec.ios.deployment_target = '9.0' 14 | 15 | spec.source_files = ["Classes/**/*.swift"] 16 | end 17 | -------------------------------------------------------------------------------- /Classes/AlphaFrameFilter.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AlphaFrameFilter.swift 3 | // AlphaVideoiOSDemo 4 | // 5 | // Created by lvpengwei on 2019/5/26. 6 | // Copyright © 2019 lvpengwei. All rights reserved. 7 | // 8 | 9 | import CoreImage 10 | 11 | class AlphaFrameFilter: CIFilter { 12 | static var kernel: CIColorKernel? = { 13 | return CIColorKernel(source: """ 14 | kernel vec4 alphaFrame(__sample s, __sample m) { 15 | return vec4(s.rgb, m.r); 16 | } 17 | """) 18 | }() 19 | 20 | var inputImage: CIImage? 21 | var maskImage: CIImage? 22 | 23 | override var outputImage: CIImage? { 24 | let kernel = AlphaFrameFilter.kernel! 25 | guard let inputImage = inputImage, let maskImage = maskImage else { 26 | return nil 27 | } 28 | let args = [inputImage as AnyObject, maskImage as AnyObject] 29 | return kernel.apply(extent: inputImage.extent, arguments: args) 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /Classes/AlphaVideoView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AlphaVideoView.swift 3 | // AlphaVideoiOSDemo 4 | // 5 | // Created by lvpengwei on 2019/5/26. 6 | // Copyright © 2019 lvpengwei. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import AVFoundation 11 | 12 | public class AlphaVideoView: UIView { 13 | deinit { 14 | self.playerItem = nil 15 | } 16 | override public class var layerClass: AnyClass { 17 | return AVPlayerLayer.self 18 | } 19 | var playerLayer: AVPlayerLayer { return layer as! AVPlayerLayer } 20 | private var player: AVPlayer? { 21 | get { return playerLayer.player } 22 | } 23 | var name: String = "" { 24 | didSet { 25 | loadVideo() 26 | } 27 | } 28 | public init(with name: String) { 29 | super.init(frame: .zero) 30 | commonInit() 31 | self.name = name 32 | loadVideo() 33 | } 34 | required init?(coder aDecoder: NSCoder) { 35 | super.init(coder: aDecoder) 36 | commonInit() 37 | } 38 | public func play() { 39 | player?.play() 40 | } 41 | public func pause() { 42 | player?.pause() 43 | } 44 | private func commonInit() { 45 | playerLayer.pixelBufferAttributes = [ (kCVPixelBufferPixelFormatTypeKey as String): kCVPixelFormatType_32BGRA] 46 | playerLayer.player = AVPlayer() 47 | isUserInteractionEnabled = true 48 | addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(tapAction))) 49 | } 50 | @objc private func tapAction() { 51 | guard let player = player else { return } 52 | guard player.rate == 0 else { return } 53 | player.play() 54 | } 55 | private var asset: AVAsset? 56 | private func loadVideo() { 57 | guard !name.isEmpty else { 58 | return 59 | } 60 | guard let videoURL = Bundle.main.url(forResource: name, withExtension: "mp4") else { return } 61 | self.asset = AVURLAsset(url: videoURL) 62 | self.asset?.loadValuesAsynchronously(forKeys: ["duration", "tracks"]) { [weak self] in 63 | guard let self = self, let asset = self.asset else { return } 64 | DispatchQueue.main.async { 65 | self.playerItem = AVPlayerItem(asset: asset) 66 | } 67 | } 68 | } 69 | private var playerItem: AVPlayerItem? = nil { 70 | willSet { 71 | player?.pause() 72 | } 73 | didSet { 74 | player?.seek(to: CMTime.zero) 75 | setupPlayerItem() 76 | setupLooping() 77 | player?.replaceCurrentItem(with: playerItem) 78 | } 79 | } 80 | private var didPlayToEndTimeObsever: NSObjectProtocol? = nil { 81 | willSet(newObserver) { 82 | if let observer = didPlayToEndTimeObsever, didPlayToEndTimeObsever !== newObserver { 83 | NotificationCenter.default.removeObserver(observer) 84 | } 85 | } 86 | } 87 | private func setupLooping() { 88 | guard let playerItem = self.playerItem, let player = self.player else { 89 | return 90 | } 91 | 92 | didPlayToEndTimeObsever = NotificationCenter.default.addObserver(forName: .AVPlayerItemDidPlayToEndTime, object: playerItem, queue: nil, using: { _ in 93 | player.seek(to: CMTime.zero) { _ in 94 | player.play() 95 | } 96 | }) 97 | } 98 | private func setupPlayerItem() { 99 | guard let playerItem = playerItem else { return } 100 | let tracks = playerItem.asset.tracks 101 | guard tracks.count > 0 else { 102 | print("no tracks") 103 | return 104 | } 105 | let videoSize = CGSize(width: tracks[0].naturalSize.width, height: tracks[0].naturalSize.height * 0.5) 106 | guard videoSize.width > 0 && videoSize.height > 0 else { 107 | print("video size is zero") 108 | return 109 | } 110 | let composition = AVMutableVideoComposition(asset: playerItem.asset, applyingCIFiltersWithHandler: { request in 111 | let sourceRect = CGRect(origin: .zero, size: videoSize) 112 | let alphaRect = sourceRect.offsetBy(dx: 0, dy: sourceRect.height) 113 | let filter = AlphaFrameFilter() 114 | filter.inputImage = request.sourceImage.cropped(to: alphaRect) 115 | .transformed(by: CGAffineTransform(translationX: 0, y: -sourceRect.height)) 116 | filter.maskImage = request.sourceImage.cropped(to: sourceRect) 117 | return request.finish(with: filter.outputImage!, context: nil) 118 | }) 119 | 120 | composition.renderSize = videoSize 121 | playerItem.videoComposition = composition 122 | playerItem.seekingWaitsForVideoCompositionRendering = true 123 | } 124 | } 125 | -------------------------------------------------------------------------------- /Examples/AlphaVideoiOSDemo/AlphaVideoiOSDemo.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 50; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | E603C7C2229A31E000AC12B9 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = E603C7C1229A31E000AC12B9 /* AppDelegate.swift */; }; 11 | E603C7C4229A31E000AC12B9 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E603C7C3229A31E000AC12B9 /* ViewController.swift */; }; 12 | E603C7C7229A31E000AC12B9 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = E603C7C5229A31E000AC12B9 /* Main.storyboard */; }; 13 | E603C7C9229A31E100AC12B9 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E603C7C8229A31E100AC12B9 /* Assets.xcassets */; }; 14 | E603C7CC229A31E100AC12B9 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = E603C7CA229A31E100AC12B9 /* LaunchScreen.storyboard */; }; 15 | E603C7DE229A763800AC12B9 /* playdoh-bat.mp4 in Resources */ = {isa = PBXBuildFile; fileRef = E603C7DD229A763800AC12B9 /* playdoh-bat.mp4 */; }; 16 | FA03DD18E0258990F7FE5B2C /* Pods_AlphaVideoiOSDemo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B4EAD4919AFFCFBA1E957F26 /* Pods_AlphaVideoiOSDemo.framework */; }; 17 | /* End PBXBuildFile section */ 18 | 19 | /* Begin PBXFileReference section */ 20 | 2916CB4788EE9626B60FEDE0 /* Pods-AlphaVideoiOSDemo.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AlphaVideoiOSDemo.release.xcconfig"; path = "Target Support Files/Pods-AlphaVideoiOSDemo/Pods-AlphaVideoiOSDemo.release.xcconfig"; sourceTree = ""; }; 21 | B092E1A7CA1B65E0114E07D8 /* Pods-AlphaVideoiOSDemo.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AlphaVideoiOSDemo.debug.xcconfig"; path = "Target Support Files/Pods-AlphaVideoiOSDemo/Pods-AlphaVideoiOSDemo.debug.xcconfig"; sourceTree = ""; }; 22 | B4EAD4919AFFCFBA1E957F26 /* Pods_AlphaVideoiOSDemo.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_AlphaVideoiOSDemo.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 23 | E603C7BE229A31E000AC12B9 /* AlphaVideoiOSDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AlphaVideoiOSDemo.app; sourceTree = BUILT_PRODUCTS_DIR; }; 24 | E603C7C1229A31E000AC12B9 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 25 | E603C7C3229A31E000AC12B9 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; 26 | E603C7C6229A31E000AC12B9 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 27 | E603C7C8229A31E100AC12B9 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 28 | E603C7CB229A31E100AC12B9 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 29 | E603C7CD229A31E100AC12B9 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 30 | E603C7DD229A763800AC12B9 /* playdoh-bat.mp4 */ = {isa = PBXFileReference; lastKnownFileType = file; path = "playdoh-bat.mp4"; sourceTree = ""; }; 31 | /* End PBXFileReference section */ 32 | 33 | /* Begin PBXFrameworksBuildPhase section */ 34 | E603C7BB229A31E000AC12B9 /* Frameworks */ = { 35 | isa = PBXFrameworksBuildPhase; 36 | buildActionMask = 2147483647; 37 | files = ( 38 | FA03DD18E0258990F7FE5B2C /* Pods_AlphaVideoiOSDemo.framework in Frameworks */, 39 | ); 40 | runOnlyForDeploymentPostprocessing = 0; 41 | }; 42 | /* End PBXFrameworksBuildPhase section */ 43 | 44 | /* Begin PBXGroup section */ 45 | 29004063581992EC87E841D2 /* Pods */ = { 46 | isa = PBXGroup; 47 | children = ( 48 | B092E1A7CA1B65E0114E07D8 /* Pods-AlphaVideoiOSDemo.debug.xcconfig */, 49 | 2916CB4788EE9626B60FEDE0 /* Pods-AlphaVideoiOSDemo.release.xcconfig */, 50 | ); 51 | path = Pods; 52 | sourceTree = ""; 53 | }; 54 | 792F3B492CE3135579E4E700 /* Frameworks */ = { 55 | isa = PBXGroup; 56 | children = ( 57 | B4EAD4919AFFCFBA1E957F26 /* Pods_AlphaVideoiOSDemo.framework */, 58 | ); 59 | name = Frameworks; 60 | sourceTree = ""; 61 | }; 62 | E603C7B5229A31E000AC12B9 = { 63 | isa = PBXGroup; 64 | children = ( 65 | E603C7C0229A31E000AC12B9 /* AlphaVideoiOSDemo */, 66 | E603C7BF229A31E000AC12B9 /* Products */, 67 | 29004063581992EC87E841D2 /* Pods */, 68 | 792F3B492CE3135579E4E700 /* Frameworks */, 69 | ); 70 | sourceTree = ""; 71 | }; 72 | E603C7BF229A31E000AC12B9 /* Products */ = { 73 | isa = PBXGroup; 74 | children = ( 75 | E603C7BE229A31E000AC12B9 /* AlphaVideoiOSDemo.app */, 76 | ); 77 | name = Products; 78 | sourceTree = ""; 79 | }; 80 | E603C7C0229A31E000AC12B9 /* AlphaVideoiOSDemo */ = { 81 | isa = PBXGroup; 82 | children = ( 83 | E603C7DD229A763800AC12B9 /* playdoh-bat.mp4 */, 84 | E603C7C1229A31E000AC12B9 /* AppDelegate.swift */, 85 | E603C7C3229A31E000AC12B9 /* ViewController.swift */, 86 | E603C7C5229A31E000AC12B9 /* Main.storyboard */, 87 | E603C7C8229A31E100AC12B9 /* Assets.xcassets */, 88 | E603C7CA229A31E100AC12B9 /* LaunchScreen.storyboard */, 89 | E603C7CD229A31E100AC12B9 /* Info.plist */, 90 | ); 91 | path = AlphaVideoiOSDemo; 92 | sourceTree = ""; 93 | }; 94 | /* End PBXGroup section */ 95 | 96 | /* Begin PBXNativeTarget section */ 97 | E603C7BD229A31E000AC12B9 /* AlphaVideoiOSDemo */ = { 98 | isa = PBXNativeTarget; 99 | buildConfigurationList = E603C7D0229A31E100AC12B9 /* Build configuration list for PBXNativeTarget "AlphaVideoiOSDemo" */; 100 | buildPhases = ( 101 | B62EAD30E2D483D10F081FA5 /* [CP] Check Pods Manifest.lock */, 102 | E603C7BA229A31E000AC12B9 /* Sources */, 103 | E603C7BB229A31E000AC12B9 /* Frameworks */, 104 | E603C7BC229A31E000AC12B9 /* Resources */, 105 | 16944D3AA599A1ACE6649C12 /* [CP] Embed Pods Frameworks */, 106 | ); 107 | buildRules = ( 108 | ); 109 | dependencies = ( 110 | ); 111 | name = AlphaVideoiOSDemo; 112 | productName = AlphaVideoiOSDemo; 113 | productReference = E603C7BE229A31E000AC12B9 /* AlphaVideoiOSDemo.app */; 114 | productType = "com.apple.product-type.application"; 115 | }; 116 | /* End PBXNativeTarget section */ 117 | 118 | /* Begin PBXProject section */ 119 | E603C7B6229A31E000AC12B9 /* Project object */ = { 120 | isa = PBXProject; 121 | attributes = { 122 | LastSwiftUpdateCheck = 1020; 123 | LastUpgradeCheck = 1020; 124 | ORGANIZATIONNAME = lvpengwei; 125 | TargetAttributes = { 126 | E603C7BD229A31E000AC12B9 = { 127 | CreatedOnToolsVersion = 10.2.1; 128 | }; 129 | }; 130 | }; 131 | buildConfigurationList = E603C7B9229A31E000AC12B9 /* Build configuration list for PBXProject "AlphaVideoiOSDemo" */; 132 | compatibilityVersion = "Xcode 9.3"; 133 | developmentRegion = en; 134 | hasScannedForEncodings = 0; 135 | knownRegions = ( 136 | en, 137 | Base, 138 | ); 139 | mainGroup = E603C7B5229A31E000AC12B9; 140 | productRefGroup = E603C7BF229A31E000AC12B9 /* Products */; 141 | projectDirPath = ""; 142 | projectRoot = ""; 143 | targets = ( 144 | E603C7BD229A31E000AC12B9 /* AlphaVideoiOSDemo */, 145 | ); 146 | }; 147 | /* End PBXProject section */ 148 | 149 | /* Begin PBXResourcesBuildPhase section */ 150 | E603C7BC229A31E000AC12B9 /* Resources */ = { 151 | isa = PBXResourcesBuildPhase; 152 | buildActionMask = 2147483647; 153 | files = ( 154 | E603C7CC229A31E100AC12B9 /* LaunchScreen.storyboard in Resources */, 155 | E603C7C9229A31E100AC12B9 /* Assets.xcassets in Resources */, 156 | E603C7C7229A31E000AC12B9 /* Main.storyboard in Resources */, 157 | E603C7DE229A763800AC12B9 /* playdoh-bat.mp4 in Resources */, 158 | ); 159 | runOnlyForDeploymentPostprocessing = 0; 160 | }; 161 | /* End PBXResourcesBuildPhase section */ 162 | 163 | /* Begin PBXShellScriptBuildPhase section */ 164 | 16944D3AA599A1ACE6649C12 /* [CP] Embed Pods Frameworks */ = { 165 | isa = PBXShellScriptBuildPhase; 166 | buildActionMask = 2147483647; 167 | files = ( 168 | ); 169 | inputFileListPaths = ( 170 | ); 171 | inputPaths = ( 172 | "${PODS_ROOT}/Target Support Files/Pods-AlphaVideoiOSDemo/Pods-AlphaVideoiOSDemo-frameworks.sh", 173 | "${BUILT_PRODUCTS_DIR}/AlphaVideoiOS/AlphaVideoiOS.framework", 174 | ); 175 | name = "[CP] Embed Pods Frameworks"; 176 | outputFileListPaths = ( 177 | ); 178 | outputPaths = ( 179 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/AlphaVideoiOS.framework", 180 | ); 181 | runOnlyForDeploymentPostprocessing = 0; 182 | shellPath = /bin/sh; 183 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-AlphaVideoiOSDemo/Pods-AlphaVideoiOSDemo-frameworks.sh\"\n"; 184 | showEnvVarsInLog = 0; 185 | }; 186 | B62EAD30E2D483D10F081FA5 /* [CP] Check Pods Manifest.lock */ = { 187 | isa = PBXShellScriptBuildPhase; 188 | buildActionMask = 2147483647; 189 | files = ( 190 | ); 191 | inputFileListPaths = ( 192 | ); 193 | inputPaths = ( 194 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 195 | "${PODS_ROOT}/Manifest.lock", 196 | ); 197 | name = "[CP] Check Pods Manifest.lock"; 198 | outputFileListPaths = ( 199 | ); 200 | outputPaths = ( 201 | "$(DERIVED_FILE_DIR)/Pods-AlphaVideoiOSDemo-checkManifestLockResult.txt", 202 | ); 203 | runOnlyForDeploymentPostprocessing = 0; 204 | shellPath = /bin/sh; 205 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; 206 | showEnvVarsInLog = 0; 207 | }; 208 | /* End PBXShellScriptBuildPhase section */ 209 | 210 | /* Begin PBXSourcesBuildPhase section */ 211 | E603C7BA229A31E000AC12B9 /* Sources */ = { 212 | isa = PBXSourcesBuildPhase; 213 | buildActionMask = 2147483647; 214 | files = ( 215 | E603C7C4229A31E000AC12B9 /* ViewController.swift in Sources */, 216 | E603C7C2229A31E000AC12B9 /* AppDelegate.swift in Sources */, 217 | ); 218 | runOnlyForDeploymentPostprocessing = 0; 219 | }; 220 | /* End PBXSourcesBuildPhase section */ 221 | 222 | /* Begin PBXVariantGroup section */ 223 | E603C7C5229A31E000AC12B9 /* Main.storyboard */ = { 224 | isa = PBXVariantGroup; 225 | children = ( 226 | E603C7C6229A31E000AC12B9 /* Base */, 227 | ); 228 | name = Main.storyboard; 229 | sourceTree = ""; 230 | }; 231 | E603C7CA229A31E100AC12B9 /* LaunchScreen.storyboard */ = { 232 | isa = PBXVariantGroup; 233 | children = ( 234 | E603C7CB229A31E100AC12B9 /* Base */, 235 | ); 236 | name = LaunchScreen.storyboard; 237 | sourceTree = ""; 238 | }; 239 | /* End PBXVariantGroup section */ 240 | 241 | /* Begin XCBuildConfiguration section */ 242 | E603C7CE229A31E100AC12B9 /* Debug */ = { 243 | isa = XCBuildConfiguration; 244 | buildSettings = { 245 | ALWAYS_SEARCH_USER_PATHS = NO; 246 | CLANG_ANALYZER_NONNULL = YES; 247 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 248 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 249 | CLANG_CXX_LIBRARY = "libc++"; 250 | CLANG_ENABLE_MODULES = YES; 251 | CLANG_ENABLE_OBJC_ARC = YES; 252 | CLANG_ENABLE_OBJC_WEAK = YES; 253 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 254 | CLANG_WARN_BOOL_CONVERSION = YES; 255 | CLANG_WARN_COMMA = YES; 256 | CLANG_WARN_CONSTANT_CONVERSION = YES; 257 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 258 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 259 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 260 | CLANG_WARN_EMPTY_BODY = YES; 261 | CLANG_WARN_ENUM_CONVERSION = YES; 262 | CLANG_WARN_INFINITE_RECURSION = YES; 263 | CLANG_WARN_INT_CONVERSION = YES; 264 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 265 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 266 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 267 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 268 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 269 | CLANG_WARN_STRICT_PROTOTYPES = YES; 270 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 271 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 272 | CLANG_WARN_UNREACHABLE_CODE = YES; 273 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 274 | CODE_SIGN_IDENTITY = "iPhone Developer"; 275 | COPY_PHASE_STRIP = NO; 276 | DEBUG_INFORMATION_FORMAT = dwarf; 277 | ENABLE_STRICT_OBJC_MSGSEND = YES; 278 | ENABLE_TESTABILITY = YES; 279 | GCC_C_LANGUAGE_STANDARD = gnu11; 280 | GCC_DYNAMIC_NO_PIC = NO; 281 | GCC_NO_COMMON_BLOCKS = YES; 282 | GCC_OPTIMIZATION_LEVEL = 0; 283 | GCC_PREPROCESSOR_DEFINITIONS = ( 284 | "DEBUG=1", 285 | "$(inherited)", 286 | ); 287 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 288 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 289 | GCC_WARN_UNDECLARED_SELECTOR = YES; 290 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 291 | GCC_WARN_UNUSED_FUNCTION = YES; 292 | GCC_WARN_UNUSED_VARIABLE = YES; 293 | IPHONEOS_DEPLOYMENT_TARGET = 12.2; 294 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 295 | MTL_FAST_MATH = YES; 296 | ONLY_ACTIVE_ARCH = YES; 297 | SDKROOT = iphoneos; 298 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 299 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 300 | }; 301 | name = Debug; 302 | }; 303 | E603C7CF229A31E100AC12B9 /* Release */ = { 304 | isa = XCBuildConfiguration; 305 | buildSettings = { 306 | ALWAYS_SEARCH_USER_PATHS = NO; 307 | CLANG_ANALYZER_NONNULL = YES; 308 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 309 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 310 | CLANG_CXX_LIBRARY = "libc++"; 311 | CLANG_ENABLE_MODULES = YES; 312 | CLANG_ENABLE_OBJC_ARC = YES; 313 | CLANG_ENABLE_OBJC_WEAK = YES; 314 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 315 | CLANG_WARN_BOOL_CONVERSION = YES; 316 | CLANG_WARN_COMMA = YES; 317 | CLANG_WARN_CONSTANT_CONVERSION = YES; 318 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 319 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 320 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 321 | CLANG_WARN_EMPTY_BODY = YES; 322 | CLANG_WARN_ENUM_CONVERSION = YES; 323 | CLANG_WARN_INFINITE_RECURSION = YES; 324 | CLANG_WARN_INT_CONVERSION = YES; 325 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 326 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 327 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 328 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 329 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 330 | CLANG_WARN_STRICT_PROTOTYPES = YES; 331 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 332 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 333 | CLANG_WARN_UNREACHABLE_CODE = YES; 334 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 335 | CODE_SIGN_IDENTITY = "iPhone Developer"; 336 | COPY_PHASE_STRIP = NO; 337 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 338 | ENABLE_NS_ASSERTIONS = NO; 339 | ENABLE_STRICT_OBJC_MSGSEND = YES; 340 | GCC_C_LANGUAGE_STANDARD = gnu11; 341 | GCC_NO_COMMON_BLOCKS = YES; 342 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 343 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 344 | GCC_WARN_UNDECLARED_SELECTOR = YES; 345 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 346 | GCC_WARN_UNUSED_FUNCTION = YES; 347 | GCC_WARN_UNUSED_VARIABLE = YES; 348 | IPHONEOS_DEPLOYMENT_TARGET = 12.2; 349 | MTL_ENABLE_DEBUG_INFO = NO; 350 | MTL_FAST_MATH = YES; 351 | SDKROOT = iphoneos; 352 | SWIFT_COMPILATION_MODE = wholemodule; 353 | SWIFT_OPTIMIZATION_LEVEL = "-O"; 354 | VALIDATE_PRODUCT = YES; 355 | }; 356 | name = Release; 357 | }; 358 | E603C7D1229A31E100AC12B9 /* Debug */ = { 359 | isa = XCBuildConfiguration; 360 | baseConfigurationReference = B092E1A7CA1B65E0114E07D8 /* Pods-AlphaVideoiOSDemo.debug.xcconfig */; 361 | buildSettings = { 362 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 363 | CODE_SIGN_STYLE = Automatic; 364 | DEVELOPMENT_TEAM = 3A75DREAB8; 365 | INFOPLIST_FILE = AlphaVideoiOSDemo/Info.plist; 366 | IPHONEOS_DEPLOYMENT_TARGET = 10; 367 | LD_RUNPATH_SEARCH_PATHS = ( 368 | "$(inherited)", 369 | "@executable_path/Frameworks", 370 | ); 371 | PRODUCT_BUNDLE_IDENTIFIER = com.lvpengwei.AlphaVideoiOSDemo; 372 | PRODUCT_NAME = "$(TARGET_NAME)"; 373 | SWIFT_VERSION = 5.0; 374 | TARGETED_DEVICE_FAMILY = "1,2"; 375 | }; 376 | name = Debug; 377 | }; 378 | E603C7D2229A31E100AC12B9 /* Release */ = { 379 | isa = XCBuildConfiguration; 380 | baseConfigurationReference = 2916CB4788EE9626B60FEDE0 /* Pods-AlphaVideoiOSDemo.release.xcconfig */; 381 | buildSettings = { 382 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 383 | CODE_SIGN_STYLE = Automatic; 384 | DEVELOPMENT_TEAM = 3A75DREAB8; 385 | INFOPLIST_FILE = AlphaVideoiOSDemo/Info.plist; 386 | IPHONEOS_DEPLOYMENT_TARGET = 10; 387 | LD_RUNPATH_SEARCH_PATHS = ( 388 | "$(inherited)", 389 | "@executable_path/Frameworks", 390 | ); 391 | PRODUCT_BUNDLE_IDENTIFIER = com.lvpengwei.AlphaVideoiOSDemo; 392 | PRODUCT_NAME = "$(TARGET_NAME)"; 393 | SWIFT_VERSION = 5.0; 394 | TARGETED_DEVICE_FAMILY = "1,2"; 395 | }; 396 | name = Release; 397 | }; 398 | /* End XCBuildConfiguration section */ 399 | 400 | /* Begin XCConfigurationList section */ 401 | E603C7B9229A31E000AC12B9 /* Build configuration list for PBXProject "AlphaVideoiOSDemo" */ = { 402 | isa = XCConfigurationList; 403 | buildConfigurations = ( 404 | E603C7CE229A31E100AC12B9 /* Debug */, 405 | E603C7CF229A31E100AC12B9 /* Release */, 406 | ); 407 | defaultConfigurationIsVisible = 0; 408 | defaultConfigurationName = Release; 409 | }; 410 | E603C7D0229A31E100AC12B9 /* Build configuration list for PBXNativeTarget "AlphaVideoiOSDemo" */ = { 411 | isa = XCConfigurationList; 412 | buildConfigurations = ( 413 | E603C7D1229A31E100AC12B9 /* Debug */, 414 | E603C7D2229A31E100AC12B9 /* Release */, 415 | ); 416 | defaultConfigurationIsVisible = 0; 417 | defaultConfigurationName = Release; 418 | }; 419 | /* End XCConfigurationList section */ 420 | }; 421 | rootObject = E603C7B6229A31E000AC12B9 /* Project object */; 422 | } 423 | -------------------------------------------------------------------------------- /Examples/AlphaVideoiOSDemo/AlphaVideoiOSDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Examples/AlphaVideoiOSDemo/AlphaVideoiOSDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Examples/AlphaVideoiOSDemo/AlphaVideoiOSDemo.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Examples/AlphaVideoiOSDemo/AlphaVideoiOSDemo.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Examples/AlphaVideoiOSDemo/AlphaVideoiOSDemo/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // AlphaVideoiOSDemo 4 | // 5 | // Created by lvpengwei on 2019/5/26. 6 | // Copyright © 2019 lvpengwei. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | @UIApplicationMain 12 | class AppDelegate: UIResponder, UIApplicationDelegate { 13 | 14 | var window: UIWindow? 15 | 16 | 17 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 18 | // Override point for customization after application launch. 19 | return true 20 | } 21 | 22 | func applicationWillResignActive(_ application: UIApplication) { 23 | // 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. 24 | // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. 25 | } 26 | 27 | func applicationDidEnterBackground(_ application: UIApplication) { 28 | // 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. 29 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 30 | } 31 | 32 | func applicationWillEnterForeground(_ application: UIApplication) { 33 | // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. 34 | } 35 | 36 | func applicationDidBecomeActive(_ application: UIApplication) { 37 | // 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. 38 | } 39 | 40 | func applicationWillTerminate(_ application: UIApplication) { 41 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 42 | } 43 | 44 | 45 | } 46 | 47 | -------------------------------------------------------------------------------- /Examples/AlphaVideoiOSDemo/AlphaVideoiOSDemo/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" : "ipad", 45 | "size" : "20x20", 46 | "scale" : "1x" 47 | }, 48 | { 49 | "idiom" : "ipad", 50 | "size" : "20x20", 51 | "scale" : "2x" 52 | }, 53 | { 54 | "idiom" : "ipad", 55 | "size" : "29x29", 56 | "scale" : "1x" 57 | }, 58 | { 59 | "idiom" : "ipad", 60 | "size" : "29x29", 61 | "scale" : "2x" 62 | }, 63 | { 64 | "idiom" : "ipad", 65 | "size" : "40x40", 66 | "scale" : "1x" 67 | }, 68 | { 69 | "idiom" : "ipad", 70 | "size" : "40x40", 71 | "scale" : "2x" 72 | }, 73 | { 74 | "idiom" : "ipad", 75 | "size" : "76x76", 76 | "scale" : "1x" 77 | }, 78 | { 79 | "idiom" : "ipad", 80 | "size" : "76x76", 81 | "scale" : "2x" 82 | }, 83 | { 84 | "idiom" : "ipad", 85 | "size" : "83.5x83.5", 86 | "scale" : "2x" 87 | }, 88 | { 89 | "idiom" : "ios-marketing", 90 | "size" : "1024x1024", 91 | "scale" : "1x" 92 | } 93 | ], 94 | "info" : { 95 | "version" : 1, 96 | "author" : "xcode" 97 | } 98 | } -------------------------------------------------------------------------------- /Examples/AlphaVideoiOSDemo/AlphaVideoiOSDemo/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Examples/AlphaVideoiOSDemo/AlphaVideoiOSDemo/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 | -------------------------------------------------------------------------------- /Examples/AlphaVideoiOSDemo/AlphaVideoiOSDemo/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 | -------------------------------------------------------------------------------- /Examples/AlphaVideoiOSDemo/AlphaVideoiOSDemo/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 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 | CFBundleVersion 20 | 1 21 | LSRequiresIPhoneOS 22 | 23 | UILaunchStoryboardName 24 | LaunchScreen 25 | UIMainStoryboardFile 26 | Main 27 | UIRequiredDeviceCapabilities 28 | 29 | armv7 30 | 31 | UISupportedInterfaceOrientations 32 | 33 | UIInterfaceOrientationPortrait 34 | UIInterfaceOrientationLandscapeLeft 35 | UIInterfaceOrientationLandscapeRight 36 | 37 | UISupportedInterfaceOrientations~ipad 38 | 39 | UIInterfaceOrientationPortrait 40 | UIInterfaceOrientationPortraitUpsideDown 41 | UIInterfaceOrientationLandscapeLeft 42 | UIInterfaceOrientationLandscapeRight 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /Examples/AlphaVideoiOSDemo/AlphaVideoiOSDemo/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // AlphaVideoiOSDemo 4 | // 5 | // Created by lvpengwei on 2019/5/26. 6 | // Copyright © 2019 lvpengwei. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import AlphaVideoiOS 11 | 12 | class ViewController: UIViewController { 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | view.backgroundColor = UIColor.gray 16 | let videoSize = CGSize(width: 300, height: 300) 17 | let animView = AlphaVideoView(with: "playdoh-bat") 18 | view.addSubview(animView) 19 | animView.translatesAutoresizingMaskIntoConstraints = false 20 | animView.widthAnchor.constraint(equalToConstant: videoSize.width).isActive = true 21 | animView.heightAnchor.constraint(equalToConstant: videoSize.height).isActive = true 22 | animView.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true 23 | animView.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true 24 | // animView.play() 25 | } 26 | } 27 | 28 | -------------------------------------------------------------------------------- /Examples/AlphaVideoiOSDemo/AlphaVideoiOSDemo/playdoh-bat.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lvpengwei/AlphaVideoiOS/693d455e1414d546773d414e961f63c50db9f38c/Examples/AlphaVideoiOSDemo/AlphaVideoiOSDemo/playdoh-bat.mp4 -------------------------------------------------------------------------------- /Examples/AlphaVideoiOSDemo/Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment the next line to define a global platform for your project 2 | # platform :ios, '9.0' 3 | 4 | target 'AlphaVideoiOSDemo' do 5 | # Comment the next line if you're not using Swift and don't want to use dynamic frameworks 6 | use_frameworks! 7 | 8 | pod 'AlphaVideoiOS', :path=>'../../' 9 | end 10 | -------------------------------------------------------------------------------- /Examples/AlphaVideoiOSDemo/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - AlphaVideoiOS (0.0.1) 3 | 4 | DEPENDENCIES: 5 | - AlphaVideoiOS (from `../../`) 6 | 7 | EXTERNAL SOURCES: 8 | AlphaVideoiOS: 9 | :path: "../../" 10 | 11 | SPEC CHECKSUMS: 12 | AlphaVideoiOS: f35ad0f6dfb57313d5720c982f35964f2500648c 13 | 14 | PODFILE CHECKSUM: 2bff87dce5c03263e3bc91fd5fd473f75f88914d 15 | 16 | COCOAPODS: 1.6.1 17 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # AlphaVideoiOS 2 | render video with alpha 3 | 4 | [how to create an alpha video](https://felgo.com/doc/felgo-alphavideo/#how-to-create-an-alpha-video) 5 | --------------------------------------------------------------------------------