Skip to content

A toy (non-production) SDWebImage coder plugin to play Video Format like MP4 on Animated Image View

License

Notifications You must be signed in to change notification settings

SDWebImage/SDWebImageVideoCoder

Repository files navigation

SDWebImageVideoCoder

CI Status Version License Platform

What's for

This is just a toy coder plugin for SDWebImage. Which aim to provide a demo usage that how SDWebImage combined the Animated Image View and Player and let it works for generic usage and customization.

Important: This project is just a toy, which means, it does not provide any production ready features, and the performances is really slow.

For real world rendering for short video files (like Imgur's GIFV format). You should always prefers to use the video player and rendering components, like AVKit's AVPlayerViewController .

This coder plugin, provide the animation loading support for video format, including:

  • MP4 (MPEG/4)
  • M4V (Apple iTunes Movie)
  • MOV (QuickTime Movie)

Requirements

  • iOS 9+
  • macOS 10.11+
  • tvOS 9+

Installation

CocoaPods

SDWebImageVideoCoder is available through CocoaPods. To install it, simply add the following line to your Podfile:

pod 'SDWebImageVideoCoder'

Carthage

SDWebImageVideoCoder is available through Carthage.

github "SDWebImage/SDWebImageVideoCoder"

Swift Package Manager (Xcode 11+)

SDWebImageVideoCoder is available through Swift Package Manager.

let package = Package(
    dependencies: [
        .package(url: "https://github.com/SDWebImage/SDWebImageVideoCoder.git", from: "0.2.0")
    ]
)

Usage

Load Video URL

For coder plugin usage, see Wiki - Coder Usage

  • Objective-C
// register coder
[SDImageCodersManager.sharedCoder addCoder:SDImageVideoCoder.sharedCoder];
// load URL
SDAnimatedImageView *imageView;
NSURL *videoURL = [NSURL URLWithString:@"https://i.imgur.com/FY1AbSo.mp4"]; 
[imageView sd_setImageWithURL:videoURL];
  • Swift
// register coder
SDImageCodersManager.shared.addCoder(SDImageVideoCoder.shared)
// load URL
let imageView: SDAnimatedImageView
let url = URL(string: "https://i.imgur.com/FY1AbSo.mp4")
imageView.sd_setImage(url: url)

AVAsset player usage

For player usage, see Wiki - Animated Image Player

  • Objective-C
// AVAsset
AVAsset *asset;
AVAssetImageGenerator *generator = [AVAssetImageGenerator assetImageGeneratorWithAsset:asset];
generator.appliesPreferredTrackTransform = YES;
generator.requestedTimeToleranceBefore = kCMTimeZero;
generator.requestedTimeToleranceAfter = kCMTimeZero;
// player
SDAnimatedImagePlayer *player = [SDAnimatedImagePlayer playerWithProvider:generator];
player.animationFrameHandler = ^(NSUInteger index, UIImage * frame) {
    // frames
};
[player seekToFrameAtIndex:5 loopCount:0];
[player play];
  • Swift
let asset: AVAsset
let generator = AVAssetImageGenerator(asset: asset)
generator.appliesPreferredTrackTransform = true
generator.requestedTimeToleranceBefore = .zero
generator.requestedTimeToleranceAfter = .zero
// Player
let player = SDAnimatedImagePlayer(provider: generator)
player.animationFrameHandler = { (index, frame) in 
    // frames
}
player.seekToFrame(at: 5, loopCount: 0)
player.play()

Example

To run the example project, clone the repo, and run pod install from the Example directory first.

This demo MP4 video is from Imgur. You can always try you short video files as well.

Author

DreamPiggy, [email protected]

License

SDWebImageVideoCoder is available under the MIT license. See the LICENSE file for more info.