NYT360Video plays 360-degree video streamed from an AVPlayer on iOS.

Related tags

Video ios-360-videos
Overview

NYT360Video

Version License Platform Carthage compatible

360º video playback from The New York Times

NYT360Video plays spherical 360º video, allowing the user to explore the video via pan gestures and the iOS device’s gyroscope. The video can be played from a file or network stream, via a standard AVPlayer instance.

It provides no user interface for playback controls (like a play/pause button); it is intended to be embedded in your own video player implementation.

At the Times we use NYT360Video to support playback of our own content:

Animation of 360º video playback in the Times’ iPhone app

Usage

NYT360ViewController is the entry point for the library. Initialize it with an AVPlayer instance and your application’s motion manager. (Motion management is discussed in the next section.)

Once it’s initialized, embed your NYT360ViewController instance in your view hierarchy via view controller containment.

The Example application demonstrates how to set this up.

Motion Management

Apple’s documentation warns,

An app should create only a single instance of the CMMotionManager class.

To cope with this limitation, NYT360Video doesn’t have to create its own CMMotionManager instance to receive device motion updates. Instead, you’ll inject a motion manager when you create a NYT360ViewController.

The expectations for this motion manager are set by the NYT360MotionManagement protocol; see the header for a detailed description of those requirements.

If your application doesn’t use CMMotionManager elsewhere, you can simply use the NYT360MotionManager singleton provided with this library to fulfill these requirements.

Otherwise, if your app has a motion manager already, you’ll need to make it conform to NYT360MotionManagement and use it when creating a NYT360ViewController.

Managing Gesture Interactions

You may want to restrict the gesture-based interactions with NYT360ViewController in certain cases in your application — for example, when embedded in a vertically-scrolling view, NYT360ViewController should not intercept vertical pan gestures. There are a few ways to accomplish this with NYT360Video.

First, NYT360ViewController provides properties to configure which axes of movement are allowed. (This would be the simplest way to solve the example problem set out above.)

The library exposes its pan gesture recognizer as a property on NYT360ViewController for more advanced integration with other gesture recognizers. And finally, the type NYT360CameraPanGestureRecognizer is introduced so that host applications can more easily configure interaction with other gesture recognizers, without having to refer to specific instances of an NYT360Video gesture recognizer.

Requirements

NYT360Video works on iOS 8+.

Installation

Carthage

NYT360Video may be fetched and built via Carthage. To install it, simply add the following line to your Cartfile:

github "NYTimes/ios-360-videos"

Then, following the instructions for integrating Carthage frameworks into your app, link the NYT360Video framework into your project.

CocoaPods

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

pod 'NYT360Video'

Known Issues

  • iOS 10 CoreAudio Crash - On devices running iOS 10 (at least as of Beta 7), host applications will crash if the device is locked while an NYT360ViewController is visible (whether paused or not). The crash is caused by a CoreAudio exception. A workaround that appears to work for some, though not all, apps is to enable the background audio capability in the host application’s plist. An extended discussion of the issue can be found in issue #37.

See also this project’s issue tracker.

Contributing

Contributions are welcomed via GitHub’s pull request system. As a note:

  • Contributions which include unit tests, where feasible, are likely to be merged more easily.
  • Pull requests which add player UI are unlikely to be accepted. We consider that to be a separate responsibility; this library aims to provide only lower-level 360º-specific playback functionality.
  1. Fork this repository
  2. Create your feature branch: git checkout -b my-awesome-new-feature
  3. Commit your changes: git commit -m 'Add some awesome feature' Please split your commits up logically, and be sure to write good commit messages.
  4. Push to your branch: git push origin my-awesome-new-feature
  5. Submit a pull request to this repository

Version History

See CHANGELOG.md.

License

NYT360Video is released under the Apache 2.0 license.

Comments
  • Add a low-pass noise filter.

    Add a low-pass noise filter.

    On some devices, the rotation rates exhibit a low-level drift on one or more rotation axes. The symptom expressions are not identical, but they appear to be related to low component quality (iPhone 5c versus higher end devices) and/or rough usage (drops, etc).

    Test devices Kilo and Juliet (both iPhones 5c) are affected. Lay them flat on a table or hold them absolutely still in your hand, and you'll see the camera drift up or down to the min/max y values, and in an infinite rotation in the x direction.

    In an ideal scenario, we could ask users to calibrate their gyroscopes and apply a corrective factor to all inputs. Barring that, the next best thing we can try is to add a low-pass filter which ignores input less than a given threshold. In my non-scientific testing with the only affected devices at my disposal, I found that a noise threshold between 0.10 and 0.15 filtered out the noise with a minimal loss in sensitivity. Less than 0.10 and the 360 camera position starts to drift. I'm using 0.12 for now.

    See also: https://forums.developer.apple.com/thread/12049

    opened by jaredsinclair 7
  • More preparation for iOS videos integration

    More preparation for iOS videos integration

    The primary goal was to add play and pause methods to NYT360VideoViewController. This required some new methods and properties in other classes to make it work. I also cleaned up some files I encountered to make the method groupings and variable names easier to follow.

    opened by jaredsinclair 4
  • Fix distortion when resizing.

    Fix distortion when resizing.

    Note: this PR will have minor merge conflicts with this other PR but I wanted to keep these changes separate to make them easier to review.

    This PR fixes visual distortions when resizing an NYT360VideoViewController's view. The underlying cause is that SCNView does not appear to support content resizing modes like "aspect fit" or "aspect fill". To correct the distortions, we have to preserve the SCNView's aspect ratio across all resizing, and use view containment to "crop" the out-of-bounds portions of the view.

    • NYT360VideoViewController no longer overrides loadView to set it's view to an instance of SCNView, but instead adds a SCNView as a subview inside viewDidLoad.
    • I initialize the SCNView with an arbitrary but educated guess about the optimal size (in points). Since source videos for 360 content are shot in landscape orientation, I convert the UIScreen bounds to a landscape orientated bounds and use that to initialize the SCNView.
    • In NYT360VideoViewController, I override viewDidLayoutSubviews to update the frame of its SCNView property. The aspect ratio is preserved even though the actual point values will be scaled to fill the containing view. Thus, the SCNView will always use a landscape orientation congruent with the device display, which will prevent distortion regardless of the aspect ratio of the containing view (inline in a table view cell, full screen in portrait mode, etc.)

    I also improved the autorotation animations by animating the yFov (field of view) changes to the SceneKit came node, to make the FOV change during automation less jarring.

    opened by jaredsinclair 3
  • Groundwork for Feature MO-7031

    Groundwork for Feature MO-7031

    MO-7031 Calls for selectively disabling vertical panning for 360 player views embedded inline in a scroll view. This PR lays down the groundwork for supporting this feature:

    • Breaks out some complex math that was implemented in NYT360CameraController.m into separate NYT360EulerAngleCalculations helper functions, both to isolate this logic and also to expose it more easily to unit tests.
    • Cleans up some inline functions and constants around the calculation code that was previously in the camera controller.
    • Adds an allowedPanningAxes property to NYT360CameraController which allows host applications to suppress x or y (or both) axis input from both device motion and pan gesture changes.
    • Implements the suppression of x/y axis movement in the newly-created NYT360EulerAngleCalculations helper functions.
    • Adds unit tests for verifying that the correct axes are suppressed when calculating new camera position and euler angles.

    With these changes in place, it should be possible in a followup PR to adjust the axis option on both NYT360ViewController and on any future inline 360 video player view.

    opened by jaredsinclair 3
  • Add a workaround for a SceneKit bug causing spurious playback.

    Add a workaround for a SceneKit bug causing spurious playback.

    There is a bug in SceneKit wherein a paused video node will begin playing again when the application becomes active. This is caused by cascading calls to [fooNode setPaused:NO] across all nodes in a scene. To prevent the video node from unpausing along with the rest of the nodes, we must subclass SKVideoNode and override setPaused:, only unpausing the node if its nytDelegate allows it.

    opened by jaredsinclair 2
  • CMMotionManager Dependency Injection

    CMMotionManager Dependency Injection

    closes #5

    This PR provides a means to pass a shared CMMotionManager from the host application to NYT360Videos. Further, it provides a protocol (and a default implementation of that protocol) which wraps a shared CMMotionManager in an API that prevents misuse of the shared manager.

    Note: I'll fix the merge conflicts later this afternoon.

    opened by jaredsinclair 2
  • Example video fails due to credential

    Example video fails due to credential

    When attempting to run the sample project on iOS 11.3 with Xcode 9.3. The example video URL (https://vp.nyt.com/video/360/hls/video.m3u8) fails to load and the console shows:

    2018-04-24 16:20:13.539335+0800 NYT360VideoExample[6285:2948864] CredStore - performQuery - Error copying matching creds.  Error=-25300, query={
        class = inet;
        "m_Limit" = "m_LimitAll";
        "r_Attributes" = 1;
        sync = syna;
    }
    

    After adjusting to a freely available video URL, the video plays fine.

    opened by jagatfx 1
  • Setting the fitted dimensions to the player scene

    Setting the fitted dimensions to the player scene

    In order to set the accurate size to the SKScene, the scene is created using the information obtained from the AVAssetTrack of the player: the dimensions of the video and the specified transformation (which could be CGAffineTransformIdentity). As a transform is applied the values can be negative so the final size is using absolute values. Besides that, to prevent exceptionally failures, the previous hardcoded size (1280x1280) was kept.

    opened by nachonet 1
  • Camera Center

    Camera Center

    Hi,

    Installed the 360 player via cocoapods and first things we saw was that the camera seems not to be centered correctly on the front facing side of the 360 video.

    Saw a Pull request for it so we integrated the modification locally but it's not on cocoapods. Do you plan to release a new version soon?

    Regards,

    Kevin

    opened by kevincador 1
  • Add additional camera angle options.

    Add additional camera angle options.

    https://jira.nyt.net/browse/MO-7073 https://jira.nyt.net/browse/MO-7078 https://jira.nyt.net/browse/MO-7079

    • Splits allowed panning axes into two separate properties: one for device motion and another for pan gesture recognition. This is so that the updated design requirements for the newsreader can be satisfied.
    • Adds a convenience method for reorienting the vertical component of the camera angle to the horizon, which is a necessary consequence of allowing vertical device motion panning while inline (per the updated newsreader design requirement).
    opened by jaredsinclair 1
  • Fix bugs related to compass angle calculations.

    Fix bugs related to compass angle calculations.

    This PR addresses several issues with compass angle calculations, and makes some small API alterations for clarity.

    1. Refactors compass angle calculations so that the angle is always correct, even when the camera is pointed directly down or up. The essential change is to use the y component of the euler angles instead of world transform math, since the former requires only minimal manipulation to be useful as a compass angle. Unit tests have been added to ensure correctness. The newly-added C function also includes a reference angle parameter to lay the foundation for any long-term future changes that require a different reference angle from video-to-video.
    2. Refactors how compass angle updates are triggered. The previous code only triggered in response to scene kit updates. The updated code is also triggered by pan gestures (there seemed to be cases where the former did not fire often enough on its own).
    3. Renames "camera angle" properties and methods to use "compass angle" nomenclature, since that's closer to the mark.
    4. Tweaks NYT360ViewControllerDelegate to more closely adhere to platform style.
    opened by jaredsinclair 1
  • 4K video is not supported.

    4K video is not supported.

    When I try to play a 4K video from remote url, it does not play smoothly. It play with. stuck.Please help me. Remote Url:- http://13.127.138.63/woweapp/assets/uploads/episodes/video_1019013136.mp4

    opened by Prempriya08 0
  • updateCameraAngleForCurrentDeviceMotion calls UI API on a background thread

    updateCameraAngleForCurrentDeviceMotion calls UI API on a background thread

    When running the example project on iOS 11.3 with Xcode 9.3, the Main Thread Checker detects that the UI API is called on a background thread instead of the main thread in updateCameraAngleForCurrentDeviceMotion() and Xcode reports -[UIApplication statusBarOrientation] must be used from main thread only on https://github.com/NYTimes/ios-360-videos/blob/develop/Sources/NYT360CameraController.m#L109.

    After surrounding the code block by dispatch_async(dispatch_get_main_queue(), ^{ ... }); the warning no longer appears.

    Main Thread Checker: UI API called on a background thread: -[UIApplication statusBarOrientation]
    PID: 6294, TID: 2952262, Thread name: (none), Queue name: com.apple.scenekit.renderingQueue.SCNView0x10bd0c930, QoS: 33
    Backtrace:
    4   NYT360Video                         0x00000001047c9a48 -[NYT360CameraController updateCameraAngleForCurrentDeviceMotion] + 384
    5   NYT360Video                         0x00000001047c8ea8 -[NYT360ViewController renderer:updateAtTime:] + 116
    6   SceneKit                            0x0000000196c5af80 <redacted> + 444
    7   SceneKit                            0x0000000196c5d018 <redacted> + 252
    8   SceneKit                            0x0000000196c5d69c <redacted> + 84
    9   SceneKit                            0x0000000196c5daa0 <redacted> + 728
    10  SceneKit                            0x0000000196d0446c <redacted> + 512
    11  SceneKit                            0x0000000196bc07dc <redacted> + 56
    12  SceneKit                            0x0000000196ccd388 <redacted> + 80
    13  libdispatch.dylib                   0x00000001047e9260 _dispatch_call_block_and_release + 24
    14  libdispatch.dylib                   0x00000001047e9220 _dispatch_client_callout + 16
    15  libdispatch.dylib                   0x00000001047f7e80 _dispatch_queue_serial_drain + 768
    16  libdispatch.dylib                   0x00000001047ec730 _dispatch_queue_invoke + 328
    17  libdispatch.dylib                   0x00000001047f8dd8 _dispatch_root_queue_drain_deferred_wlh + 352
    18  libdispatch.dylib                   0x00000001047ffebc _dispatch_workloop_worker_thread + 676
    19  libsystem_pthread.dylib             0x0000000182643e70 _pthread_wqthread + 860
    20  libsystem_pthread.dylib             0x0000000182643b08 start_wqthread + 4
    2018-04-24 16:27:12.053023+0800 NYT360VideoExample[6294:2952262] [reports] Main Thread Checker: UI API called on a background thread: -[UIApplication statusBarOrientation]
    PID: 6294, TID: 2952262, Thread name: (none), Queue name: com.apple.scenekit.renderingQueue.SCNView0x10bd0c930, QoS: 33
    Backtrace:
    4   NYT360Video                         0x00000001047c9a48 -[NYT360CameraController updateCameraAngleForCurrentDeviceMotion] + 384
    5   NYT360Video                         0x00000001047c8ea8 -[NYT360ViewController renderer:updateAtTime:] + 116
    6   SceneKit                            0x0000000196c5af80 <redacted> + 444
    7   SceneKit                            0x0000000196c5d018 <redacted> + 252
    8   SceneKit                            0x0000000196c5d69c <redacted> + 84
    9   SceneKit                            0x0000000196c5daa0 <redacted> + 728
    10  SceneKit                            0x0000000196d0446c <redacted> + 512
    11  SceneKit                            0x0000000196bc07dc <redacted> + 56
    12  SceneKit                            0x0000000196ccd388 <redacted> + 80
    13  libdispatch.dylib                   0x00000001047e9260 _dispatch_call_block_and_release + 24
    14  libdispatch.dylib                   0x00000001047e9220 _dispatch_client_callout + 16
    15  libdispatch.dylib                   0x00000001047f7e80 _dispatch_queue_serial_drain + 768
    16  libdispatch.dylib                   0x00000001047ec730 _dispatch_queue_invoke + 328
    17  libdispatch.dylib                   0x00000001047f8dd8 _dispatch_root_queue_drain_deferred_wlh + 352
    18  libdispatch.dylib                   0x00000001047ffebc _dispatch_workloop_worker_thread + 676
    19  libsystem_pthread.dylib             0x0000000182643e70 _pthread_wqthread + 860
    20  libsystem_pthread.dylib             0x0000000182643b08 start_wqthread + 4
    
    opened by jagatfx 0
  • Downloaded content is not playing in NYT360Video player

    Downloaded content is not playing in NYT360Video player

    I'm using NYT360Video to play 360 content. But I'm facing problem while playing downloaded 360 content. Downloaded content is not playing and only audio is coming. We are using Apple FailPlay Streaming download technique. Does anyone gone through this kind of issue, or any suggestions ?

    https://stackoverflow.com/questions/47375426/downloaded-content-is-not-playing-in-nyt360video-player

    opened by GovindSah1988 0
  • Quality of the video

    Quality of the video

    Hi,

    We're playing locally stored videos. We tested with good quality video (found on VLC's website and on the web). Some are 400mb 4K video.

    Compared to the experience on VLC on a Mac with the same videos, the quality of the rendering seems bad.

    Tested on an iPhone 7 Plus and on an iPad Mini 2. It may have something to do with the @2x or @3x scale.

    Thanks for your feedback.

    Kevin

    opened by kevincador 4
  • SpriteKit/SceneKit Retain Cycles

    SpriteKit/SceneKit Retain Cycles

    The following should be submitted to Apple as a bug radar.

    Bug

    Setting an SKScene as the contents of an SCNMaterialProperty leads to numerous retain cycles in internal SceneKit and SpriteKit classes.

    Steps to Reproduce

    1. Set up an SKScene with a single SKVideoNode child.
    2. Set up an SCNNode using a primitive geometry.
    3. Assign the SKScene as the contents of the SCNNode’s geometry.firstMaterial.diffuse.contents.
    4. Relinquish all references to the SKScene and SCNNode.

    Expected Behavior

    The SKScene and the SCNNode should be deallocated.

    Actual Result

    The SKScene and many other instances are leaked due to numerous retain cycles.

    Notes

    Please run the attached sample code on iOS 10. You can see the retain cycles plainly illustrated using Xcode 8's visual memory debugger. The Leaks instrument will also show some of these leaks when running on a real device running iOS 10. I have not been able to get Instruments to report a leak on iOS 9, and intermittently on iOS 10. However, the visual memory debugger in Xcode 8 always reveals the retain cycles.

    You can verify that SCNMaterialProperty.contents is the culprit by commenting out Line 63 in PlayerScene.m.

    Uploads

    Sample Project: https://www.dropbox.com/s/1j0ib2ojbr1xbym/Memory%20Leak.zip?dl=0

    Screenshot

    sk-retain-cycle
    opened by jaredsinclair 0
Releases(1.1.2)
  • 1.1.2(Jan 16, 2018)

  • 1.1.1(Jul 20, 2017)

    • More accurately size the scene (#53)
    • Fixes a crash when deallocating a NYT360ViewController (#55)
    • Fixes an issue with the reported value of the compass (#59)
    Source code(tar.gz)
    Source code(zip)
  • 1.1.0(Mar 22, 2017)

  • 1.0.0(Nov 4, 2016)

  • 0.6.2(Sep 12, 2016)

  • 0.6.1(Aug 31, 2016)

    • Fixes a potential race condition with a weakly-captured reference to self.
    • Improves compass angle calculations, and simplifies API usage of same.
    • Fixed a bug that caused audio to continue in the background on iOS 9 under certain conditions.
    Source code(tar.gz)
    Source code(zip)
  • 0.6.0(Aug 25, 2016)

    • Fix bugs related to compass angle calculations.
    • Fix bugs affecting basic playback control on iOS 10.
    • Add delegate methods needed to track usage in the newsreader.
    • Split allowed panning axes option into separate device motion / pan gesture options.
    • Style and formatting cleanup.
    Source code(tar.gz)
    Source code(zip)
  • 0.5.3(Aug 22, 2016)

    • Fixed an issue that caused spurious playback to begin whenever the host application became active.
    • Fixed an issue that caused the 360 scene kit view to be visible outside the bounds of the containing view controller's view.
    Source code(tar.gz)
    Source code(zip)
  • 0.5.2(Aug 18, 2016)

  • 0.5.1(Aug 17, 2016)

  • 0.5.0(Aug 12, 2016)

  • 0.4.0(Aug 5, 2016)

    • Exposes the pan gesture recognizer used for manual camera panning so that host applications can properly configure their other gesture recognizers.
    Source code(tar.gz)
    Source code(zip)
  • 0.3.3(Aug 4, 2016)

  • 0.3.2(Aug 4, 2016)

  • 0.3.1(Aug 4, 2016)

  • 0.3.0(Aug 4, 2016)

    • Adds a low-pass noise filter to device motion update processing, which helps prevent spurious input without requiring the user to calibrate their device.
    • Exposes playback methods from NYT360ViewController so that users don't have to use the AVPlayer playback controls (which do not work as documented).
    • Exposes option to selectively disable panning axes (vertical, horizontal) which will be needed for inline autoplay in a scroll view.
    • Fixes a bug that caused visual distortions when resizing NYT360ViewController's view.
    • Adds dependency injection for shared CMMotionManager (including a protocol for a shared wrapper around that shared manager) so that host projects can use a single motion manager throughout an application.
    • Tidies up existing code for clarity and consistency.
    Source code(tar.gz)
    Source code(zip)
Swifty360Player - iOS 360-degree video player streaming from an AVPlayer.

Swifty360Player iOS 360-degree video player streaming from an AVPlayer. Demo Requirements Swifty360Player Version Minimum iOS Target Swift Version 0.2

Abdullah Selek 148 Dec 18, 2022
Open Source iOS 360 Degree Panorama Video Player.

?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? The Metal with Swift 5.0 version is comming ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 360 VR Player A Open Source, Ad-free, Na

Hanton Yang 2k Dec 24, 2022
360 video player for iOS written in swift - a subset of SceneKit that works

DDDKit An open source library to support 360 videos and pictures. It's designed as a generic 3D library that you can use for much more! Example of use

Guillaume Sabran 123 Aug 9, 2022
BMPlayer - A video player for iOS, based on AVPlayer, support the horizontal, vertical screen

A video player for iOS, based on AVPlayer, support the horizontal, vertical screen. support adjust volume, brightness and seek by slide, support subtitles.

Eliyar Eziz 1.8k Jan 4, 2023
Pretty iOS mobile screens + AVPlayer video view ––– made in SwiftUI

UrbanVillageProjectScreens Recreated UI screens from the conceptual Urban Village Project. Read more about the project here. Please open an issue if y

10011.co 23 Dec 29, 2022
Gumlet analytics integration with AVPlayer for iOS native applications.

gumlet-Insights-avplayer Gumlet Insights integration with AVPlayer for iOS native applications. This Insights enables you to get useful data about vid

Gumlet 0 Dec 15, 2021
Player View is a delegated view using AVPlayer of Swift

PlayerView [![CI Status](http://img.shields.io/travis/David Alejandro/PlayerView.svg?style=flat)](https://travis-ci.org/David Alejandro/PlayerView) An

null 131 Oct 25, 2022
VIMVideoPlayer is a simple wrapper around the AVPlayer and AVPlayerLayer classes.

VIMVideoPlayer is a simple wrapper around the AVPlayer and AVPlayerLayer classes.

Vimeo 280 May 11, 2022
SuperPlayer is a library to wrap AVPlayer with Composable Architecture.

SuperPlayer is a library to wrap AVPlayer with Composable Architecture. It can be used in SwiftUI and UIKit.

Tokopedia 13 Dec 21, 2022
A fully functional short video app project.Record a six secends video while playing prank sounds.

prankPro A fully functional short video app project How to Install 1. use coconapod to init your xcode environment. 2. change the app-keys in `applica

huijimuhe 258 Jun 19, 2022
JDVideoKit - You can easily transfer your video into Three common video type.

JDVideoKit Introduction You can easily transfer your video into Three common video type. You can use set up camera easily. Installation pod 'JDVideoK

郭介騵 24 Sep 9, 2021
A Swift library to upload video files to api.video platform.

api.video IOS video uploader api.video is the video infrastructure for product builders. Lightning fast video APIs for integrating, scaling, and manag

api.video 7 Dec 9, 2022
Video mp4 record save display - How to Take , Save and Display a .mp4 Video

Technicalisto How to Take , Save and Display a .mp4 Video Add your design with v

Aya Baghdadi 2 Aug 7, 2022
api.video is the video infrastructure for product builders

api.video is the video infrastructure for product builders. Lightning fast video APIs for integrating, scaling, and managing on-demand & low latency live streaming features in your app.

api.video 4 Jun 27, 2022
▶️ video player in Swift, simple way to play and stream media on iOS/tvOS

Player Player is a simple iOS video player library written in Swift. Looking for an obj-c video player? Check out PBJVideoPlayer (obj-c). Looking for

patrick piemonte 2k Jan 2, 2023
VGPlayer - 📺 A simple iOS video player by Vein.

Swift developed based on AVPlayer iOS player,support horizontal gestures Fast forward, pause, vertical gestures Support brightness and volume adjustment, support full screen, adaptive screen rotation direction.

Wen Rong 399 Dec 23, 2022
📱iOS app to extract full-resolution video frames as images.

Frame Grabber is a focused, easy-to-use iOS app to extract full-resolution video frames as images. Perfect to capture and share your favorite video mo

Arthur Hammer 315 Dec 17, 2022
FWVideoPlayer is video Player for iOS in Swift.

FWVideoPlayer Desc FWVideoPlayer is video Player for iOS in Swift. It can play video and audio. You can use it easy. Example To run the example projec

null 1 Oct 15, 2021
iOS video player for trailer. You can customize layout for the control panel. Support PiP and DRM.

iOS video player for trailer. You can customize layout for the control panel. Support PiP and DRM.

Abe Wang 11 Nov 7, 2022