update
@@ -61,9 +61,6 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
/// 锁定屏幕按钮
|
||||
@property (nonatomic, strong, readonly) UIButton *lockBtn;
|
||||
|
||||
/// 横屏时候是否显示自定义状态栏(iOS13+),默认 NO.
|
||||
@property (nonatomic, assign) BOOL showCustomStatusBar;
|
||||
|
||||
/// 播放器
|
||||
@property (nonatomic, weak) ZFPlayerController *player;
|
||||
|
||||
@@ -103,9 +100,6 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
/// 视频尺寸改变
|
||||
- (void)videoPlayer:(ZFPlayerController *)videoPlayer presentationSizeChanged:(CGSize)size;
|
||||
|
||||
/// 视频view已经旋转
|
||||
- (void)videoPlayer:(ZFPlayerController *)videoPlayer orientationWillChange:(ZFOrientationObserver *)observer;
|
||||
|
||||
/// 标题和全屏模式
|
||||
- (void)showTitle:(NSString *_Nullable)title fullScreenMode:(ZFFullScreenMode)fullScreenMode;
|
||||
|
||||
@@ -25,7 +25,6 @@
|
||||
#import "ZFLandScapeControlView.h"
|
||||
#import "UIView+ZFFrame.h"
|
||||
#import "ZFUtilities.h"
|
||||
#import "ZFPlayerStatusBar.h"
|
||||
#if __has_include(<ZFPlayer/ZFPlayer.h>)
|
||||
#import <ZFPlayer/ZFPlayerConst.h>
|
||||
#else
|
||||
@@ -33,8 +32,6 @@
|
||||
#endif
|
||||
|
||||
@interface ZFLandScapeControlView () <ZFSliderViewDelegate>
|
||||
|
||||
@property (nonatomic, strong) ZFPlayerStatusBar *statusBarView;
|
||||
/// 顶部工具栏
|
||||
@property (nonatomic, strong) UIView *topToolView;
|
||||
/// 返回按钮
|
||||
@@ -67,7 +64,6 @@
|
||||
- (instancetype)initWithFrame:(CGRect)frame {
|
||||
if (self = [super initWithFrame:frame]) {
|
||||
[self addSubview:self.topToolView];
|
||||
[self.topToolView addSubview:self.statusBarView];
|
||||
[self.topToolView addSubview:self.backBtn];
|
||||
[self.topToolView addSubview:self.titleLabel];
|
||||
[self addSubview:self.bottomToolView];
|
||||
@@ -104,20 +100,10 @@
|
||||
min_w = min_view_w;
|
||||
min_h = iPhoneX ? 110 : 80;
|
||||
self.topToolView.frame = CGRectMake(min_x, min_y, min_w, min_h);
|
||||
|
||||
min_x = 0;
|
||||
min_y = 0;
|
||||
min_w = min_view_w;
|
||||
min_h = 20;
|
||||
self.statusBarView.frame = CGRectMake(min_x, min_y, min_w, min_h);
|
||||
|
||||
min_x = (iPhoneX && UIInterfaceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation)) ? 44: 15;
|
||||
if (@available(iOS 13.0, *)) {
|
||||
if (self.showCustomStatusBar) {
|
||||
min_y = self.statusBarView.zf_bottom;
|
||||
} else {
|
||||
min_y = UIInterfaceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation) ? 10 : (iPhoneX ? 40 : 20);
|
||||
}
|
||||
min_y = UIInterfaceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation) ? 10 : (iPhoneX ? 40 : 20);
|
||||
} else {
|
||||
min_y = (iPhoneX && UIInterfaceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation)) ? 10: (iPhoneX ? 40 : 20);
|
||||
}
|
||||
@@ -245,8 +231,8 @@
|
||||
@zf_weakify(self)
|
||||
[self.player seekToTime:self.player.totalTime*value completionHandler:^(BOOL finished) {
|
||||
@zf_strongify(self)
|
||||
self.slider.isdragging = NO;
|
||||
if (finished) {
|
||||
self.slider.isdragging = NO;
|
||||
if (self.sliderValueChanged) self.sliderValueChanged(value);
|
||||
if (self.seekToPlay) {
|
||||
[self.player.currentPlayerManager play];
|
||||
@@ -290,7 +276,6 @@
|
||||
self.topToolView.alpha = 1;
|
||||
self.bottomToolView.alpha = 1;
|
||||
self.isShow = NO;
|
||||
self.lockBtn.selected = self.player.isLockedScreen;
|
||||
}
|
||||
|
||||
- (void)showControlView {
|
||||
@@ -340,17 +325,6 @@
|
||||
self.lockBtn.hidden = self.player.orientationObserver.fullScreenMode == ZFFullScreenModePortrait;
|
||||
}
|
||||
|
||||
/// 视频view即将旋转
|
||||
- (void)videoPlayer:(ZFPlayerController *)videoPlayer orientationWillChange:(ZFOrientationObserver *)observer {
|
||||
if (self.showCustomStatusBar) {
|
||||
if (self.hidden) {
|
||||
[self.statusBarView destoryTimer];
|
||||
} else {
|
||||
[self.statusBarView startTimer];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
- (void)videoPlayer:(ZFPlayerController *)videoPlayer currentTime:(NSTimeInterval)currentTime totalTime:(NSTimeInterval)totalTime {
|
||||
if (!self.slider.isdragging) {
|
||||
NSString *currentTimeString = [ZFUtilities convertTimeSecond:currentTime];
|
||||
@@ -397,21 +371,8 @@
|
||||
self.lockBtn.hidden = fullScreenMode == ZFFullScreenModePortrait;
|
||||
}
|
||||
|
||||
- (void)setShowCustomStatusBar:(BOOL)showCustomStatusBar {
|
||||
_showCustomStatusBar = showCustomStatusBar;
|
||||
self.statusBarView.hidden = !showCustomStatusBar;
|
||||
}
|
||||
|
||||
#pragma mark - getter
|
||||
|
||||
- (ZFPlayerStatusBar *)statusBarView {
|
||||
if (!_statusBarView) {
|
||||
_statusBarView = [[ZFPlayerStatusBar alloc] init];
|
||||
_statusBarView.hidden = YES;
|
||||
}
|
||||
return _statusBarView;
|
||||
}
|
||||
|
||||
- (UIView *)topToolView {
|
||||
if (!_topToolView) {
|
||||
_topToolView = [[UIView alloc] init];
|
||||
|
Before Width: | Height: | Size: 339 B After Width: | Height: | Size: 339 B |
|
Before Width: | Height: | Size: 513 B After Width: | Height: | Size: 513 B |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 3.7 KiB |
|
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 4.1 KiB |
|
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 3.7 KiB |
|
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 3.9 KiB |
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 761 B After Width: | Height: | Size: 761 B |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 615 B After Width: | Height: | Size: 615 B |
|
Before Width: | Height: | Size: 834 B After Width: | Height: | Size: 834 B |
|
Before Width: | Height: | Size: 565 B After Width: | Height: | Size: 565 B |
|
Before Width: | Height: | Size: 772 B After Width: | Height: | Size: 772 B |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 3.7 KiB |
|
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 3.7 KiB |
|
Before Width: | Height: | Size: 4.0 KiB After Width: | Height: | Size: 4.0 KiB |
|
Before Width: | Height: | Size: 407 B After Width: | Height: | Size: 407 B |
|
Before Width: | Height: | Size: 585 B After Width: | Height: | Size: 585 B |
|
Before Width: | Height: | Size: 168 B After Width: | Height: | Size: 168 B |
|
Before Width: | Height: | Size: 188 B After Width: | Height: | Size: 188 B |
|
Before Width: | Height: | Size: 453 B After Width: | Height: | Size: 453 B |
|
Before Width: | Height: | Size: 660 B After Width: | Height: | Size: 660 B |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 577 B After Width: | Height: | Size: 577 B |
|
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 3.0 KiB |
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 3.7 KiB |
|
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 3.8 KiB |
|
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 4.1 KiB |
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 3.6 KiB |
|
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 3.9 KiB |
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.5 KiB |
|
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.6 KiB |
|
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 4.1 KiB |
@@ -110,9 +110,6 @@
|
||||
/// 是否自定义禁止pan手势,默认 NO.
|
||||
@property (nonatomic, assign) BOOL customDisablePanMovingDirection;
|
||||
|
||||
/// 横屏时候是否显示自定义状态栏(iOS13+),默认 NO.
|
||||
@property (nonatomic, assign) BOOL showCustomStatusBar;
|
||||
|
||||
/// 全屏模式
|
||||
@property (nonatomic, assign) ZFFullScreenMode fullScreenMode;
|
||||
|
||||
@@ -351,6 +351,8 @@
|
||||
if (self.controlViewAppeared) {
|
||||
[self hideControlViewWithAnimated:YES];
|
||||
} else {
|
||||
/// 显示之前先把控制层复位,先隐藏后显示
|
||||
[self hideControlViewWithAnimated:NO];
|
||||
[self showControlViewWithAnimated:YES];
|
||||
}
|
||||
}
|
||||
@@ -528,7 +530,15 @@
|
||||
} else {
|
||||
[self.volumeBrightnessView addSystemVolumeView];
|
||||
}
|
||||
[self.landScapeControlView videoPlayer:videoPlayer orientationWillChange:observer];
|
||||
}
|
||||
|
||||
/// 视频view已经旋转
|
||||
- (void)videoPlayer:(ZFPlayerController *)videoPlayer orientationDidChanged:(ZFOrientationObserver *)observer {
|
||||
if (self.controlViewAppeared) {
|
||||
[self showControlViewWithAnimated:NO];
|
||||
} else {
|
||||
[self hideControlViewWithAnimated:NO];
|
||||
}
|
||||
}
|
||||
|
||||
/// 锁定旋转方向
|
||||
@@ -644,11 +654,6 @@
|
||||
self.player.orientationObserver.fullScreenMode = fullScreenMode;
|
||||
}
|
||||
|
||||
- (void)setShowCustomStatusBar:(BOOL)showCustomStatusBar {
|
||||
_showCustomStatusBar = showCustomStatusBar;
|
||||
self.landScapeControlView.showCustomStatusBar = showCustomStatusBar;
|
||||
}
|
||||
|
||||
#pragma mark - getter
|
||||
|
||||
- (UIImageView *)bgImgView {
|
||||
@@ -188,8 +188,8 @@
|
||||
@zf_weakify(self)
|
||||
[self.player seekToTime:self.player.totalTime*value completionHandler:^(BOOL finished) {
|
||||
@zf_strongify(self)
|
||||
self.slider.isdragging = NO;
|
||||
if (finished) {
|
||||
self.slider.isdragging = NO;
|
||||
if (self.sliderValueChanged) self.sliderValueChanged(value);
|
||||
}
|
||||
}];
|
||||
@@ -35,11 +35,6 @@
|
||||
// 屏幕的高
|
||||
#define ZFPlayer_ScreenHeight [[UIScreen mainScreen] bounds].size.height
|
||||
|
||||
#define UIColorFromHex(rgbValue) [UIColor \
|
||||
colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 \
|
||||
green:((float)((rgbValue & 0xFF00) >> 8))/255.0 \
|
||||
blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]
|
||||
|
||||
@interface ZFUtilities : NSObject
|
||||
|
||||
+ (NSString *)convertTimeSecond:(NSInteger)timeSecond;
|
||||
@@ -0,0 +1,79 @@
|
||||
/*
|
||||
* IJKAVMoviePlayerController.h
|
||||
*
|
||||
* Copyright (c) 2014 Bilibili
|
||||
* Copyright (c) 2014 Zhang Rui <bbcallen@gmail.com>
|
||||
*
|
||||
* This file is part of ijkPlayer.
|
||||
*
|
||||
* ijkPlayer is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* ijkPlayer is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with ijkPlayer; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
/*
|
||||
File: AVPlayerDemoPlaybackViewController.h
|
||||
Abstract: UIViewController managing a playback view, thumbnail view, and associated playback UI.
|
||||
Version: 1.3
|
||||
|
||||
Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple
|
||||
Inc. ("Apple") in consideration of your agreement to the following
|
||||
terms, and your use, installation, modification or redistribution of
|
||||
this Apple software constitutes acceptance of these terms. If you do
|
||||
not agree with these terms, please do not use, install, modify or
|
||||
redistribute this Apple software.
|
||||
|
||||
In consideration of your agreement to abide by the following terms, and
|
||||
subject to these terms, Apple grants you a personal, non-exclusive
|
||||
license, under Apple's copyrights in this original Apple software (the
|
||||
"Apple Software"), to use, reproduce, modify and redistribute the Apple
|
||||
Software, with or without modifications, in source and/or binary forms;
|
||||
provided that if you redistribute the Apple Software in its entirety and
|
||||
without modifications, you must retain this notice and the following
|
||||
text and disclaimers in all such redistributions of the Apple Software.
|
||||
Neither the name, trademarks, service marks or logos of Apple Inc. may
|
||||
be used to endorse or promote products derived from the Apple Software
|
||||
without specific prior written permission from Apple. Except as
|
||||
expressly stated in this notice, no other rights or licenses, express or
|
||||
implied, are granted by Apple herein, including but not limited to any
|
||||
patent rights that may be infringed by your derivative works or by other
|
||||
works in which the Apple Software may be incorporated.
|
||||
|
||||
The Apple Software is provided by Apple on an "AS IS" basis. APPLE
|
||||
MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
|
||||
THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
|
||||
FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
|
||||
OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
|
||||
|
||||
IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
|
||||
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
|
||||
MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
|
||||
AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
|
||||
STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
Copyright (C) 2014 Apple Inc. All Rights Reserved.
|
||||
|
||||
*/
|
||||
|
||||
#import "IJKMediaPlayback.h"
|
||||
|
||||
@interface IJKAVMoviePlayerController : NSObject <IJKMediaPlayback>
|
||||
|
||||
- (id)initWithContentURL:(NSURL *)aUrl;
|
||||
- (id)initWithContentURLString:(NSString *)aUrl;
|
||||
+ (id)getInstance:(NSString *)aUrl;
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,65 @@
|
||||
/*
|
||||
* Copyright (c) 2016 Bilibili
|
||||
* Copyright (c) 2016 Zhang Rui <bbcallen@gmail.com>
|
||||
*
|
||||
* This file is part of ijkPlayer.
|
||||
*
|
||||
* ijkPlayer is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* ijkPlayer is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with ijkPlayer; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
@interface IJKFFMonitor : NSObject
|
||||
|
||||
- (instancetype)init;
|
||||
|
||||
@property(nonatomic) NSDictionary *mediaMeta;
|
||||
@property(nonatomic) NSDictionary *videoMeta;
|
||||
@property(nonatomic) NSDictionary *audioMeta;
|
||||
|
||||
@property(nonatomic, readonly) int64_t duration; // milliseconds
|
||||
@property(nonatomic, readonly) int64_t bitrate; // bit / sec
|
||||
@property(nonatomic, readonly) float fps; // frame / sec
|
||||
@property(nonatomic, readonly) int width; // width
|
||||
@property(nonatomic, readonly) int height; // height
|
||||
@property(nonatomic, readonly) NSString *vcodec; // video codec
|
||||
@property(nonatomic, readonly) NSString *acodec; // audio codec
|
||||
@property(nonatomic, readonly) int sampleRate;
|
||||
@property(nonatomic, readonly) int64_t channelLayout;
|
||||
|
||||
@property(nonatomic) NSString *vdecoder;
|
||||
|
||||
@property(nonatomic) int tcpError;
|
||||
@property(nonatomic) NSString *remoteIp;
|
||||
|
||||
@property(nonatomic) int httpError;
|
||||
@property(nonatomic) NSString *httpUrl;
|
||||
@property(nonatomic) NSString *httpHost;
|
||||
@property(nonatomic) int httpCode;
|
||||
@property(nonatomic) int64_t httpOpenTick;
|
||||
@property(nonatomic) int64_t httpSeekTick;
|
||||
@property(nonatomic) int httpOpenCount;
|
||||
@property(nonatomic) int httpSeekCount;
|
||||
@property(nonatomic) int64_t lastHttpOpenDuration;
|
||||
@property(nonatomic) int64_t lastHttpSeekDuration;
|
||||
@property(nonatomic) int64_t filesize;
|
||||
|
||||
@property(nonatomic) int64_t prepareStartTick;
|
||||
@property(nonatomic) int64_t prepareDuration;
|
||||
@property(nonatomic) int64_t firstVideoFrameLatency;
|
||||
@property(nonatomic) int64_t lastPrerollStartTick;
|
||||
@property(nonatomic) int64_t lastPrerollDuration;
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,155 @@
|
||||
/*
|
||||
* IJKFFMoviePlayerController.h
|
||||
*
|
||||
* Copyright (c) 2013 Bilibili
|
||||
* Copyright (c) 2013 Zhang Rui <bbcallen@gmail.com>
|
||||
*
|
||||
* This file is part of ijkPlayer.
|
||||
*
|
||||
* ijkPlayer is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* ijkPlayer is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with ijkPlayer; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#import "IJKMediaPlayback.h"
|
||||
#import "IJKFFMonitor.h"
|
||||
#import "IJKFFOptions.h"
|
||||
#import "IJKSDLGLViewProtocol.h"
|
||||
|
||||
// media meta
|
||||
#define k_IJKM_KEY_FORMAT @"format"
|
||||
#define k_IJKM_KEY_DURATION_US @"duration_us"
|
||||
#define k_IJKM_KEY_START_US @"start_us"
|
||||
#define k_IJKM_KEY_BITRATE @"bitrate"
|
||||
|
||||
// stream meta
|
||||
#define k_IJKM_KEY_TYPE @"type"
|
||||
#define k_IJKM_VAL_TYPE__VIDEO @"video"
|
||||
#define k_IJKM_VAL_TYPE__AUDIO @"audio"
|
||||
#define k_IJKM_VAL_TYPE__UNKNOWN @"unknown"
|
||||
|
||||
#define k_IJKM_KEY_CODEC_NAME @"codec_name"
|
||||
#define k_IJKM_KEY_CODEC_PROFILE @"codec_profile"
|
||||
#define k_IJKM_KEY_CODEC_LONG_NAME @"codec_long_name"
|
||||
|
||||
// stream: video
|
||||
#define k_IJKM_KEY_WIDTH @"width"
|
||||
#define k_IJKM_KEY_HEIGHT @"height"
|
||||
#define k_IJKM_KEY_FPS_NUM @"fps_num"
|
||||
#define k_IJKM_KEY_FPS_DEN @"fps_den"
|
||||
#define k_IJKM_KEY_TBR_NUM @"tbr_num"
|
||||
#define k_IJKM_KEY_TBR_DEN @"tbr_den"
|
||||
#define k_IJKM_KEY_SAR_NUM @"sar_num"
|
||||
#define k_IJKM_KEY_SAR_DEN @"sar_den"
|
||||
// stream: audio
|
||||
#define k_IJKM_KEY_SAMPLE_RATE @"sample_rate"
|
||||
#define k_IJKM_KEY_CHANNEL_LAYOUT @"channel_layout"
|
||||
|
||||
#define kk_IJKM_KEY_STREAMS @"streams"
|
||||
|
||||
typedef enum IJKLogLevel {
|
||||
k_IJK_LOG_UNKNOWN = 0,
|
||||
k_IJK_LOG_DEFAULT = 1,
|
||||
|
||||
k_IJK_LOG_VERBOSE = 2,
|
||||
k_IJK_LOG_DEBUG = 3,
|
||||
k_IJK_LOG_INFO = 4,
|
||||
k_IJK_LOG_WARN = 5,
|
||||
k_IJK_LOG_ERROR = 6,
|
||||
k_IJK_LOG_FATAL = 7,
|
||||
k_IJK_LOG_SILENT = 8,
|
||||
} IJKLogLevel;
|
||||
|
||||
@interface IJKFFMoviePlayerController : NSObject <IJKMediaPlayback>
|
||||
|
||||
- (id)initWithContentURL:(NSURL *)aUrl
|
||||
withOptions:(IJKFFOptions *)options;
|
||||
|
||||
- (id)initWithContentURLString:(NSString *)aUrlString
|
||||
withOptions:(IJKFFOptions *)options;
|
||||
|
||||
- (id)initWithMoreContent:(NSURL *)aUrl
|
||||
withOptions:(IJKFFOptions *)options
|
||||
withGLView:(UIView<IJKSDLGLViewProtocol> *)glView;
|
||||
|
||||
- (id)initWithMoreContentString:(NSString *)aUrlString
|
||||
withOptions:(IJKFFOptions *)options
|
||||
withGLView:(UIView<IJKSDLGLViewProtocol> *)glView;
|
||||
|
||||
- (void)prepareToPlay;
|
||||
- (void)play;
|
||||
- (void)pause;
|
||||
- (void)stop;
|
||||
- (BOOL)isPlaying;
|
||||
- (int64_t)trafficStatistic;
|
||||
- (float)dropFrameRate;
|
||||
|
||||
- (void)setPauseInBackground:(BOOL)pause;
|
||||
- (BOOL)isVideoToolboxOpen;
|
||||
|
||||
- (void)setHudValue:(NSString *)value forKey:(NSString *)key;
|
||||
|
||||
+ (void)setLogReport:(BOOL)preferLogReport;
|
||||
+ (void)setLogLevel:(IJKLogLevel)logLevel;
|
||||
+ (BOOL)checkIfFFmpegVersionMatch:(BOOL)showAlert;
|
||||
+ (BOOL)checkIfPlayerVersionMatch:(BOOL)showAlert
|
||||
version:(NSString *)version;
|
||||
|
||||
@property(nonatomic, readonly) CGFloat fpsInMeta;
|
||||
@property(nonatomic, readonly) CGFloat fpsAtOutput;
|
||||
@property(nonatomic) BOOL shouldShowHudView;
|
||||
|
||||
- (void)setOptionValue:(NSString *)value
|
||||
forKey:(NSString *)key
|
||||
ofCategory:(IJKFFOptionCategory)category;
|
||||
|
||||
- (void)setOptionIntValue:(int64_t)value
|
||||
forKey:(NSString *)key
|
||||
ofCategory:(IJKFFOptionCategory)category;
|
||||
|
||||
|
||||
|
||||
- (void)setFormatOptionValue: (NSString *)value forKey:(NSString *)key;
|
||||
- (void)setCodecOptionValue: (NSString *)value forKey:(NSString *)key;
|
||||
- (void)setSwsOptionValue: (NSString *)value forKey:(NSString *)key;
|
||||
- (void)setPlayerOptionValue: (NSString *)value forKey:(NSString *)key;
|
||||
|
||||
- (void)setFormatOptionIntValue: (int64_t)value forKey:(NSString *)key;
|
||||
- (void)setCodecOptionIntValue: (int64_t)value forKey:(NSString *)key;
|
||||
- (void)setSwsOptionIntValue: (int64_t)value forKey:(NSString *)key;
|
||||
- (void)setPlayerOptionIntValue: (int64_t)value forKey:(NSString *)key;
|
||||
|
||||
@property (nonatomic, retain) id<IJKMediaUrlOpenDelegate> segmentOpenDelegate;
|
||||
@property (nonatomic, retain) id<IJKMediaUrlOpenDelegate> tcpOpenDelegate;
|
||||
@property (nonatomic, retain) id<IJKMediaUrlOpenDelegate> httpOpenDelegate;
|
||||
@property (nonatomic, retain) id<IJKMediaUrlOpenDelegate> liveOpenDelegate;
|
||||
|
||||
@property (nonatomic, retain) id<IJKMediaNativeInvokeDelegate> nativeInvokeDelegate;
|
||||
|
||||
- (void)didShutdown;
|
||||
|
||||
#pragma mark KVO properties
|
||||
@property (nonatomic, readonly) IJKFFMonitor *monitor;
|
||||
|
||||
@end
|
||||
|
||||
#define IJK_FF_IO_TYPE_READ (1)
|
||||
void IJKFFIOStatDebugCallback(const char *url, int type, int bytes);
|
||||
void IJKFFIOStatRegister(void (*cb)(const char *url, int type, int bytes));
|
||||
|
||||
void IJKFFIOStatCompleteDebugCallback(const char *url,
|
||||
int64_t read_bytes, int64_t total_size,
|
||||
int64_t elpased_time, int64_t total_duration);
|
||||
void IJKFFIOStatCompleteRegister(void (*cb)(const char *url,
|
||||
int64_t read_bytes, int64_t total_size,
|
||||
int64_t elpased_time, int64_t total_duration));
|
||||
@@ -0,0 +1,75 @@
|
||||
/*
|
||||
* IJKFFOptions.h
|
||||
*
|
||||
* Copyright (c) 2013-2015 Bilibili
|
||||
* Copyright (c) 2013-2015 Zhang Rui <bbcallen@gmail.com>
|
||||
*
|
||||
* This file is part of ijkPlayer.
|
||||
*
|
||||
* ijkPlayer is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* ijkPlayer is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with ijkPlayer; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
typedef enum IJKFFOptionCategory {
|
||||
kIJKFFOptionCategoryFormat = 1,
|
||||
kIJKFFOptionCategoryCodec = 2,
|
||||
kIJKFFOptionCategorySws = 3,
|
||||
kIJKFFOptionCategoryPlayer = 4,
|
||||
kIJKFFOptionCategorySwr = 5,
|
||||
} IJKFFOptionCategory;
|
||||
|
||||
// for codec option 'skip_loop_filter' and 'skip_frame'
|
||||
typedef enum IJKAVDiscard {
|
||||
/* We leave some space between them for extensions (drop some
|
||||
* keyframes for intra-only or drop just some bidir frames). */
|
||||
IJK_AVDISCARD_NONE =-16, ///< discard nothing
|
||||
IJK_AVDISCARD_DEFAULT = 0, ///< discard useless packets like 0 size packets in avi
|
||||
IJK_AVDISCARD_NONREF = 8, ///< discard all non reference
|
||||
IJK_AVDISCARD_BIDIR = 16, ///< discard all bidirectional frames
|
||||
IJK_AVDISCARD_NONKEY = 32, ///< discard all frames except keyframes
|
||||
IJK_AVDISCARD_ALL = 48, ///< discard all
|
||||
} IJKAVDiscard;
|
||||
|
||||
struct IjkMediaPlayer;
|
||||
|
||||
@interface IJKFFOptions : NSObject
|
||||
|
||||
+(IJKFFOptions *)optionsByDefault;
|
||||
|
||||
-(void)applyTo:(struct IjkMediaPlayer *)mediaPlayer;
|
||||
|
||||
- (void)setOptionValue:(NSString *)value
|
||||
forKey:(NSString *)key
|
||||
ofCategory:(IJKFFOptionCategory)category;
|
||||
|
||||
- (void)setOptionIntValue:(int64_t)value
|
||||
forKey:(NSString *)key
|
||||
ofCategory:(IJKFFOptionCategory)category;
|
||||
|
||||
|
||||
-(void)setFormatOptionValue: (NSString *)value forKey:(NSString *)key;
|
||||
-(void)setCodecOptionValue: (NSString *)value forKey:(NSString *)key;
|
||||
-(void)setSwsOptionValue: (NSString *)value forKey:(NSString *)key;
|
||||
-(void)setPlayerOptionValue: (NSString *)value forKey:(NSString *)key;
|
||||
|
||||
-(void)setFormatOptionIntValue: (int64_t)value forKey:(NSString *)key;
|
||||
-(void)setCodecOptionIntValue: (int64_t)value forKey:(NSString *)key;
|
||||
-(void)setSwsOptionIntValue: (int64_t)value forKey:(NSString *)key;
|
||||
-(void)setPlayerOptionIntValue: (int64_t)value forKey:(NSString *)key;
|
||||
|
||||
@property(nonatomic) BOOL showHudView;
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,39 @@
|
||||
/*
|
||||
* IJKKVOController.h
|
||||
*
|
||||
* Copyright (c) 2014 Bilibili
|
||||
* Copyright (c) 2014 Zhang Rui <bbcallen@gmail.com>
|
||||
*
|
||||
* This file is part of ijkPlayer.
|
||||
*
|
||||
* ijkPlayer is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* ijkPlayer is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with ijkPlayer; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
@interface IJKKVOController : NSObject
|
||||
|
||||
- (id)initWithTarget:(NSObject *)target;
|
||||
|
||||
- (void)safelyAddObserver:(NSObject *)observer
|
||||
forKeyPath:(NSString *)keyPath
|
||||
options:(NSKeyValueObservingOptions)options
|
||||
context:(void *)context;
|
||||
- (void)safelyRemoveObserver:(NSObject *)observer
|
||||
forKeyPath:(NSString *)keyPath;
|
||||
|
||||
- (void)safelyRemoveAllObservers;
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,32 @@
|
||||
/*
|
||||
* IJKMPMoviePlayerController.h
|
||||
*
|
||||
* Copyright (c) 2013 Bilibili
|
||||
* Copyright (c) 2013 Zhang Rui <bbcallen@gmail.com>
|
||||
*
|
||||
* This file is part of ijkPlayer.
|
||||
*
|
||||
* ijkPlayer is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* ijkPlayer is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with ijkPlayer; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#import "IJKMediaPlayback.h"
|
||||
#import <MediaPlayer/MediaPlayer.h>
|
||||
|
||||
@interface IJKMPMoviePlayerController : MPMoviePlayerController <IJKMediaPlayback>
|
||||
|
||||
- (id)initWithContentURL:(NSURL *)aUrl;
|
||||
- (id)initWithContentURLString:(NSString *)aUrl;
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,63 @@
|
||||
/*
|
||||
* IJKMediaFramework.h
|
||||
*
|
||||
* Copyright (c) 2013 Bilibili
|
||||
* Copyright (c) 2013 Zhang Rui <bbcallen@gmail.com>
|
||||
*
|
||||
* This file is part of ijkPlayer.
|
||||
*
|
||||
* ijkPlayer is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* ijkPlayer is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with ijkPlayer; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
//! Project version number for IJKMediaFramework.
|
||||
FOUNDATION_EXPORT double IJKMediaFrameworkVersionNumber;
|
||||
|
||||
//! Project version string for IJKMediaFramework.
|
||||
FOUNDATION_EXPORT const unsigned char IJKMediaFrameworkVersionString[];
|
||||
|
||||
// In this header, you should import all the public headers of your framework using statements like #import <IJKMediaFrameworkWithSSL/PublicHeader.h>
|
||||
#import <IJKMediaFramework/IJKMediaPlayback.h>
|
||||
#import <IJKMediaFramework/IJKMPMoviePlayerController.h>
|
||||
#import <IJKMediaFramework/IJKFFOptions.h>
|
||||
#import <IJKMediaFramework/IJKFFMoviePlayerController.h>
|
||||
#import <IJKMediaFramework/IJKAVMoviePlayerController.h>
|
||||
#import <IJKMediaFramework/IJKMediaModule.h>
|
||||
#import <IJKMediaFramework/IJKMediaPlayer.h>
|
||||
#import <IJKMediaFramework/IJKNotificationManager.h>
|
||||
#import <IJKMediaFramework/IJKKVOController.h>
|
||||
#import <IJKMediaFramework/IJKSDLGLViewProtocol.h>
|
||||
|
||||
// backward compatible for old names
|
||||
#define IJKMediaPlaybackIsPreparedToPlayDidChangeNotification IJKMPMediaPlaybackIsPreparedToPlayDidChangeNotification
|
||||
#define IJKMoviePlayerLoadStateDidChangeNotification IJKMPMoviePlayerLoadStateDidChangeNotification
|
||||
#define IJKMoviePlayerPlaybackDidFinishNotification IJKMPMoviePlayerPlaybackDidFinishNotification
|
||||
#define IJKMoviePlayerPlaybackDidFinishReasonUserInfoKey IJKMPMoviePlayerPlaybackDidFinishReasonUserInfoKey
|
||||
#define IJKMoviePlayerPlaybackStateDidChangeNotification IJKMPMoviePlayerPlaybackStateDidChangeNotification
|
||||
#define IJKMoviePlayerIsAirPlayVideoActiveDidChangeNotification IJKMPMoviePlayerIsAirPlayVideoActiveDidChangeNotification
|
||||
#define IJKMoviePlayerVideoDecoderOpenNotification IJKMPMoviePlayerVideoDecoderOpenNotification
|
||||
#define IJKMoviePlayerFirstVideoFrameRenderedNotification IJKMPMoviePlayerFirstVideoFrameRenderedNotification
|
||||
#define IJKMoviePlayerFirstAudioFrameRenderedNotification IJKMPMoviePlayerFirstAudioFrameRenderedNotification
|
||||
#define IJKMoviePlayerFirstAudioFrameDecodedNotification IJKMPMoviePlayerFirstAudioFrameDecodedNotification
|
||||
#define IJKMoviePlayerFirstVideoFrameDecodedNotification IJKMPMoviePlayerFirstVideoFrameDecodedNotification
|
||||
#define IJKMoviePlayerOpenInputNotification IJKMPMoviePlayerOpenInputNotification
|
||||
#define IJKMoviePlayerFindStreamInfoNotification IJKMPMoviePlayerFindStreamInfoNotification
|
||||
#define IJKMoviePlayerComponentOpenNotification IJKMPMoviePlayerComponentOpenNotification
|
||||
|
||||
#define IJKMPMoviePlayerAccurateSeekCompleteNotification IJKMPMoviePlayerAccurateSeekCompleteNotification
|
||||
#define IJKMoviePlayerSeekAudioStartNotification IJKMPMoviePlayerSeekAudioStartNotification
|
||||
#define IJKMoviePlayerSeekVideoStartNotification IJKMPMoviePlayerSeekVideoStartNotification
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
/*
|
||||
* IJKMediaModule.h
|
||||
*
|
||||
* Copyright (c) 2013 Bilibili
|
||||
* Copyright (c) 2013 Zhang Rui <bbcallen@gmail.com>
|
||||
*
|
||||
* This file is part of ijkPlayer.
|
||||
*
|
||||
* ijkPlayer is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* ijkPlayer is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with ijkPlayer; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
@interface IJKMediaModule : NSObject
|
||||
|
||||
+ (IJKMediaModule *)sharedModule;
|
||||
|
||||
@property(atomic, getter=isAppIdleTimerDisabled) BOOL appIdleTimerDisabled;
|
||||
@property(atomic, getter=isMediaModuleIdleTimerDisabled) BOOL mediaModuleIdleTimerDisabled;
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,227 @@
|
||||
/*
|
||||
* IJKMediaPlayback.h
|
||||
*
|
||||
* Copyright (c) 2013 Bilibili
|
||||
* Copyright (c) 2013 Zhang Rui <bbcallen@gmail.com>
|
||||
*
|
||||
* This file is part of ijkPlayer.
|
||||
*
|
||||
* ijkPlayer is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* ijkPlayer is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with ijkPlayer; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
typedef NS_ENUM(NSInteger, IJKMPMovieScalingMode) {
|
||||
IJKMPMovieScalingModeNone, // No scaling
|
||||
IJKMPMovieScalingModeAspectFit, // Uniform scale until one dimension fits
|
||||
IJKMPMovieScalingModeAspectFill, // Uniform scale until the movie fills the visible bounds. One dimension may have clipped contents
|
||||
IJKMPMovieScalingModeFill // Non-uniform scale. Both render dimensions will exactly match the visible bounds
|
||||
};
|
||||
|
||||
typedef NS_ENUM(NSInteger, IJKMPMoviePlaybackState) {
|
||||
IJKMPMoviePlaybackStateStopped,
|
||||
IJKMPMoviePlaybackStatePlaying,
|
||||
IJKMPMoviePlaybackStatePaused,
|
||||
IJKMPMoviePlaybackStateInterrupted,
|
||||
IJKMPMoviePlaybackStateSeekingForward,
|
||||
IJKMPMoviePlaybackStateSeekingBackward
|
||||
};
|
||||
|
||||
typedef NS_OPTIONS(NSUInteger, IJKMPMovieLoadState) {
|
||||
IJKMPMovieLoadStateUnknown = 0,
|
||||
IJKMPMovieLoadStatePlayable = 1 << 0,
|
||||
IJKMPMovieLoadStatePlaythroughOK = 1 << 1, // Playback will be automatically started in this state when shouldAutoplay is YES
|
||||
IJKMPMovieLoadStateStalled = 1 << 2, // Playback will be automatically paused in this state, if started
|
||||
};
|
||||
|
||||
typedef NS_ENUM(NSInteger, IJKMPMovieFinishReason) {
|
||||
IJKMPMovieFinishReasonPlaybackEnded,
|
||||
IJKMPMovieFinishReasonPlaybackError,
|
||||
IJKMPMovieFinishReasonUserExited
|
||||
};
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// Thumbnails
|
||||
|
||||
typedef NS_ENUM(NSInteger, IJKMPMovieTimeOption) {
|
||||
IJKMPMovieTimeOptionNearestKeyFrame,
|
||||
IJKMPMovieTimeOptionExact
|
||||
};
|
||||
|
||||
@protocol IJKMediaPlayback;
|
||||
|
||||
#pragma mark IJKMediaPlayback
|
||||
|
||||
@protocol IJKMediaPlayback <NSObject>
|
||||
|
||||
- (void)prepareToPlay;
|
||||
- (void)play;
|
||||
- (void)pause;
|
||||
- (void)stop;
|
||||
- (BOOL)isPlaying;
|
||||
- (void)shutdown;
|
||||
- (void)setPauseInBackground:(BOOL)pause;
|
||||
|
||||
@property(nonatomic, readonly) UIView *view;
|
||||
@property(nonatomic) NSTimeInterval currentPlaybackTime;
|
||||
@property(nonatomic, readonly) NSTimeInterval duration;
|
||||
@property(nonatomic, readonly) NSTimeInterval playableDuration;
|
||||
@property(nonatomic, readonly) NSInteger bufferingProgress;
|
||||
|
||||
@property(nonatomic, readonly) BOOL isPreparedToPlay;
|
||||
@property(nonatomic, readonly) IJKMPMoviePlaybackState playbackState;
|
||||
@property(nonatomic, readonly) IJKMPMovieLoadState loadState;
|
||||
@property(nonatomic, readonly) int isSeekBuffering;
|
||||
@property(nonatomic, readonly) int isAudioSync;
|
||||
@property(nonatomic, readonly) int isVideoSync;
|
||||
|
||||
@property(nonatomic, readonly) int64_t numberOfBytesTransferred;
|
||||
|
||||
@property(nonatomic, readonly) CGSize naturalSize;
|
||||
@property(nonatomic) IJKMPMovieScalingMode scalingMode;
|
||||
@property(nonatomic) BOOL shouldAutoplay;
|
||||
|
||||
@property (nonatomic) BOOL allowsMediaAirPlay;
|
||||
@property (nonatomic) BOOL isDanmakuMediaAirPlay;
|
||||
@property (nonatomic, readonly) BOOL airPlayMediaActive;
|
||||
|
||||
@property (nonatomic) float playbackRate;
|
||||
@property (nonatomic) float playbackVolume;
|
||||
|
||||
- (UIImage *)thumbnailImageAtCurrentTime;
|
||||
|
||||
#pragma mark Notifications
|
||||
|
||||
#ifdef __cplusplus
|
||||
#define IJK_EXTERN extern "C" __attribute__((visibility ("default")))
|
||||
#else
|
||||
#define IJK_EXTERN extern __attribute__((visibility ("default")))
|
||||
#endif
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// MPMediaPlayback.h
|
||||
|
||||
// Posted when the prepared state changes of an object conforming to the MPMediaPlayback protocol changes.
|
||||
// This supersedes MPMoviePlayerContentPreloadDidFinishNotification.
|
||||
IJK_EXTERN NSString *const IJKMPMediaPlaybackIsPreparedToPlayDidChangeNotification;
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// MPMoviePlayerController.h
|
||||
// Movie Player Notifications
|
||||
|
||||
// Posted when the scaling mode changes.
|
||||
IJK_EXTERN NSString* const IJKMPMoviePlayerScalingModeDidChangeNotification;
|
||||
|
||||
// Posted when movie playback ends or a user exits playback.
|
||||
IJK_EXTERN NSString* const IJKMPMoviePlayerPlaybackDidFinishNotification;
|
||||
IJK_EXTERN NSString* const IJKMPMoviePlayerPlaybackDidFinishReasonUserInfoKey; // NSNumber (IJKMPMovieFinishReason)
|
||||
|
||||
// Posted when the playback state changes, either programatically or by the user.
|
||||
IJK_EXTERN NSString* const IJKMPMoviePlayerPlaybackStateDidChangeNotification;
|
||||
|
||||
// Posted when the network load state changes.
|
||||
IJK_EXTERN NSString* const IJKMPMoviePlayerLoadStateDidChangeNotification;
|
||||
|
||||
// Posted when the movie player begins or ends playing video via AirPlay.
|
||||
IJK_EXTERN NSString* const IJKMPMoviePlayerIsAirPlayVideoActiveDidChangeNotification;
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// Movie Property Notifications
|
||||
|
||||
// Calling -prepareToPlay on the movie player will begin determining movie properties asynchronously.
|
||||
// These notifications are posted when the associated movie property becomes available.
|
||||
IJK_EXTERN NSString* const IJKMPMovieNaturalSizeAvailableNotification;
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// Extend Notifications
|
||||
|
||||
IJK_EXTERN NSString *const IJKMPMoviePlayerVideoDecoderOpenNotification;
|
||||
IJK_EXTERN NSString *const IJKMPMoviePlayerFirstVideoFrameRenderedNotification;
|
||||
IJK_EXTERN NSString *const IJKMPMoviePlayerFirstAudioFrameRenderedNotification;
|
||||
IJK_EXTERN NSString *const IJKMPMoviePlayerFirstAudioFrameDecodedNotification;
|
||||
IJK_EXTERN NSString *const IJKMPMoviePlayerFirstVideoFrameDecodedNotification;
|
||||
IJK_EXTERN NSString *const IJKMPMoviePlayerOpenInputNotification;
|
||||
IJK_EXTERN NSString *const IJKMPMoviePlayerFindStreamInfoNotification;
|
||||
IJK_EXTERN NSString *const IJKMPMoviePlayerComponentOpenNotification;
|
||||
|
||||
IJK_EXTERN NSString *const IJKMPMoviePlayerDidSeekCompleteNotification;
|
||||
IJK_EXTERN NSString *const IJKMPMoviePlayerDidSeekCompleteTargetKey;
|
||||
IJK_EXTERN NSString *const IJKMPMoviePlayerDidSeekCompleteErrorKey;
|
||||
IJK_EXTERN NSString *const IJKMPMoviePlayerDidAccurateSeekCompleteCurPos;
|
||||
IJK_EXTERN NSString *const IJKMPMoviePlayerAccurateSeekCompleteNotification;
|
||||
IJK_EXTERN NSString *const IJKMPMoviePlayerSeekAudioStartNotification;
|
||||
IJK_EXTERN NSString *const IJKMPMoviePlayerSeekVideoStartNotification;
|
||||
|
||||
@end
|
||||
|
||||
#pragma mark IJKMediaUrlOpenDelegate
|
||||
|
||||
// Must equal to the defination in ijkavformat/ijkavformat.h
|
||||
typedef NS_ENUM(NSInteger, IJKMediaEvent) {
|
||||
|
||||
// Notify Events
|
||||
IJKMediaEvent_WillHttpOpen = 1, // attr: url
|
||||
IJKMediaEvent_DidHttpOpen = 2, // attr: url, error, http_code
|
||||
IJKMediaEvent_WillHttpSeek = 3, // attr: url, offset
|
||||
IJKMediaEvent_DidHttpSeek = 4, // attr: url, offset, error, http_code
|
||||
// Control Message
|
||||
IJKMediaCtrl_WillTcpOpen = 0x20001, // IJKMediaUrlOpenData: no args
|
||||
IJKMediaCtrl_DidTcpOpen = 0x20002, // IJKMediaUrlOpenData: error, family, ip, port, fd
|
||||
IJKMediaCtrl_WillHttpOpen = 0x20003, // IJKMediaUrlOpenData: url, segmentIndex, retryCounter
|
||||
IJKMediaCtrl_WillLiveOpen = 0x20005, // IJKMediaUrlOpenData: url, retryCounter
|
||||
IJKMediaCtrl_WillConcatSegmentOpen = 0x20007, // IJKMediaUrlOpenData: url, segmentIndex, retryCounter
|
||||
};
|
||||
|
||||
#define IJKMediaEventAttrKey_url @"url"
|
||||
#define IJKMediaEventAttrKey_host @"host"
|
||||
#define IJKMediaEventAttrKey_error @"error"
|
||||
#define IJKMediaEventAttrKey_time_of_event @"time_of_event"
|
||||
#define IJKMediaEventAttrKey_http_code @"http_code"
|
||||
#define IJKMediaEventAttrKey_offset @"offset"
|
||||
#define IJKMediaEventAttrKey_file_size @"file_size"
|
||||
|
||||
// event of IJKMediaUrlOpenEvent_xxx
|
||||
@interface IJKMediaUrlOpenData: NSObject
|
||||
|
||||
- (id)initWithUrl:(NSString *)url
|
||||
event:(IJKMediaEvent)event
|
||||
segmentIndex:(int)segmentIndex
|
||||
retryCounter:(int)retryCounter;
|
||||
|
||||
@property(nonatomic, readonly) IJKMediaEvent event;
|
||||
@property(nonatomic, readonly) int segmentIndex;
|
||||
@property(nonatomic, readonly) int retryCounter;
|
||||
|
||||
@property(nonatomic, retain) NSString *url;
|
||||
@property(nonatomic, assign) int fd;
|
||||
@property(nonatomic, strong) NSString *msg;
|
||||
@property(nonatomic) int error; // set a negative value to indicate an error has occured.
|
||||
@property(nonatomic, getter=isHandled) BOOL handled; // auto set to YES if url changed
|
||||
@property(nonatomic, getter=isUrlChanged) BOOL urlChanged; // auto set to YES by url changed
|
||||
|
||||
@end
|
||||
|
||||
@protocol IJKMediaUrlOpenDelegate <NSObject>
|
||||
|
||||
- (void)willOpenUrl:(IJKMediaUrlOpenData*) urlOpenData;
|
||||
|
||||
@end
|
||||
|
||||
@protocol IJKMediaNativeInvokeDelegate <NSObject>
|
||||
|
||||
- (int)invoke:(IJKMediaEvent)event attributes:(NSDictionary *)attributes;
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,32 @@
|
||||
/*
|
||||
* IJKMediaPlayer.h
|
||||
*
|
||||
* Copyright (c) 2013 Bilibili
|
||||
* Copyright (c) 2013 Zhang Rui <bbcallen@gmail.com>
|
||||
*
|
||||
* This file is part of ijkPlayer.
|
||||
*
|
||||
* ijkPlayer is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* ijkPlayer is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with ijkPlayer; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#import "IJKMediaPlayback.h"
|
||||
#import "IJKMPMoviePlayerController.h"
|
||||
|
||||
#import "IJKFFOptions.h"
|
||||
#import "IJKFFMoviePlayerController.h"
|
||||
|
||||
#import "IJKAVMoviePlayerController.h"
|
||||
|
||||
#import "IJKMediaModule.h"
|
||||
@@ -0,0 +1,37 @@
|
||||
/*
|
||||
* IJKNotificationManager.h
|
||||
*
|
||||
* Copyright (c) 2016 Bilibili
|
||||
* Copyright (c) 2016 Zhang Rui <bbcallen@gmail.com>
|
||||
*
|
||||
* This file is part of ijkPlayer.
|
||||
*
|
||||
* ijkPlayer is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* ijkPlayer is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with ijkPlayer; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
@interface IJKNotificationManager : NSObject
|
||||
|
||||
- (nullable instancetype)init;
|
||||
|
||||
- (void)addObserver:(nonnull id)observer
|
||||
selector:(nonnull SEL)aSelector
|
||||
name:(nullable NSString *)aName
|
||||
object:(nullable id)anObject;
|
||||
|
||||
- (void)removeAllObservers:(nonnull id)observer;
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,50 @@
|
||||
/*
|
||||
* IJKSDLGLViewProtocol.h
|
||||
*
|
||||
* Copyright (c) 2017 Bilibili
|
||||
* Copyright (c) 2017 raymond <raymondzheng1412@gmail.com>
|
||||
*
|
||||
* This file is part of ijkPlayer.
|
||||
*
|
||||
* ijkPlayer is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* ijkPlayer is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with ijkPlayer; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#ifndef IJKSDLGLViewProtocol_h
|
||||
#define IJKSDLGLViewProtocol_h
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
typedef struct IJKOverlay IJKOverlay;
|
||||
struct IJKOverlay {
|
||||
int w;
|
||||
int h;
|
||||
UInt32 format;
|
||||
int planes;
|
||||
UInt16 *pitches;
|
||||
UInt8 **pixels;
|
||||
int sar_num;
|
||||
int sar_den;
|
||||
CVPixelBufferRef pixel_buffer;
|
||||
};
|
||||
|
||||
@protocol IJKSDLGLViewProtocol <NSObject>
|
||||
- (UIImage*) snapshot;
|
||||
@property(nonatomic, readonly) CGFloat fps;
|
||||
@property(nonatomic) CGFloat scaleFactor;
|
||||
@property(nonatomic) BOOL isThirdGLView;
|
||||
- (void) display_pixels: (IJKOverlay *) overlay;
|
||||
@end
|
||||
|
||||
#endif /* IJKSDLGLViewProtocol_h */
|
||||
@@ -0,0 +1,6 @@
|
||||
framework module IJKMediaFramework {
|
||||
umbrella header "IJKMediaFramework.h"
|
||||
|
||||
export *
|
||||
module * { export * }
|
||||
}
|
||||
@@ -450,7 +450,7 @@
|
||||
|
||||
- (void)setVolume:(float)volume {
|
||||
_volume = MIN(MAX(0, volume), 1);
|
||||
self.player.playbackVolume = _volume;
|
||||
self.player.playbackVolume = volume;
|
||||
}
|
||||
|
||||
@end
|
||||
19
Pods/DDZFPlayerKit_Private/LICENSE
generated
Normal file
@@ -0,0 +1,19 @@
|
||||
Copyright (c) 2023 DDIsFriend <DDIsFriend@163.com>
|
||||
|
||||
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.
|
||||
29
Pods/DDZFPlayerKit_Private/README.md
generated
Normal file
@@ -0,0 +1,29 @@
|
||||
# DDZFPlayerKit_Private
|
||||
|
||||
[](https://travis-ci.org/DDIsFriend/DDZFPlayerKit_Private)
|
||||
[](https://cocoapods.org/pods/DDZFPlayerKit_Private)
|
||||
[](https://cocoapods.org/pods/DDZFPlayerKit_Private)
|
||||
[](https://cocoapods.org/pods/DDZFPlayerKit_Private)
|
||||
|
||||
## Example
|
||||
|
||||
To run the example project, clone the repo, and run `pod install` from the Example directory first.
|
||||
|
||||
## Requirements
|
||||
|
||||
## Installation
|
||||
|
||||
DDZFPlayerKit_Private is available through [CocoaPods](https://cocoapods.org). To install
|
||||
it, simply add the following line to your Podfile:
|
||||
|
||||
```ruby
|
||||
pod 'DDZFPlayerKit_Private'
|
||||
```
|
||||
|
||||
## Author
|
||||
|
||||
DDIsFriend, DDIsFriend@163.com
|
||||
|
||||
## License
|
||||
|
||||
DDZFPlayerKit_Private is available under the MIT license. See the LICENSE file for more info.
|
||||
@@ -1 +1 @@
|
||||
../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/CALayer+DDCategory/CALayer+DDCategory.h
|
||||
../../../../../../PodRepository/DDCategoryKit_Private/DDCategoryKit_Private/Classes/CALayer+DDCategory/CALayer+DDCategory.h
|
||||
@@ -1 +1 @@
|
||||
../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/DDCategory.h
|
||||
../../../../../../PodRepository/DDCategoryKit_Private/DDCategoryKit_Private/Classes/DDCategory.h
|
||||
@@ -1 +1 @@
|
||||
../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSAttributedString+DDCategory/NSAttributedString+DDCategory.h
|
||||
../../../../../../PodRepository/DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSAttributedString+DDCategory/NSAttributedString+DDCategory.h
|
||||
@@ -1 +1 @@
|
||||
../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSBundle+DDCategory/NSBundle+DDCategory.h
|
||||
../../../../../../PodRepository/DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSBundle+DDCategory/NSBundle+DDCategory.h
|
||||
@@ -1 +1 @@
|
||||
../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSAttributedString+DDCategory/NSMutableAttributedString+DDCategory.h
|
||||
../../../../../../PodRepository/DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSAttributedString+DDCategory/NSMutableAttributedString+DDCategory.h
|
||||
@@ -1 +1 @@
|
||||
../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSAttributedString+DDCategory/NSMutableParagraphStyle+DDCategory.h
|
||||
../../../../../../PodRepository/DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSAttributedString+DDCategory/NSMutableParagraphStyle+DDCategory.h
|
||||
@@ -1 +1 @@
|
||||
../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSObject+DDCategory/NSObject+DDCategory.h
|
||||
../../../../../../PodRepository/DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSObject+DDCategory/NSObject+DDCategory.h
|
||||
@@ -1 +1 @@
|
||||
../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSThread+DDCategory/NSThread+DDCategory.h
|
||||
../../../../../../PodRepository/DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSThread+DDCategory/NSThread+DDCategory.h
|
||||
@@ -1 +1 @@
|
||||
../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSUrl+DDCategory/NSURL+DDCategory.h
|
||||
../../../../../../PodRepository/DDCategoryKit_Private/DDCategoryKit_Private/Classes/NSURL+DDCategory/NSURL+DDCategory.h
|
||||
@@ -1 +1 @@
|
||||
../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIApplication+DDCategory/UIApplication+DDCategory.h
|
||||
../../../../../../PodRepository/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIApplication+DDCategory/UIApplication+DDCategory.h
|
||||
@@ -1 +1 @@
|
||||
../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIBarButtonItem+DDCategory/UIBarButtonItem+DDCategory.h
|
||||
../../../../../../PodRepository/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIBarButtonItem+DDCategory/UIBarButtonItem+DDCategory.h
|
||||
@@ -1 +1 @@
|
||||
../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIButton+DDCategory/UIButton+DDCategory.h
|
||||
../../../../../../PodRepository/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UIButton+DDCategory/UIButton+DDCategory.h
|
||||
@@ -1 +1 @@
|
||||
../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/UICollectionView+DDCategory/UICollectionView+DDCategory.h
|
||||
../../../../../../PodRepository/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UICollectionView+DDCategory/UICollectionView+DDCategory.h
|
||||
@@ -1 +1 @@
|
||||
../../../DDCategoryKit_Private/DDCategoryKit_Private/Classes/UICollectionViewCell+DDCategory/UICollectionViewCell+DDCategory.h
|
||||
../../../../../../PodRepository/DDCategoryKit_Private/DDCategoryKit_Private/Classes/UICollectionViewCell+DDCategory/UICollectionViewCell+DDCategory.h
|
||||