{"id":1580,"url":"https://github.com/jamesdouble/JDVideoKit","last_synced_at":"2025-08-02T04:31:40.260Z","repository":{"id":56915823,"uuid":"99406197","full_name":"jamesdouble/JDVideoKit","owner":"jamesdouble","description":null,"archived":false,"fork":false,"pushed_at":"2019-10-10T03:20:59.000Z","size":2689,"stargazers_count":25,"open_issues_count":4,"forks_count":5,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-07-15T04:39:21.279Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jamesdouble.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-08-05T07:14:25.000Z","updated_at":"2024-01-18T01:35:14.000Z","dependencies_parsed_at":"2022-08-21T03:50:25.951Z","dependency_job_id":null,"html_url":"https://github.com/jamesdouble/JDVideoKit","commit_stats":null,"previous_names":[],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/jamesdouble/JDVideoKit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jamesdouble%2FJDVideoKit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jamesdouble%2FJDVideoKit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jamesdouble%2FJDVideoKit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jamesdouble%2FJDVideoKit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jamesdouble","download_url":"https://codeload.github.com/jamesdouble/JDVideoKit/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jamesdouble%2FJDVideoKit/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":268334612,"owners_count":24233793,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-02T02:00:12.353Z","response_time":74,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-01-05T20:15:50.360Z","updated_at":"2025-08-02T04:31:39.764Z","avatar_url":"https://github.com/jamesdouble.png","language":"Swift","funding_links":[],"categories":["Media"],"sub_categories":["Video","Other free courses"],"readme":"![Alt text](https://raw.githubusercontent.com/jamesdouble/JDVideoKit/master/Readme_img/logo.png)\n\n# JDVideoKit\n\n![Alt text](https://img.shields.io/badge/SwiftVersion-3.0+-red.svg?link=http://left\u0026link=http://right)\n![Alt text](https://img.shields.io/badge/IOSVersion-9.0+-green.svg)\n![Alt text](https://img.shields.io/badge/BuildVersion-1.0.0-green.svg)\n![Alt text](https://img.shields.io/badge/Author-JamesDouble-blue.svg?link=http://https://jamesdouble.github.io/index.html\u0026link=http://https://jamesdouble.github.io/index.html)\n\n# Introduction\n\nYou can easily transfer your video into Three common video type.\n\nYou can use set up camera easily.\n\n# Installation\n\n```\n pod 'JDVideoKit'\n```\n\n# USAGE\n\n### 1.[Use My Two Layout](#use-my-two-layout)\n\n### 2.[Use Only Capturing Layout](#use-only-capturing-layout)\n\n### 3.[Use Only Editing Layout](#use-only-editing-layout)\n\n### 4.[Convert Video Directly](#convert-video-directly)\n\n### [Customize your Layout](#customization)\n\n## Delegate\n\n```swift\npublic protocol JDVideoKitDelegate {\n    //1.If return nil means call JDProcessingViewController\n    func videoResource(forkit kit:JDVideoKit)-\u003eAny?\n    \n    //2.Only will call when above function return nil. Can make some setting for JDProcessingViewController\n    func willPresent(cameraViewController vc:JDProcessingViewController,forkit:JDVideoKit)-\u003eJDProcessingViewController\n    \n    //3.Can make some setting for JDPresentingViewController, if return nil jump to next delegate\n    func willPresent(edtingViewController vc:JDPresentingViewController,lastVC:UIViewController?,forkit:JDVideoKit)-\u003eJDPresentingViewController?\n    \n    //4.Set your type\n    func ConvertType(forVideo resource:Any,forkit:JDVideoKit)-\u003evideoProcessType\n    \n    //5.Call When user click save.\n    func FinalOutput(final video:AVAsset,url:URL)\n}\n\n```\n\n1. ***(NonOptional)*** \n\nReturn the video resource if you allready have one and Skip to Delegate 3.\n\n**Resource Allow Type : URL , AVAsset**\n\nReturn nil, will call Capturing Layout.\n\t \n2. ***(Optional)***\n\nYou can make some setting to customize [ProcessingViewController](#processingViewController) and return it.\n\n3. ***(Optional)***\n\nCall when Capturing Finish or delegate provide an avaliable video.\n\nYou can make some setting to customize [PresentingViewController](#PresentingViewController) and return it.\n\nReturn nil if you don't need edting layout and end it here , skip to 5.  \n**If you use capturing Layout before and you won't use editing Layout next, you should use the para \"LastVC\" to dissmiss it or whatever you want**\n\n4. ***(Optional)***\n\nSpecific the Convert type. **(.Boom , .Speed , .Reverse)**\n\n5. ***(NonOptional)*** \n\nCall When user click save button in Editing Layout, Capturing without editng or direct transfer complete.\n\n---  \n### Use My Two Layout\n####  -\u003e Implement 1 , 5\n\n```swift\nclass ViewController: UIViewController {\n    override func viewDidAppear(_ animated: Bool) {\n        let vk = JDVideoKit(delegate: self).getProperVC()\n        self.present(vk, animated: true, completion: nil)\n    }\n}\nextension ViewController:JDVideoKitDelegate{\n    func videoResource(forkit kit: JDVideoKit) -\u003e Any? {\n        return nil\n    }\n    func FinalOutput(final video:AVAsset,url:URL){\n        print(url)\n    }\n}\n```\n\n### Use Only Capturing Layout \n#### -\u003e Implement 1 , 3 , 4 , 5\n\n**Notice** : You may need to dissmiss the ProcessingVC or it keep on screen. \n\n```swift\nclass ViewController: UIViewController {\n    override func viewDidAppear(_ animated: Bool) {\n        let vk = JDVideoKit(delegate: self).getProperVC()\n        self.present(vk, animated: true, completion: nil)\n    }\n}\nextension ViewController:JDVideoKitDelegate\n{\n    func videoResource(forkit kit: JDVideoKit) -\u003e Any? {\n        return nil\n    }\n    func FinalOutput(final video:AVAsset,url:URL)\n    {\n        /// You will get a Video, you capture by my layout and convert \n        /// To the type you specific.\n    }\n    func willPresent(edtingViewController vc:JDPresentingViewController,lastVC:UIViewController?,forkit:JDVideoKit)-\u003eJDPresentingViewController? {\n    \tlastVC.dissmiss(...)\n        return nil\n    }\n    func ConvertType(forVideo resource: Any, forkit: JDVideoKit) -\u003e videoProcessType {\n        return .Boom\n    }\n}\n```\n\n### Use Only Editing Layout \n#### -\u003e Implement 1 , 5\n```swift\nclass ViewController: UIViewController {\n    override func viewDidAppear(_ animated: Bool) {\n        let vk = JDVideoKit(delegate: self).getProperVC()\n        self.present(vk, animated: true, completion: nil)\n    }\n}\nextension ViewController:JDVideoKitDelegate\n{\n    func videoResource(forkit kit: JDVideoKit) -\u003e Any? {\n        return URL( url or asset of video)\n    }\n    func FinalOutput(final video:AVAsset,url:URL)\n    {\n        print(url)\n    }\n}\n```\n\n### Convert Video Directly\n#### -\u003e Implement 1 , 4 , 5 \n```swift\nclass ViewController: UIViewController {\n    override func viewDidAppear(_ animated: Bool) {\n        let vk2 = JDVideoKit(delegate: self)\n        vk2.getVideoDirectly { (progress) in\n            print(progress)\n        }\n    }\n}\nextension ViewController:JDVideoKitDelegate\n{\n    func videoResource(forkit kit: JDVideoKit) -\u003e Any? {\n        return URL( url or asset of video)\n    }\n    func FinalOutput(final video:AVAsset,url:URL)\n    {\n        print(url)\n    }\n    func ConvertType(forVideo resource: Any, forkit: JDVideoKit) -\u003e videoProcessType {\n        return .Boom\n    }\n}\n\n```\n\n---\n### Customization\n\n#### ProcessingViewController\n\nImplement this Delegate:\n\n```Swift\nfunc willPresent(cameraViewController vc:JDProcessingViewController,forkit:JDVideoKit)-\u003eJDProcessingViewController\n{\n\t///Set Below Variable Like this\n\tvc.enableFlashLight = false \n}\n```\n\nThe component you can customize:\n\n```swift\npublic var enableFlashLight:Bool = true\npublic var FlashLightIconColor:UIColor = UIColor.black\npublic var SwitchIconColor:UIColor = UIColor.white\npublic var CaptureIconColor:UIColor = UIColor.white\npublic var allowChooseFromLibrary:Bool = true\npublic var BackgroundViewBarColor:UIColor?\n```\n\n\n![Alt text](https://raw.githubusercontent.com/jamesdouble/JDVideoKit/master/Readme_img/processingVC.png)\n\n#### ProcessingViewController\n\nImplement this Delegate:\n\n```Swift\nfunc willPresent(edtingViewController vc:JDPresentingViewController,lastVC:UIViewController?,forkit:JDVideoKit)-\u003eJDPresentingViewController?\n{\n\tvc.topTitle = \"Title\"\n}\n```\n\n\nThe component you can customize:\n\n```swift\npublic var topTitle:String = \"Share\"\npublic var CloseIconColor:UIColor = UIColor.white\npublic var saveButtonTitle:String = \"Save\"\npublic var savaButtonColor:UIColor = UIColor.white\n```\n\n![Alt text](https://raw.githubusercontent.com/jamesdouble/JDVideoKit/master/Readme_img/presentingVC.png)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjamesdouble%2FJDVideoKit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjamesdouble%2FJDVideoKit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjamesdouble%2FJDVideoKit/lists"}