Просмотр исходного кода

Merge pull request #171 from Tencent/feature/mute_audio

feature:补充静音能力
wubiner 4 лет назад
Родитель
Сommit
605b3a5f81

+ 1 - 1
QGVAPlayer.podspec

@@ -16,7 +16,7 @@ Pod::Spec.new do |spec|
   #
   #
 
 
   spec.name         = "QGVAPlayer"
   spec.name         = "QGVAPlayer"
-  spec.version      = "1.0.14"
+  spec.version      = "1.0.15"
   spec.summary      = "video animation player."
   spec.summary      = "video animation player."
   spec.platform     = :ios, "8.0"
   spec.platform     = :ios, "8.0"
 
 

+ 10 - 1
iOS/CHANGELOG.md

@@ -1,3 +1,13 @@
+## iOS 1.0.15
+
+**bugfix**
+
+- 修改SRGB格式的图像渲染后颜色变深[#issue124](https://github.com/Tencent/vap/issues/124)
+
+**feature**
+
+- UIView(VAP)及QGVAPWrapView 增加setMute接口,设置是否静音播放素材,注:在播放开始时进行设置,播放过程中设置无效,循环播放则设置后的下一次播放开始生效
+
 ## iOS 1.0.14
 ## iOS 1.0.14
 
 
 **bugfix**
 **bugfix**
@@ -7,7 +17,6 @@
 - UIView(VAP) 增加enableOldVersion接口,若素材非vap工具制作(不包含vapc box),则必须在播放前调用此接口设置enable,才可播放
 - UIView(VAP) 增加enableOldVersion接口,若素材非vap工具制作(不包含vapc box),则必须在播放前调用此接口设置enable,才可播放
 
 
 
 
-
 ## iOS 1.0.13
 ## iOS 1.0.13
 
 
 **feature**
 **feature**

+ 1 - 0
iOS/QGVAPlayer/QGVAPlayer/Classes/Controllers/QGAnimatedImageDecodeManager.h

@@ -31,6 +31,7 @@
 
 
 @optional
 @optional
 
 
+- (BOOL)shouldSetupAudioPlayer;
 /**
 /**
  到文件末尾时被调用
  到文件末尾时被调用
 
 

+ 6 - 0
iOS/QGVAPlayer/QGVAPlayer/Classes/Controllers/QGAnimatedImageDecodeManager.m

@@ -181,6 +181,12 @@
 }
 }
 
 
 - (void)setupAudioPlayerIfNeed {
 - (void)setupAudioPlayerIfNeed {
+    if ([_decoderDelegate respondsToSelector:@selector(shouldSetupAudioPlayer)]) {
+        BOOL should = [_decoderDelegate shouldSetupAudioPlayer];
+        if (!should) {
+            return;
+        }
+    }
     
     
     if ([_fileInfo isKindOfClass:[QGMP4HWDFileInfo class]]) {
     if ([_fileInfo isKindOfClass:[QGMP4HWDFileInfo class]]) {
         QGMP4ParserProxy *mp4Parser = [(QGMP4HWDFileInfo *)_fileInfo mp4Parser];
         QGMP4ParserProxy *mp4Parser = [(QGMP4HWDFileInfo *)_fileInfo mp4Parser];

+ 1 - 1
iOS/QGVAPlayer/QGVAPlayer/Classes/Models/QGVAPTextureLoader.m

@@ -49,7 +49,7 @@
     if (@available(iOS 10.0, *)) {
     if (@available(iOS 10.0, *)) {
         MTKTextureLoader *loader = [[MTKTextureLoader alloc] initWithDevice:device];
         MTKTextureLoader *loader = [[MTKTextureLoader alloc] initWithDevice:device];
         NSError *error = nil;
         NSError *error = nil;
-        id<MTLTexture> texture = [loader newTextureWithCGImage:image.CGImage options:@{MTKTextureLoaderOptionOrigin : MTKTextureLoaderOriginFlippedVertically} error:&error];
+        id<MTLTexture> texture = [loader newTextureWithCGImage:image.CGImage options:@{MTKTextureLoaderOptionOrigin : MTKTextureLoaderOriginFlippedVertically,MTKTextureLoaderOptionSRGB:@(NO)} error:&error];
         if (!texture || error) {
         if (!texture || error) {
             VAP_Error(kQGVAPModuleCommon, @"loadTexture error:%@", error);
             VAP_Error(kQGVAPModuleCommon, @"loadTexture error:%@", error);
             return nil;
             return nil;

+ 3 - 0
iOS/QGVAPlayer/QGVAPlayer/Classes/QGVAPWrapView.h

@@ -63,6 +63,9 @@ typedef NS_ENUM(NSUInteger, QGVAPWrapViewContentMode) {
 - (void)pauseHWDMP4;
 - (void)pauseHWDMP4;
 - (void)resumeHWDMP4;
 - (void)resumeHWDMP4;
 
 
+//设置是否静音播放素材,注:在播放开始时进行设置,播放过程中设置无效
+- (void)setMute:(BOOL)isMute;
+
 //增加点击的手势识别, 如果开启了autoDestoryAfterFinish,那么手势将在播放完毕后失效
 //增加点击的手势识别, 如果开启了autoDestoryAfterFinish,那么手势将在播放完毕后失效
 - (void)addVapTapGesture:(VAPGestureEventBlock)handler;
 - (void)addVapTapGesture:(VAPGestureEventBlock)handler;
 //手势识别通用接口, 如果开启了autoDestoryAfterFinish,那么手势将在播放完毕后失效
 //手势识别通用接口, 如果开启了autoDestoryAfterFinish,那么手势将在播放完毕后失效

+ 5 - 0
iOS/QGVAPlayer/QGVAPlayer/Classes/QGVAPWrapView.m

@@ -74,6 +74,11 @@
     [self.vapView resumeHWDMP4];
     [self.vapView resumeHWDMP4];
 }
 }
 
 
+- (void)setMute:(BOOL)isMute {
+    [self initVAPViewIfNeed];
+    [self.vapView setMute:isMute];
+}
+
 - (void)addVapGesture:(UIGestureRecognizer *)gestureRecognizer callback:(VAPGestureEventBlock)handler {
 - (void)addVapGesture:(UIGestureRecognizer *)gestureRecognizer callback:(VAPGestureEventBlock)handler {
     [self initVAPViewIfNeed];
     [self initVAPViewIfNeed];
     [self.vapView addVapGesture:gestureRecognizer callback:handler];
     [self.vapView addVapGesture:gestureRecognizer callback:handler];

+ 3 - 0
iOS/QGVAPlayer/QGVAPlayer/Classes/UIView+VAP.h

@@ -66,6 +66,9 @@ typedef NS_ENUM(NSUInteger, HWDMP4EBOperationType) {
 
 
 //当素材不包含vapc box时,只有在播放素材前调用此接口设置enable才可播放素材,否则素材无法播放
 //当素材不包含vapc box时,只有在播放素材前调用此接口设置enable才可播放素材,否则素材无法播放
 - (void)enableOldVersion:(BOOL)enable;
 - (void)enableOldVersion:(BOOL)enable;
+
+//设置是否静音播放素材,注:在播放开始时进行设置,播放过程中设置无效,循环播放则设置后的下一次播放开始生效
+- (void)setMute:(BOOL)isMute;
 @end
 @end
 
 
 @interface UIView (VAPGesture)
 @interface UIView (VAPGesture)

+ 10 - 0
iOS/QGVAPlayer/QGVAPlayer/Classes/UIView+VAP.m

@@ -57,6 +57,7 @@ NSInteger const VapMaxCompatibleVersion = 2;
 @property (nonatomic, strong) QGVAPConfigManager            *hwd_configManager;         //额外的配置信息
 @property (nonatomic, strong) QGVAPConfigManager            *hwd_configManager;         //额外的配置信息
 @property (nonatomic, strong) dispatch_queue_t              vap_renderQueue;            //播放队列
 @property (nonatomic, strong) dispatch_queue_t              vap_renderQueue;            //播放队列
 @property (nonatomic, assign) BOOL                          vap_enableOldVersion;       //标记是否兼容不含vapc box的素材播放
 @property (nonatomic, assign) BOOL                          vap_enableOldVersion;       //标记是否兼容不含vapc box的素材播放
+@property (nonatomic, assign) BOOL                          vap_isMute;                 //标记是否禁止音频播放
 @end
 @end
 
 
 @implementation UIView (VAP)
 @implementation UIView (VAP)
@@ -493,6 +494,10 @@ NSInteger const VapMaxCompatibleVersion = 2;
 - (void)enableOldVersion:(BOOL)enable {
 - (void)enableOldVersion:(BOOL)enable {
     self.vap_enableOldVersion = enable;
     self.vap_enableOldVersion = enable;
 }
 }
+
+- (void)setMute:(BOOL)isMute {
+    self.vap_isMute = isMute;
+}
 #pragma mark - delegate
 #pragma mark - delegate
 
 
 #pragma clang diagnostic push
 #pragma clang diagnostic push
@@ -502,6 +507,10 @@ NSInteger const VapMaxCompatibleVersion = 2;
     return [QGMP4FrameHWDecoder class];
     return [QGMP4FrameHWDecoder class];
 }
 }
 
 
+- (BOOL)shouldSetupAudioPlayer {
+    return !self.vap_isMute;
+}
+
 - (void)decoderDidFinishDecode:(QGBaseDecoder *)decoder {
 - (void)decoderDidFinishDecode:(QGBaseDecoder *)decoder {
     VAP_Info(kQGVAPModuleCommon, @"decoderDidFinishDecode.");
     VAP_Info(kQGVAPModuleCommon, @"decoderDidFinishDecode.");
     [self hwd_didFinishDisplay];
     [self hwd_didFinishDisplay];
@@ -609,6 +618,7 @@ HWDSYNTH_DYNAMIC_PROPERTY_OBJECT(hwd_attachmentsModel, setHwd_attachmentsModel,
 HWDSYNTH_DYNAMIC_PROPERTY_OBJECT(hwd_configManager, setHwd_configManager, OBJC_ASSOCIATION_RETAIN)
 HWDSYNTH_DYNAMIC_PROPERTY_OBJECT(hwd_configManager, setHwd_configManager, OBJC_ASSOCIATION_RETAIN)
 HWDSYNTH_DYNAMIC_PROPERTY_OBJECT(vap_renderQueue, setVap_renderQueue, OBJC_ASSOCIATION_RETAIN)
 HWDSYNTH_DYNAMIC_PROPERTY_OBJECT(vap_renderQueue, setVap_renderQueue, OBJC_ASSOCIATION_RETAIN)
 HWDSYNTH_DYNAMIC_PROPERTY_CTYPE(vap_enableOldVersion, setVap_enableOldVersion, BOOL)
 HWDSYNTH_DYNAMIC_PROPERTY_CTYPE(vap_enableOldVersion, setVap_enableOldVersion, BOOL)
+HWDSYNTH_DYNAMIC_PROPERTY_CTYPE(vap_isMute, setVap_isMute, BOOL)
 @end
 @end
 
 
 
 

+ 3 - 1
iOS/QGVAPlayerDemo/QGVAPlayerDemo/ViewController.m

@@ -121,6 +121,7 @@ void qg_VAP_Logger_handler(VAPLogLevel level, const char* file, int line, const
     mp4View.hwd_enterBackgroundOP = HWDMP4EBOperationTypePauseAndResume; // ⚠️ 建议设置该选项时对机型进行判断,屏蔽低端机
     mp4View.hwd_enterBackgroundOP = HWDMP4EBOperationTypePauseAndResume; // ⚠️ 建议设置该选项时对机型进行判断,屏蔽低端机
     UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onImageviewTap:)];
     UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(onImageviewTap:)];
     [mp4View addGestureRecognizer:tap];
     [mp4View addGestureRecognizer:tap];
+    [mp4View setMute:YES];
     [mp4View playHWDMP4:mp4Path repeatCount:-1 delegate:self];
     [mp4View playHWDMP4:mp4Path repeatCount:-1 delegate:self];
     
     
     dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
     dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
@@ -139,7 +140,8 @@ void qg_VAP_Logger_handler(VAPLogLevel level, const char* file, int line, const
     wrapView.contentMode = QGVAPWrapViewContentModeAspectFit;
     wrapView.contentMode = QGVAPWrapViewContentModeAspectFit;
     wrapView.autoDestoryAfterFinish = YES;
     wrapView.autoDestoryAfterFinish = YES;
     [self.view addSubview:wrapView];
     [self.view addSubview:wrapView];
-    NSString *resPath = [NSString stringWithFormat:@"%@/Resource/demo.mp4", [[NSBundle mainBundle] resourcePath]];
+    NSString *resPath = [NSString stringWithFormat:@"%@/Resource/vap.mp4", [[NSBundle mainBundle] resourcePath]];
+    [wrapView setMute:YES];
     [wrapView playHWDMP4:resPath repeatCount:-1 delegate:self];
     [wrapView playHWDMP4:resPath repeatCount:-1 delegate:self];
     UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doNothingonImageviewTap:)];
     UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(doNothingonImageviewTap:)];