Swift-YouTube-Player alternatives and similar libraries
Based on the "Video" category.
Alternatively, view Swift-YouTube-Player alternatives based on common mentions on social networks and blogs.
ZFPlayer9.7 2.5 L3 Swift-YouTube-Player VS ZFPlayerSupport customization of any player SDK and control layer(支持定制任何播放器SDK和控制层)
LFLiveKit9.4 0.0 L2 Swift-YouTube-Player VS LFLiveKitLaiFeng IOS Live Kit,H264 and AAC Hard coding，support GPUImage Beauty， rtmp transmission，weak network lost frame，Dynamic switching rate
MobilePlayer8.9 0.0 L4 Swift-YouTube-Player VS MobilePlayer:iphone: :movie_camera: A powerful and completely customizable media player for iOS
Player8.5 0.0 L4 Swift-YouTube-Player VS Player▶️ Play and stream media in Swift
MHVideoPhotoGallery8.5 0.0 L1 Swift-YouTube-Player VS MHVideoPhotoGalleryA Photo and Video Gallery
BMPlayer8.4 0.0 L3 Swift-YouTube-Player VS BMPlayerA video player for iOS, based on AVPlayer, support the horizontal, vertical screen. support adjust volume, brightness and seek by slide, support subtitles.
VLC for iOSVLC for iOS/iPadOS and tvOS official mirror
PryntTrimmerViewA set of tools to trim, crop and select frames inside a video
VersaPlayerVersatile Video Player implementation for iOS, macOS, and tvOS
YoutubeKitYoutubeKit is a video player that fully supports Youtube IFrame API and YoutubeDataAPI for easily create a Youtube app
Periscope VideoViewControllerVideo view controller with Periscope fast rewind control
VGPlayer5.3 0.0 Swift-YouTube-Player VS VGPlayerA simple iOS video player in Swift,Support play local and network,Background playback mode.
VIMVideoPlayer5.1 0.0 L1 Swift-YouTube-Player VS VIMVideoPlayerDeprecated: Please use [PlayerKit]( https://github.com/vimeo/PlayerKit) instead.
ios-360-videos5.0 0.0 L5 Swift-YouTube-Player VS ios-360-videosNYT360Video plays 360-degree video streamed from an AVPlayer on iOS.
AVPlayerViewController-SubtitlesEasy way to show SRT files on AVPlayerViewController
SSVideoPlayer4.1 0.0 L4 Swift-YouTube-Player VS SSVideoPlayerA video player that support both local and network resource.
MPMoviePlayerController-SubtitlesEasy way to show SRT files on MPMoviePlayerController
AVAnimator3.7 0.0 L1 Swift-YouTube-Player VS AVAnimatorAVAnimator is an iOS library that makes it easy to implement non-trivial animated/video content in iOS
PlayerView3.5 0.0 L4 Swift-YouTube-Player VS PlayerViewPlayer View is a delegated view using AVPlayer of Swift
swift-360-videos3.0 0.0 L5 Swift-YouTube-Player VS swift-360-videos360 video player for iOS written in swift - a subset of SceneKit that works
ABMediaView2.3 0.0 L1 Swift-YouTube-Player VS ABMediaViewMedia view which subclasses UIImageView, and can display & load images, videos, GIFs, and audio and from the web, and has functionality to minimize from fullscreen, as well as show GIF previews for videos.
VideoPager1.7 0.0 L5 Swift-YouTube-Player VS VideoPagerPaging Video UI, and some control components is available.
JDVideoKitYou can easily transfer your video into Three common video type via this framework.
Appwrite - The Open Source Firebase alternative introduces iOS support
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of Swift-YouTube-Player or a related project?
Embed and control YouTube videos in your iOS applications! Neato, right? Let's see how it works.
WKWebView breaking changes
Add this to your Cartfile:
…and then run
Don't forget to:
Link binary with librariesbuild phase
YouTubePlayer.frameworkas an input file to the
carthage copy-frameworksrun script phase (only necesasry if you're building for iOS)
See Carthage for more information about using Carthage as a dependency manager.
Ensure you are opting into using frameworks with
use_frameworks!. Then add the following to your Podfile:
…and then run
// Import Swift module import YouTubePlayer
Build and lay out the view however you wish, whether in IB w/ an outlet or programmatically.
@IBOutlet var videoPlayer: YouTubePlayerView!
// init YouTubePlayerView w/ playerFrame rect (assume playerFrame declared) var videoPlayer = YouTubePlayerView(frame: playerFrame)
Give the player a video to load, whether from ID or URL.
// Load video from YouTube ID videoPlayer.loadVideoID("nfWlot6h_JM")
// Load video from YouTube URL let myVideoURL = NSURL(string: "https://www.youtube.com/watch?v=wQg3bXrVLtg") videoPlayer.loadVideoURL(myVideoURL!)
YouTubePlayerView has methods for controlling the player (play, pause, seek, change video, etc.) They are:
func loadVideoURL(videoURL: NSURL)
func loadVideoID(videoID: String)
func loadPlaylistID(playlistID: String)
func seekTo(seconds: Float, seekAhead: Bool)
func getCurrentTime(completion: ((Double?) -> Void)?)
func getDuration(completion: ((Double?) -> Void)?))
loadVideoURL(videoURL: NSURL) or
loadVideoID(videoID: String). You can check the readiness of the player at any time by checking its
ready: Bool property. These functions run asynchronously, so it is not guaranteed that a call to a play function will be safe if it immediately follows a call to a load function. I plan to update the library soon to add completion handlers to be called when the player is ready.
In the meantime, you can also the
playerReady(videoPlayer: YouTubePlayerView) to ensure code is executed immediately when the player becomes ready.
Responding to events
YouTube's iFrame player emits certain events based on the lifecycle of the player. The
YouTubePlayerDelegate outlines these methods that get called during a player's lifecycle. They are:
func playerReady(videoPlayer: YouTubePlayerView)
func playerStateChanged(videoPlayer: YouTubePlayerView, playerState: YouTubePlayerState)
func playerQualityChanged(videoPlayer: YouTubePlayerView, playbackQuality: YouTubePlaybackQuality)
Side note: All these delegate methods are optional which means that you can implement none, all, or some of them in your delegate class.
UIWebView (deprecated) to
WKWebView required changing
player calls which return values to be asynchronous. If you upgrade to 0.7.0,
you will need to replace any call to either
getDuration() with its asynchronous equivalent, documented