首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用ELCImagePickerController选择视频获取可播放的视频url

如何使用ELCImagePickerController选择视频获取可播放的视频url
EN

Stack Overflow用户
提问于 2014-02-19 07:09:08
回答 1查看 564关注 0票数 0

现在,我正在使用ELCImagePickerController选择多个视频,但在选择之后,它会给ALAssetTypeVideo not public.movie“类型url,所以我无法用AVPlayer来播放这个。请帮助我。”

我正在尝试使用以下代码:

代码语言:javascript
复制
- (void)elcImagePickerController:(ELCImagePickerController *)picker didFinishPickingMediaWithInfo:(NSArray *)info
{
    [self dismissViewControllerAnimated:YES completion:nil];

    for (UIView *v in [_scrollView subviews]) {
        [v removeFromSuperview];
    }

    CGRect workingFrame = _scrollView.frame;
    workingFrame.origin.x = 0;

    NSMutableArray *images = [NSMutableArray arrayWithCapacity:[info count]];

    for (NSDictionary *dict in info) {

        NSURL *urlvideo = [dict objectForKey:UIImagePickerControllerReferenceURL];
        NSLog(@"Video URl is::::--%@",urlvideo);
        UIImage *image = [dict objectForKey:UIImagePickerControllerOriginalImage];
        [images addObject:image];

        UIImageView *imageview = [[UIImageView alloc] initWithImage:image];
        [imageview setContentMode:UIViewContentModeScaleAspectFit];
        imageview.frame = workingFrame;

        [_scrollView addSubview:imageview];

        workingFrame.origin.x = workingFrame.origin.x + workingFrame.size.width;
    }

    self.chosenImages = images;

    [_scrollView setPagingEnabled:YES];
    [_scrollView setContentSize:CGSizeMake(workingFrame.origin.x, workingFrame.size.height)];
}
EN

回答 1

Stack Overflow用户

发布于 2014-03-05 11:20:50

我已经解决了我的问题,首先将视频保存在临时文件中,然后使用存储在临时文件中的视频url,现在视频正在正常播放。

代码语言:javascript
复制
+(NSString *) videoAssetURLToTempFile:(NSURL*)url
{
    NSString * surl = [url absoluteString];
    NSString * ext = [surl substringFromIndex:[surl rangeOfString:@"ext="].location + 4];
    NSTimeInterval ti = [[NSDate date]timeIntervalSinceReferenceDate];
    NSString *str = [NSString stringWithFormat:@"%f",ti];
    NSArray *Array = [str componentsSeparatedByString:@"."];
    NSString *fileString =[[NSString alloc]initWithString:[Array objectAtIndex:0]];
    NSLog(@"FileName string is ::::--%@",fileString);


    NSString * filename = [NSString stringWithFormat: @"%@.%@",fileString,ext];
    NSLog(@"FileName is ::::--%@",filename);


    NSString * tmpfile = [NSTemporaryDirectory() stringByAppendingPathComponent:filename];

    ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *myasset)
    {

        ALAssetRepresentation * rep = [myasset defaultRepresentation];
        NSUInteger size = [rep size];
        const int bufferSize = 8192;


        //NSLog(@"Writing to %@",tmpfile);
        FILE* f = fopen([tmpfile cStringUsingEncoding:1], "wb+");
        if (f == NULL) {
            NSLog(@"Can not create tmp file.");
            return;
        }
        Byte * buffer = (Byte*)malloc(bufferSize);
        int read = 0, offset = 0, written = 0;
        NSError* err;
        if (size != 0) {
            do {
                read = [rep getBytes:buffer
                          fromOffset:offset
                              length:bufferSize
                               error:&err];
                written = fwrite(buffer, sizeof(char), read, f);
                offset += read;
            } while (read != 0);
        }
        fclose(f);
    };

    ALAssetsLibraryAccessFailureBlock failureblock  = ^(NSError *myerror)
    {
        NSLog(@"Can not get asset - %@",[myerror localizedDescription]);
    };

    if(url)
    {
        ALAssetsLibrary* assetslibrary = [[ALAssetsLibrary alloc] init];
        [assetslibrary assetForURL:url
                       resultBlock:resultblock
                      failureBlock:failureblock];
    }
    return tmpfile;
}

有关更多详细信息,请参阅Getting video from ALAsset

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21873461

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档