Skip to content

Painlessly and natively play YouTube, Vimeo, and .MP4, .MOV, .MPV, .3GP videos and fetch thumbnails on your iOS devices.

License

Notifications You must be signed in to change notification settings

YasKuraishi/YKMediaPlayerKit

Repository files navigation

YKMediaPlayerKit

Painlessly and natively play YouTube, Vimeo, and .MP4, .MOV, .MPV, .3GP videos and fetch thumbnails on your iOS devices.

Overview

If you have been playing YouTube and Vimeo videos in a UIWebView because it is hard to figure out direct URL to an .MP4 that you can play natively on an iOS device via MPMoviePlayerViewController for superior user experience then YKMediaPlayerKit is for you.

It not only helps you play an online YouTube, Vimeo, and all natively supported formats such as .MP4, .MOV, .MPV, .3GP with a single method call but lets you asynchronously download thumbnail images for the videos too. You can also chose from Low, Medium, or High resolution videos or thumbnails.

Its blocks based and works asynchronously and returns all block callbacks on the main thread.

//Variable to hold parsed video
id<YKVideo> video;

//You can use YouTube, Vimeo, or direct video URL too.
NSString *videoURL = @"https://www.youtube.com/watch?v=GJey_oygU3Y";

YKMediaPlayerKit *player = [[YKMediaPlayerKit alloc] initWithURL:[NSURL URLWithString:videoURL]];
[player parseWithCompletion:^(YKVideoTypeOptions videoType, id<YKVideo> parsedVideo, NSError *error) {

    //Save parsed video to a class level property.
    video = parsedVideo;

    //Get thumbnails
    [player thumbWithCompletion:^(UIImage *thumb, NSError *error) {
        if (thumb) {
            //set thumbnail to respective UIImageView.
            self.imageView.image = thumb;
        }
    }];
}];

//Play parsed video
- (IBAction)playButtonPressed {
    [self.video play:YKQualityMedium];
}

Or you can do something like below:

Play YouTube video and fetch its thumbnail.

NSString *videoLink = @""http:https://www.youtube.com/watch?v=1hZ98an9wjo";"
YKYouTubeVideo *youTubeVideo = [[YKYouTubeVideo alloc] initWithContent:[NSURL URLWithString:videoLink]];

//Fetch thumbnail
[youTubeVideo parseWithCompletion:^(NSError *error) {
    [youTubeVideo thumbImage:YKQualityLow completion:^(UIImage *thumbImage, NSError *error) {
        //Set thumbImage to UIImageView here
    }];
}];

//Then play (make sure that you have called parseWithCompletion before calling this method)
 [youTubeVideo play:YKQualityHigh];

Exactly the same for Vimeo videos.

NSString *videoLink = @"http:https://vimeo.com/42893621";
YKVimeoVideo *vimeoVideo = [[YKVimeoVideo alloc] initWithContent:[NSURL URLWithString:videoLink]];

[vimeoVideo parseWithCompletion:^(NSError *error) {
    [vimeoVideo thumbImage:YKQualityLow completion:^(UIImage *thumbImage, NSError *error) {
        //Set thumbImage to UIImageView here
    }];
}];

//Then play (make sure that you have called parseWithCompletion before calling this method)
 [vimeoVideo play:YKQualityHigh];

Finaly playing and fetching thumbnails from an iOS supported native video format such as .MP4, .MOV, .MPV, .3GP

NSString *videoLink = @"http:https://download.wavetlan.com/SVV/Media/HTTP/BlackBerry.mov";
YKDirectVideo *directVideo = [[YKDirectVideo alloc] initWithContent:[NSURL URLWithString:videoLink]];

[directVideo thumbImage:YKQualityLow completion:^(UIImage *thumbImage, NSError *error) {
    //Set thumbImage to UIImageView here
}];

//Then play
 [directVideo play:YKQualityHigh];

How To Setup

If using CocoaPods then add this to your pods file pod 'YKMediaPlayerKit' and update pods

Or, simply drag and drop YKMediaPlayerKit folder to your project.

iOS 9 - App Transport Security

On iOS9, you have to explicitely declared inside the Info.plist file the trusted provider.

To make it work with Youtube and Vimeo, please add the following to your Info.plist:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http:https://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>NSExceptionDomains</key>
	<dict>
		<key>vimeo.com</key>
		<dict>
			<key>NSIncludesSubdomains</key>
			<true/>
			<key>NSExceptionAllowsInsecureHTTPLoads</key>
			<true/>
		</dict>
		<key>vimeocdn.com</key>
		<dict>
			<key>NSIncludesSubdomains</key>
			<true/>
			<key>NSExceptionAllowsInsecureHTTPLoads</key>
			<true/>
		</dict>
		<key>googlevideo.com</key>
		<dict>
			<key>NSIncludesSubdomains</key>
			<true/>
			<key>NSExceptionAllowsInsecureHTTPLoads</key>
			<true/>
		</dict>
		<key>youtube.com</key>
		<dict>
			<key>NSIncludesSubdomains</key>
			<true/>
			<key>NSExceptionAllowsInsecureHTTPLoads</key>
			<true/>
		</dict>
	</dict>
</dict>
</plist>

License

The MIT License (MIT)

Copyright (c) 2014 Yas Kuraishi

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Credits

HCYoutubeParser by Simon Andersson's - https://github.com/hellozimi/HCYoutubeParser

About

Painlessly and natively play YouTube, Vimeo, and .MP4, .MOV, .MPV, .3GP videos and fetch thumbnails on your iOS devices.

Resources

License

Stars

Watchers

Forks

Packages

No packages published