GoodsVideoCollectionViewCell.m 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. //
  2. // GoodsVideoCollectionViewCell.m
  3. // westkissMob
  4. //
  5. // Created by 王猛 on 2022/9/15.
  6. //
  7. #import "GoodsVideoCollectionViewCell.h"
  8. @interface GoodsVideoCollectionViewCell ()
  9. @property (nonatomic, assign) BOOL isFirst;
  10. @end
  11. @implementation GoodsVideoCollectionViewCell
  12. - (instancetype)initWithFrame:(CGRect)frame{
  13. self = [super initWithFrame:frame];
  14. if (self) {
  15. self.isFirst = YES;
  16. [self xxx_loadIntView];
  17. }
  18. return self;
  19. }
  20. -(void)xxx_loadIntView{//@"http://www.w3school.com.cn/example/html5/mov_bbb.mp4"
  21. [self.contentView addSubview:self.forPlayView];
  22. self.forPlayView.frame = self.bounds;
  23. }
  24. - (UIView *)forPlayView {
  25. if(_forPlayView == nil) {
  26. _forPlayView = [[UIView alloc]initWithFrame:self.bounds];
  27. _forPlayView.hidden = YES;
  28. UIButton *voiceBtn = [UIButton buttonWithType:UIButtonTypeCustom];
  29. [voiceBtn setImage:[UIImage imageNamed:@"goods_voice_open"] forState:UIControlStateNormal];
  30. [voiceBtn setImage:[UIImage imageNamed:@"goods_voice_close"] forState:UIControlStateSelected];
  31. [voiceBtn addTarget:self action:@selector(handleVoiceBtnEvent:) forControlEvents:UIControlEventTouchUpInside];
  32. [_forPlayView addSubview:voiceBtn];
  33. voiceBtn.frame = CGRectMake(self.mj_h-60, self.mj_w-60, 44, 44);
  34. }
  35. return _forPlayView;
  36. }
  37. -(void)handleVoiceBtnEvent:(UIButton *)btn{
  38. btn.selected = !btn.selected;
  39. if (self.player.isMuted) {
  40. self.player.muted = NO;
  41. }else{
  42. self.player.muted = YES;
  43. }
  44. }
  45. #pragma mark - 网络视频模块
  46. - (ZFAVPlayerManager *)playerManager {
  47. if(_playerManager == nil) {
  48. _playerManager = [[ZFAVPlayerManager alloc] init];
  49. }
  50. return _playerManager;
  51. }
  52. - (ZFPlayerController *)player {
  53. if(_player == nil) {
  54. _player = [[ZFPlayerController alloc] initWithPlayerManager:self.playerManager containerView:self.forPlayView];
  55. _player.controlView = self.controlView;
  56. _player.playerDisapperaPercent = 1.0f;
  57. __weak typeof(self) weakSelf = self;
  58. _player.playerDidToEnd = ^(id<ZFPlayerMediaPlayback> asset) { //结束播放
  59. // [weakSelf.player stop];
  60. };
  61. [_player setPlayerPlayStateChanged:^(id<ZFPlayerMediaPlayback> asset, ZFPlayerPlaybackState playState) {
  62. if(playState == ZFPlayerPlayStatePlayStopped) {
  63. // NSLog(@"播放暂停");
  64. }
  65. }];
  66. [_player setPlayerPlayTimeChanged:^(id<ZFPlayerMediaPlayback> asset, NSTimeInterval currentTime, NSTimeInterval duration) {
  67. // NSLog(@"播放改变currentTime - %f duration - %f", currentTime, duration);
  68. }];
  69. }
  70. return _player;
  71. }
  72. -(ZFPlayerControlView *)controlView {
  73. if (_controlView == nil) {
  74. _controlView = [[ZFPlayerControlView alloc]init];
  75. _controlView.fastViewAnimated = YES;
  76. _controlView.autoHiddenTimeInterval = 5;
  77. _controlView.autoFadeTimeInterval = 0.5;
  78. _controlView.prepareShowLoading = YES;
  79. _controlView.prepareShowControlView = NO;
  80. [_controlView.portraitControlView.fullScreenBtn setImage:[UIImage imageNamed:@"goods_voice_open"] forState:UIControlStateNormal];
  81. [_controlView.portraitControlView.fullScreenBtn setImage:[UIImage imageNamed:@"goods_voice_close"] forState:UIControlStateSelected];
  82. [_controlView.portraitControlView.fullScreenBtn addTarget:self action:@selector(handleVoiceBtnEvent:) forControlEvents:UIControlEventTouchUpInside];
  83. }
  84. return _controlView;
  85. }
  86. - (void)playerDealloc {
  87. //网络视频
  88. if(_playerManager) {
  89. _playerManager = nil;
  90. }
  91. if(_player) {
  92. _player.viewControllerDisappear = YES;
  93. [_player stop];
  94. _player = nil;
  95. }
  96. }
  97. -(void)setModel:(GoodsBannerModel *)model{
  98. NSString *videoUrl = model.url;
  99. self.forPlayView.hidden = NO;
  100. if (self.isFirst) {
  101. self.isFirst = NO;
  102. [self.player.currentPlayerManager setAssetURL:[NSURL URLWithString:videoUrl]];
  103. @weakify(self)
  104. self.player.playerReadyToPlay = ^(id<ZFPlayerMediaPlayback> _Nonnull asset, NSURL * _Nonnull assetURL) {
  105. @strongify(self)
  106. self.controlView.portraitControlView.fullScreenBtn.selected = YES;
  107. self.player.muted = NO;
  108. };
  109. }
  110. }
  111. @end