質問

ご存知のように、MPMoviePlayerControllerオブジェクトを使用して映画を再生してください

[[MPMoviePlayerController alloc] initWithContentURL: aURL];

次に、アルゴリズムによって暗号化された映画ソースを復号化するカスタムnsurlprotocolを実現したいと思います。それは可能性ですか?アイデアを与えてくれてありがとう。あなたが助けてくれる〜

役に立ちましたか?

解決

アップデート: 私はこれについてAppleに話をしましたが、現在MPMoviePlayerControllerを使用することは不可能です。


hej、

よくわかりませんが、可能性があります。私は現在、似たようなことに取り組んでいますが、完全に機能していません。私が見つけたのは、MPMoviePlayerControllerが私のカスタムNSURLProtoColサブクラスと対話することですが、MPMoviePlayerControllerのニーズを定義するため、NsurlRrequestのhttpheadersを考慮に入れることが重要であると思われます。

nsurlprotocolサブクラスにそれらをダンプすると、開始のためにこのようなものを2回取得します。

2011-01-16 17:00:47.287 iPhoneApp[1177:5f03] Start loading from request: {
Range = "bytes=0-1";

}

したがって、私の推測では、正しい範囲を提供し、MPMoviePlayerControllerが再生できるMP4ファイルを返すことができる限り、可能であると思います!

編集:ここに興味深いリンクがあります: iPhoneおよびiPadアプリのリソースを保護します

他のヒント

解決策は、ローカルHTTPサーバーを介してリクエストをプロキシすることです。私はこれを使用して達成しました cocoahttpserver.

を見てください HTTPAsyncFileResponse 例。

iOS 7にはもう1つのソリューションがあります。AvassetResouroAderDeLegateを使用することができます。しかし、これはAvplayerでのみ機能します。

Avarldelegatedemoと呼ばれるAppleによるデモプロジェクトがあります。それを見て、必要なものを見つける必要があります。 (それにリンクすることは良い考えではないと思うので、Developer.Apple.comの開発者ライブラリでそれを検索してください)次に、カスタムURLスキーム(nsurlprotocolを宣言せずに)を使用して、AvassetResourceloAderDelegateでそのURLスキームを処理します。

大きな関心があれば、私は概念の証明要点を提供することができます。

@property AVPlayerViewController *avPlayerVC;
@property NSData *yourDataSource

// initialise avPlayerVC
    NSURL *dummyURL     = [NSURL URLWithString:@"foobar://dummy.mov"];// a non-reachable URL will force the use of the resourceLoader
    AVURLAsset *asset   = [AVURLAsset assetWithURL:dummyURL];
    [asset.resourceLoader setDelegate:self queue:dispatch_get_global_queue(QOS_CLASS_USER_INTERACTIVE, 0)];

    AVPlayerItem *item = [AVPlayerItem playerItemWithAsset:asset];

    self.avPlayerVC.player = [AVPlayer playerWithPlayerItem:item];
    self.avPlayerVC.player.actionAtItemEnd  = AVPlayerActionAtItemEndNone;



// implement AVAssetResourceLoaderDelegate

- (BOOL)resourceLoader:(AVAssetResourceLoader *)resourceLoader shouldWaitForLoadingOfRequestedResource:(AVAssetResourceLoadingRequest *)loadingRequest {

    loadingRequest.contentInformationRequest.contentType    = (__bridge NSString *)kUTTypeQuickTimeMovie;
    loadingRequest.contentInformationRequest.contentLength  = self.yourDataSource.length;
    loadingRequest.contentInformationRequest.byteRangeAccessSupported   = YES;

    NSRange range = NSMakeRange((NSUInteger)loadingRequest.dataRequest.requestedOffset, loadingRequest.dataRequest.requestedLength);
    [loadingRequest.dataRequest respondWithData:[self.yourDataSource subdataWithRange:range]];

    [loadingRequest finishLoading];
    return YES;
}

ダミーURLの使用を強制することに注意してください AVPlayer 使用するには AVAssetResourceLoaderDelegate URLに直接アクセスする代わりにメソッド。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top