2015-12-22 16:39:04 -07:00
|
|
|
#import <AVFoundation/AVFoundation.h>
|
|
|
|
#import "AVKit/AVKit.h"
|
2016-03-31 13:03:54 -06:00
|
|
|
#import "UIView+FindUIViewController.h"
|
2016-03-31 15:10:25 -06:00
|
|
|
#import "RCTVideoPlayerViewController.h"
|
2016-04-01 02:52:05 -06:00
|
|
|
#import "RCTVideoPlayerViewControllerDelegate.h"
|
2018-10-09 17:01:41 -06:00
|
|
|
#import <React/RCTComponent.h>
|
2018-10-26 07:21:41 -06:00
|
|
|
#import <React/RCTBridgeModule.h>
|
2019-12-09 21:40:49 -07:00
|
|
|
@import GoogleInteractiveMediaAds;
|
2015-04-06 13:17:32 -06:00
|
|
|
|
2018-07-18 18:06:09 -06:00
|
|
|
#if __has_include(<react-native-video/RCTVideoCache.h>)
|
|
|
|
#import <react-native-video/RCTVideoCache.h>
|
2018-08-08 16:37:18 -06:00
|
|
|
#import <DVAssetLoaderDelegate/DVURLAsset.h>
|
|
|
|
#import <DVAssetLoaderDelegate/DVAssetLoaderDelegate.h>
|
2018-07-18 18:06:09 -06:00
|
|
|
#endif
|
2015-03-30 23:07:55 -06:00
|
|
|
|
2015-04-06 13:17:32 -06:00
|
|
|
@class RCTEventDispatcher;
|
2018-07-18 18:06:09 -06:00
|
|
|
#if __has_include(<react-native-video/RCTVideoCache.h>)
|
2021-06-15 06:42:07 -06:00
|
|
|
@interface RCTVideo : UIView <RCTVideoPlayerViewControllerDelegate, DVAssetLoaderDelegatesDelegate, AVAssetResourceLoaderDelegate, IMAAdsLoaderDelegate, IMAAdsManagerDelegate>
|
2019-03-11 20:55:36 -06:00
|
|
|
#elif TARGET_OS_TV
|
Add iOS and Android basic DRM support (#1445)
This PR adds support for DRM streams on iOS (Fairplay) and Android (Playready, Widevine, Clearkey)
I am neither Android nor iOS developer, so feel free to provide feedback to improve this PR.
**Test stream for ANDROID:**
```
testStream = {
uri: 'http://profficialsite.origin.mediaservices.windows.net/c51358ea-9a5e-4322-8951-897d640fdfd7/tearsofsteel_4k.ism/manifest(format=mpd-time-csf)',
type: 'mpd',
drm: {
type: DRMType.PLAYREADY,
licenseServer: 'http://test.playready.microsoft.com/service/rightsmanager.asmx?cfg=(persist:false,sl:150)'
}
};
```
or
```
{
uri: 'https://media.axprod.net/TestVectors/v7-MultiDRM-SingleKey/Manifest_1080p.mpd',
drm: {
type: 'widevine', //or DRMType.WIDEVINE
licenseServer: 'https://drm-widevine-licensing.axtest.net/AcquireLicense',
headers: {
'X-AxDRM-Message': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ2ZXJzaW9uIjoxLCJjb21fa2V5X2lkIjoiYjMzNjRlYjUtNTFmNi00YWUzLThjOTgtMzNjZWQ1ZTMxYzc4IiwibWVzc2FnZSI6eyJ0eXBlIjoiZW50aXRsZW1lbnRfbWVzc2FnZSIsImZpcnN0X3BsYXlfZXhwaXJhdGlvbiI6NjAsInBsYXlyZWFkeSI6eyJyZWFsX3RpbWVfZXhwaXJhdGlvbiI6dHJ1ZX0sImtleXMiOlt7ImlkIjoiOWViNDA1MGQtZTQ0Yi00ODAyLTkzMmUtMjdkNzUwODNlMjY2IiwiZW5jcnlwdGVkX2tleSI6ImxLM09qSExZVzI0Y3Iya3RSNzRmbnc9PSJ9XX19.FAbIiPxX8BHi9RwfzD7Yn-wugU19ghrkBFKsaCPrZmU'
},
}
}
```
**Test stream for iOS:**
Sorry but I can not provide free streams to test. If anyone can provide test streams, or found some we can use, please let me know to also test them.
It has been tested with a private provider and they work, at least with the `getLicense` override method. (An example implementation is provided in the README)
2020-08-12 19:56:21 -06:00
|
|
|
@interface RCTVideo : UIView <RCTVideoPlayerViewControllerDelegate, AVAssetResourceLoaderDelegate>
|
2018-07-18 18:06:09 -06:00
|
|
|
#else
|
2021-06-15 06:42:07 -06:00
|
|
|
@interface RCTVideo : UIView <RCTVideoPlayerViewControllerDelegate, AVPictureInPictureControllerDelegate, AVAssetResourceLoaderDelegate, IMAAdsLoaderDelegate, IMAAdsManagerDelegate>
|
2018-07-18 18:06:09 -06:00
|
|
|
#endif
|
2015-03-30 23:07:55 -06:00
|
|
|
|
2019-06-19 01:22:10 -06:00
|
|
|
@property (nonatomic, copy) RCTDirectEventBlock onVideoLoadStart;
|
|
|
|
@property (nonatomic, copy) RCTDirectEventBlock onVideoLoad;
|
|
|
|
@property (nonatomic, copy) RCTDirectEventBlock onVideoBuffer;
|
|
|
|
@property (nonatomic, copy) RCTDirectEventBlock onVideoError;
|
|
|
|
@property (nonatomic, copy) RCTDirectEventBlock onVideoProgress;
|
|
|
|
@property (nonatomic, copy) RCTDirectEventBlock onBandwidthUpdate;
|
|
|
|
@property (nonatomic, copy) RCTDirectEventBlock onVideoSeek;
|
|
|
|
@property (nonatomic, copy) RCTDirectEventBlock onVideoEnd;
|
|
|
|
@property (nonatomic, copy) RCTDirectEventBlock onTimedMetadata;
|
|
|
|
@property (nonatomic, copy) RCTDirectEventBlock onVideoAudioBecomingNoisy;
|
|
|
|
@property (nonatomic, copy) RCTDirectEventBlock onVideoFullscreenPlayerWillPresent;
|
|
|
|
@property (nonatomic, copy) RCTDirectEventBlock onVideoFullscreenPlayerDidPresent;
|
|
|
|
@property (nonatomic, copy) RCTDirectEventBlock onVideoFullscreenPlayerWillDismiss;
|
|
|
|
@property (nonatomic, copy) RCTDirectEventBlock onVideoFullscreenPlayerDidDismiss;
|
|
|
|
@property (nonatomic, copy) RCTDirectEventBlock onReadyForDisplay;
|
|
|
|
@property (nonatomic, copy) RCTDirectEventBlock onPlaybackStalled;
|
|
|
|
@property (nonatomic, copy) RCTDirectEventBlock onPlaybackResume;
|
|
|
|
@property (nonatomic, copy) RCTDirectEventBlock onPlaybackRateChange;
|
|
|
|
@property (nonatomic, copy) RCTDirectEventBlock onVideoExternalPlaybackChange;
|
|
|
|
@property (nonatomic, copy) RCTDirectEventBlock onPictureInPictureStatusChanged;
|
|
|
|
@property (nonatomic, copy) RCTDirectEventBlock onRestoreUserInterfaceForPictureInPictureStop;
|
Add iOS and Android basic DRM support (#1445)
This PR adds support for DRM streams on iOS (Fairplay) and Android (Playready, Widevine, Clearkey)
I am neither Android nor iOS developer, so feel free to provide feedback to improve this PR.
**Test stream for ANDROID:**
```
testStream = {
uri: 'http://profficialsite.origin.mediaservices.windows.net/c51358ea-9a5e-4322-8951-897d640fdfd7/tearsofsteel_4k.ism/manifest(format=mpd-time-csf)',
type: 'mpd',
drm: {
type: DRMType.PLAYREADY,
licenseServer: 'http://test.playready.microsoft.com/service/rightsmanager.asmx?cfg=(persist:false,sl:150)'
}
};
```
or
```
{
uri: 'https://media.axprod.net/TestVectors/v7-MultiDRM-SingleKey/Manifest_1080p.mpd',
drm: {
type: 'widevine', //or DRMType.WIDEVINE
licenseServer: 'https://drm-widevine-licensing.axtest.net/AcquireLicense',
headers: {
'X-AxDRM-Message': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ2ZXJzaW9uIjoxLCJjb21fa2V5X2lkIjoiYjMzNjRlYjUtNTFmNi00YWUzLThjOTgtMzNjZWQ1ZTMxYzc4IiwibWVzc2FnZSI6eyJ0eXBlIjoiZW50aXRsZW1lbnRfbWVzc2FnZSIsImZpcnN0X3BsYXlfZXhwaXJhdGlvbiI6NjAsInBsYXlyZWFkeSI6eyJyZWFsX3RpbWVfZXhwaXJhdGlvbiI6dHJ1ZX0sImtleXMiOlt7ImlkIjoiOWViNDA1MGQtZTQ0Yi00ODAyLTkzMmUtMjdkNzUwODNlMjY2IiwiZW5jcnlwdGVkX2tleSI6ImxLM09qSExZVzI0Y3Iya3RSNzRmbnc9PSJ9XX19.FAbIiPxX8BHi9RwfzD7Yn-wugU19ghrkBFKsaCPrZmU'
},
}
}
```
**Test stream for iOS:**
Sorry but I can not provide free streams to test. If anyone can provide test streams, or found some we can use, please let me know to also test them.
It has been tested with a private provider and they work, at least with the `getLicense` override method. (An example implementation is provided in the README)
2020-08-12 19:56:21 -06:00
|
|
|
@property (nonatomic, copy) RCTDirectEventBlock onGetLicense;
|
2021-07-26 07:11:37 -06:00
|
|
|
@property (nonatomic, copy) RCTDirectEventBlock onReceiveAdEvent;
|
Add iOS and Android basic DRM support (#1445)
This PR adds support for DRM streams on iOS (Fairplay) and Android (Playready, Widevine, Clearkey)
I am neither Android nor iOS developer, so feel free to provide feedback to improve this PR.
**Test stream for ANDROID:**
```
testStream = {
uri: 'http://profficialsite.origin.mediaservices.windows.net/c51358ea-9a5e-4322-8951-897d640fdfd7/tearsofsteel_4k.ism/manifest(format=mpd-time-csf)',
type: 'mpd',
drm: {
type: DRMType.PLAYREADY,
licenseServer: 'http://test.playready.microsoft.com/service/rightsmanager.asmx?cfg=(persist:false,sl:150)'
}
};
```
or
```
{
uri: 'https://media.axprod.net/TestVectors/v7-MultiDRM-SingleKey/Manifest_1080p.mpd',
drm: {
type: 'widevine', //or DRMType.WIDEVINE
licenseServer: 'https://drm-widevine-licensing.axtest.net/AcquireLicense',
headers: {
'X-AxDRM-Message': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ2ZXJzaW9uIjoxLCJjb21fa2V5X2lkIjoiYjMzNjRlYjUtNTFmNi00YWUzLThjOTgtMzNjZWQ1ZTMxYzc4IiwibWVzc2FnZSI6eyJ0eXBlIjoiZW50aXRsZW1lbnRfbWVzc2FnZSIsImZpcnN0X3BsYXlfZXhwaXJhdGlvbiI6NjAsInBsYXlyZWFkeSI6eyJyZWFsX3RpbWVfZXhwaXJhdGlvbiI6dHJ1ZX0sImtleXMiOlt7ImlkIjoiOWViNDA1MGQtZTQ0Yi00ODAyLTkzMmUtMjdkNzUwODNlMjY2IiwiZW5jcnlwdGVkX2tleSI6ImxLM09qSExZVzI0Y3Iya3RSNzRmbnc9PSJ9XX19.FAbIiPxX8BHi9RwfzD7Yn-wugU19ghrkBFKsaCPrZmU'
},
}
}
```
**Test stream for iOS:**
Sorry but I can not provide free streams to test. If anyone can provide test streams, or found some we can use, please let me know to also test them.
It has been tested with a private provider and they work, at least with the `getLicense` override method. (An example implementation is provided in the README)
2020-08-12 19:56:21 -06:00
|
|
|
|
|
|
|
typedef NS_ENUM(NSInteger, RCTVideoError) {
|
|
|
|
RCTVideoErrorFromJSPart,
|
|
|
|
RCTVideoErrorLicenseRequestNotOk,
|
|
|
|
RCTVideoErrorNoDataFromLicenseRequest,
|
|
|
|
RCTVideoErrorNoSPC,
|
|
|
|
RCTVideoErrorNoDataRequest,
|
|
|
|
RCTVideoErrorNoCertificateData,
|
|
|
|
RCTVideoErrorNoCertificateURL,
|
|
|
|
RCTVideoErrorNoFairplayDRM,
|
|
|
|
RCTVideoErrorNoDRMData
|
|
|
|
};
|
2019-12-09 21:40:49 -07:00
|
|
|
/// Playhead used by the SDK to track content video progress and insert mid-rolls.
|
|
|
|
@property(nonatomic, strong) IMAAVPlayerContentPlayhead *contentPlayhead;
|
|
|
|
/// Entry point for the SDK. Used to make ad requests.
|
|
|
|
@property(nonatomic, strong) IMAAdsLoader *adsLoader;
|
|
|
|
/// Main point of interaction with the SDK. Created by the SDK as the result of an ad request.
|
|
|
|
@property(nonatomic, strong) IMAAdsManager *adsManager;
|
2016-12-12 17:16:11 -07:00
|
|
|
|
2015-04-06 13:17:32 -06:00
|
|
|
- (instancetype)initWithEventDispatcher:(RCTEventDispatcher *)eventDispatcher NS_DESIGNATED_INITIALIZER;
|
|
|
|
|
2015-12-22 16:39:04 -07:00
|
|
|
- (AVPlayerViewController*)createPlayerViewController:(AVPlayer*)player withPlayerItem:(AVPlayerItem*)playerItem;
|
|
|
|
|
2018-10-26 07:21:41 -06:00
|
|
|
- (void)save:(NSDictionary *)options resolve:(RCTPromiseResolveBlock)resolve reject:(RCTPromiseRejectBlock)reject;
|
Add iOS and Android basic DRM support (#1445)
This PR adds support for DRM streams on iOS (Fairplay) and Android (Playready, Widevine, Clearkey)
I am neither Android nor iOS developer, so feel free to provide feedback to improve this PR.
**Test stream for ANDROID:**
```
testStream = {
uri: 'http://profficialsite.origin.mediaservices.windows.net/c51358ea-9a5e-4322-8951-897d640fdfd7/tearsofsteel_4k.ism/manifest(format=mpd-time-csf)',
type: 'mpd',
drm: {
type: DRMType.PLAYREADY,
licenseServer: 'http://test.playready.microsoft.com/service/rightsmanager.asmx?cfg=(persist:false,sl:150)'
}
};
```
or
```
{
uri: 'https://media.axprod.net/TestVectors/v7-MultiDRM-SingleKey/Manifest_1080p.mpd',
drm: {
type: 'widevine', //or DRMType.WIDEVINE
licenseServer: 'https://drm-widevine-licensing.axtest.net/AcquireLicense',
headers: {
'X-AxDRM-Message': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ2ZXJzaW9uIjoxLCJjb21fa2V5X2lkIjoiYjMzNjRlYjUtNTFmNi00YWUzLThjOTgtMzNjZWQ1ZTMxYzc4IiwibWVzc2FnZSI6eyJ0eXBlIjoiZW50aXRsZW1lbnRfbWVzc2FnZSIsImZpcnN0X3BsYXlfZXhwaXJhdGlvbiI6NjAsInBsYXlyZWFkeSI6eyJyZWFsX3RpbWVfZXhwaXJhdGlvbiI6dHJ1ZX0sImtleXMiOlt7ImlkIjoiOWViNDA1MGQtZTQ0Yi00ODAyLTkzMmUtMjdkNzUwODNlMjY2IiwiZW5jcnlwdGVkX2tleSI6ImxLM09qSExZVzI0Y3Iya3RSNzRmbnc9PSJ9XX19.FAbIiPxX8BHi9RwfzD7Yn-wugU19ghrkBFKsaCPrZmU'
},
}
}
```
**Test stream for iOS:**
Sorry but I can not provide free streams to test. If anyone can provide test streams, or found some we can use, please let me know to also test them.
It has been tested with a private provider and they work, at least with the `getLicense` override method. (An example implementation is provided in the README)
2020-08-12 19:56:21 -06:00
|
|
|
- (void)setLicenseResult:(NSString * )license;
|
|
|
|
- (BOOL)setLicenseResultError:(NSString * )error;
|
2018-10-26 07:21:41 -06:00
|
|
|
|
2021-07-26 07:11:37 -06:00
|
|
|
+ (NSString *)convertEventToString:(IMAAdEventType)event;
|
|
|
|
|
2015-03-30 23:07:55 -06:00
|
|
|
@end
|