【问题标题】:Mp4 file cannot playMp4 文件无法播放
【发布时间】:2016-10-21 08:51:38
【问题描述】:

我有一个splash_screen.mp4 文件。

这是我在.h 文件中的代码

@property AVPlayer * player;
@property AVPlayerLayer * playerLayer;

.m 文件中:

NSURL* mURL = [[NSBundle mainBundle] URLForResource:@"splash_screen" withExtension:@"mp4"];

self.player = [AVPlayer playerWithURL:mURL];
self.player.actionAtItemEnd = AVPlayerActionAtItemEndNone;
Float64 seconds = 1.5f;
CMTime targetTime = CMTimeMakeWithSeconds(seconds, NSEC_PER_SEC);
[self.player seekToTime:targetTime];

[[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(playerItemDidReachEnd:)
                                                 name:AVPlayerItemDidPlayToEndTimeNotification
                                               object:[self.player currentItem]];

self.playerLayer = [AVPlayerLayer playerLayerWithPlayer:self.player];
self.playerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
self.playerLayer.needsDisplayOnBoundsChange = YES;
[self.playerLayer setFrame:[self.view bounds]];

[self.view.layer addSublayer:self.playerLayer];
self.view.layer.needsDisplayOnBoundsChange = YES;
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
        if (self.player) {
            [self.player play];
        }
    });

以前我有一个.mov文件,可以播放视频文件,但现在我有一个.mp4文件,不能播放。

在模拟器上测试,视频可以运行,但在设备上,它没有运行。

【问题讨论】:

  • 它对我有用。当您播放 .mp4 文件时,应用程序是否崩溃?如果它崩溃了,控制台的输出是什么?
  • @ronan,它不会崩溃。只是白色的空白屏幕。调试了一下,可以得到url,但是不知道为什么视频不能播放。
  • 检查,它已正确复制到副本包资源中。
  • 尝试另一个低分辨率的 mp4 文件,我认为它也可以在 5 和 5 秒内工作

标签: ios objective-c video


【解决方案1】:

希望这可行

Asset = [AVAsset assetWithURL:[NSURL fileURLWithPath:filePath]];
avPlayerItem =[[AVPlayerItem alloc]initWithAsset:Asset];
avPlayer = [[AVPlayer alloc]initWithPlayerItem:avPlayerItem];
avPlayerLayer =[AVPlayerLayer playerLayerWithPlayer:Player];
[avPlayerLayer setFrame:self.view.frame];
[self.view.layer addSublayer:avPlayerLayer];
[avPlayer seekToTime:kCMTimeZero];
[avPlayer play];

【讨论】:

    【解决方案2】:

    您需要在右侧面板中为您的 mp4 文件选择“Target Membership”。

    1. 选择 MP4 文件

    2 。见截图。

    【讨论】:

    • 我已经检查了所有目标会员
    • 不受影响。
    • 在模拟器上测试过,可以运行。但在设备上,它没有:(。
    【解决方案3】:

    您是否尝试过在其上添加观察者并在 Try & Catch 中处理它。

    请在必需的后台模式中启用“应用程序使用 AirPlay 播放音频或流式传输音频/视频”。

        NSURL* mURL = [[NSBundle mainBundle] URLForResource:@"splash_screen" withExtension:@"mp4"];
    
        NSURL *url = mURL;
            AVPlayer *player = [[AVPlayer alloc]initWithURL:url];
            if (_audioPlayer != nil)
            {
                @try {
                    [_audioPlayer removeObserver:self forKeyPath:@"status" context:nil];
                } @catch (NSException *exception) {
                    NSLog(@"Catch player exception");
                }
            }
            _audioPlayer = player; 
    self.playerLayer = [AVPlayerLayer playerLayerWithPlayer:player];
    self.playerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
    self.playerLayer.needsDisplayOnBoundsChange = YES;
    [self.playerLayer setFrame:[self.view bounds]];
    
    [self.view.layer addSublayer:self.playerLayer];
            [_audioPlayer addObserver:self forKeyPath:@"status" options:0 context:nil];
    

    一旦 AVPlayer 从 mURL 获得有效文件,它就会调用具有状态准备播放的观察者。 " AVPlayerStatusReadyToPlay "

    #pragma Observer for Player status.
    - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
    
        if (object == _audioPlayer && [keyPath isEqualToString:@"status"]) {
            if (_audioPlayer.status == AVPlayerStatusFailed) {
                NSLog(@"AVPlayer Failed");
    
            } else if (_audioPlayer.status == AVPlayerStatusReadyToPlay) {
                NSLog(@"AVPlayerStatusReadyToPlay");            
                    [_audioPlayer play];
    
                }
    
            } else if (_audioPlayer.status == AVPlayerItemStatusUnknown) {
                NSLog(@"AVPlayer Unknown");
    
    
            }
            [_audioPlayer removeObserver:self forKeyPath:@"status" context:nil];
        }
    
    }
    

    请你试试看。如果我们需要通过其他方式处理,请发表您的评论。另外请检查视频文件是否有效,是否有内容。

    【讨论】:

      猜你喜欢
      • 2015-06-24
      • 2013-05-17
      • 1970-01-01
      • 2014-09-27
      • 1970-01-01
      • 1970-01-01
      • 2012-11-04
      • 1970-01-01
      • 2013-07-31
      相关资源
      最近更新 更多