10

iPhone 3GS で簡単なビデオ アップローダー アプリケーションを作成しています。最初にユーザーを写真アルバムに誘導し、次に共有またはアップロードするビデオを選択します。次の方法で UIImagePickerController を使用しています。

videoPickerCtrl = [[UIImagePickerController alloc] init];
 videoPickerCtrl.delegate = self;
 videoPickerCtrl.sourceType =  UIImagePickerControllerSourceTypePhotoLibrary;
 videoPickerCtrl.mediaTypes = [UIImagePickerController  availableMediaTypesForSourceType:videoPickerCtrl.sourceType];   

 videoPickerCtrl.allowsImageEditing = NO;
 videoPickerCtrl.mediaTypes = [NSArray arrayWithObject:(NSString *)kUTTypeMovie];
 [window addSubview:videoPickerCtrl.view];

しかし、コントローラーが呼び出されると、不快なビデオ トリミング インターフェイスが表示されることがわかります。「選択」を押すと、トリミング コントロールに触れるかどうかに関係なく、ビデオは常にトリミングされます。このトリミング インターフェイスを回避して、ビデオ ファイルのパスを直接取得する方法はありますか?

4

3 に答える 3

2

興味深い問題です。これは、他の誰かがこれを見ている場合の情報のためだけです。iPad OS 3.2 では、ピッカーは機能し、カメラ ロールだけでなくアルバムからもビデオを選択できますが、ビデオの取得にいくつか問題があることがわかりました。

ここに私の作業コードフラグメントがあります

呼び出し

NSArray *mediaTypesAllowed = [UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypePhotoLibrary];
    [picker setMediaTypes:mediaTypesAllowed];

    picker.delegate = self;
    picker.allowsEditing = NO;
    picker.wantsFullScreenLayout = YES;
    if(!IsEmpty(self.editBackgroundPopover)){
        [self.editBackgroundPopover  setContentViewController:picker animated:YES]; 
    } 

そして、ここにデリゲートメソッドがあります

imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
    [self.editBackgroundPopover dismissPopoverAnimated:true];   

NSString* mediaType = [info objectForKey:UIImagePickerControllerMediaType];  

    //not production code,  do not use hard coded string in real app
    if ( [ mediaType isEqualToString:@"public.image" ]) {                                                                                                        
        NSLog(@"Picked a photo");
    }
    //not production code,  do not use hard coded string in real app
    else if ( [ mediaType isEqualToString:@"public.movie" ]){
        NSLog(@"Picked a movie at URL %@",  [info objectForKey:UIImagePickerControllerMediaURL]);
        NSURL *url =  [info objectForKey:UIImagePickerControllerMediaURL];
        NSLog(@"> %@", [url absoluteString]); 
    } 

    [[picker self] dismissModalViewControllerAnimated:YES];
}

ただし、ピッカーから取得したビデオ URL の形式は次のとおりです。

ファイル:/localhost/private/var/mobile/Applications/C6FAC491-D27D-45A6-B805-951727ED2CEC/tmp/-Tmp-/trim.KOzqps.MOV

そのため、ビデオ全体を選択している場合でも、ビデオがトリミング コードによって処理されているように見えます。また、iTunes からロードしたときの元のタイプは m4v であったムービーは、もちろんデバイスで再生できないタイプの MOV であることに注意してください。URL を再生してみましたが、「この種の動画は再生できません」というアラートが表示されました。

Apple がここで何をしているのかよくわかりません。この API は、写真ライブラリからビデオを読み込んで再生する方法としては、実際には使用できないようです。

願わくば、IOS 4 がもっと近々登場することを願っていますが、私の iPad アプリについては、まだ数か月先です。

于 2010-07-02T09:11:55.743 に答える
2

allowsEditing = NO;代わりに設定する必要がallowsImageEditing = NO;あります (これは 3.1 で廃止されました)。次に、選択したムービーが 10 分を超えない限り、トリミング インターフェイスは表示されません (ドキュメントから:「ムービーの最大再生時間は 10 分です。ユーザーが 10 分よりも長いムービーを選択すると、強制的にトリミングされます)。保存する前に。」)。

于 2009-10-27T13:22:55.220 に答える
1

さて、SDKドキュメントを注意深く調べた後、ずっと前に動作するようになりました。3GSのCameraRollディレクトリからビデオを取得できます。しかし、UIImagePickerControllerがCamera Roll以外のディレクトリ(たとえば、ユーザーがiTunesを介してビデオを同期するデバイスのフォトライブラリ)からビデオを選択する方法を見つけることができません。SDKにそれを行うための標準的な方法はありますか?

于 2009-11-14T06:18:39.547 に答える