1

私は独自のカスタムビデオプレーヤーを構築しました(編集:ここでサンプルコードを見つけてください

AVMoviePlayerView.h

#import <UIKit/UIKit.h>
#import <AVFoundation/AVFoundation.h>

@class AVPlayer;

@interface AVMoviePlayerView : UIView

@property (nonatomic) AVPlayer *player;

- (void)setPlayer:(AVPlayer*)player;
- (void)setVideoFillMode:(NSString *)fillMode;

@end

AVMoviePlayerView.m

#import "AVMoviePlayerView.h"
#import <CoreMedia/CoreMedia.h>

@implementation AVMoviePlayerView


+ (Class)layerClass {

    return [AVPlayerLayer class];

}

- (AVPlayer*)player
{
    return [(AVPlayerLayer*)[self layer] player];
}

- (void)setPlayer:(AVPlayer*)player
{
    [(AVPlayerLayer*)[self layer] setPlayer:player];
}

- (void)setVideoFillMode:(NSString *)fillMode
{
    AVPlayerLayer *playerLayer = (AVPlayerLayer*)[self layer];
    playerLayer.videoGravity = fillMode;
}


@end

-(void)viewDidLoad内のMainViewController.m内から呼び出します

    NSURL* url = [[NSBundle mainBundle] URLForResource:@"myVideo.264" withExtension:@"mp4"]; 
    self.avPlayer = [AVPlayer playerWithURL:url];
    [avPlayer addObserver:self forKeyPath:@"status" options:0 context:AVMoviePlayerViewControllerStatusObservationContext];
    [[NSNotificationCenter defaultCenter]   addObserver:self
                                               selector:@selector(playerItemDidReachEnd:)
                                                   name:AVPlayerItemDidPlayToEndTimeNotification
                                                 object:[self.avPlayer currentItem]];

メソッドで

- (void)observeValueForKeyPath:(NSString*) path ofObject:(id)object change:(NSDictionary*)change context:(void*)context
{
    if (avPlayer.status == AVPlayerStatusReadyToPlay) {
        [self.VideoLoop setPlayer:self.avPlayer];
        [self.avPlayer play];
    }
}
- (void)playerItemDidReachEnd:(NSNotification *)notification {
    AVPlayerItem *p = [notification object];
    [p seekToTime:kCMTimeZero];
}

そしてもちろんMainViewController.hで定義されています

...
#import <CoreGraphics/CoreGraphics.h>
#import "AVMoviePlayerView.h"
@class AVMoviePlayerView;
@class AVPlayer;
...
IBOutlet AVMoviePlayerView *VideoLoop;
AVPlayer* avPlayer;

シミュレーターでは正常に動作しますが(ループを除くが、それは別の問題です)、デバイス(iPad3)ではビデオが表示されません。

私は何かを逃しましたか?ありがとう!!!

編集:私がどれほど愚かであるかを簡単に示すために、ここでいくつかのサンプルコードを見つけてください。これはシミュレータでは機能しますが、デバイスでは機能しません。

4

3 に答える 3

12

理由が見つかりました-コストはわずか50ポイントです...iOSは最大2.5MbpsのMPEG-4ビデオとH.2641080pをサポートしています。ビデオのフレームサイズが大きすぎました。

于 2012-08-30T13:07:53.327 に答える
1

@headkitの答えに加えて、それは私のためにトリックをしました...

QuickTimeでビデオファイルを開き、

エクスポート>1080p。

拡張子を「mov」に変更することを忘れないでください!

于 2015-02-10T20:10:00.453 に答える
0

私のようにここに来て、Appleドキュメントからの更新された仕様を望んでいる他の人のために:

iPhone 7、6s

サポートされているビデオ形式:最大4KのH.264ビデオ、毎秒30フレーム、最大160 Kbps、48kHzのAAC-LCオーディオを備えたハイプロファイルレベル4.2、.m4v、.mp4、および.movファイル形式のステレオオーディオ。最大2.5Mbps、640x480ピクセル、30フレーム/秒のMPEG-4ビデオ、チャネルあたり最大160 KbpsのAAC-LCオーディオを備えたシンプルプロファイル、48kHz、.m4v、.mp4、および.movファイル形式のステレオオーディオ。最大35MbpsのモーションJPEG(M-JPEG)、1280x720ピクセル、毎秒30フレーム、ulawのオーディオ、.aviファイル形式のPCMステレオオーディオ

iPhone 5、5s、6

サポートされているビデオ形式:最大1080pのH.264ビデオ、毎秒30フレーム、最大160 Kbps、48kHzのAAC-LCオーディオを備えたハイプロファイルレベル4.1、.m4v、.mp4、および.movファイル形式のステレオオーディオ。最大2.5Mbps、640 x 480ピクセル、30フレーム/秒のMPEG-4ビデオ、チャネルあたり最大160 KbpsのAAC-LCオーディオを備えたシンプルプロファイル、48kHz、.m4v、.mp4、および.movファイル形式のステレオオーディオ。最大35MbpsのモーションJPEG(M-JPEG)、1280 x 720ピクセル、30フレーム/秒、ulawのオーディオ、.aviファイル形式のPCMステレオオーディオ

(更新されたリンクについては、グーグルiPhone(モデル番号)の仕様で検索し、Appleサイトからの結果をタップします。「ビデオ再生」までスクロールダウンするよりも)

于 2017-06-22T06:18:29.560 に答える