相关疑难解决方法(0)

如何在不损失视网膜显示质量的情况下将UIView捕获到UIImage

我的代码适用于普通设备,但在视网膜设备上会产生模糊图像.

有人知道我的问题的解决方案吗?

+ (UIImage *) imageWithView:(UIView *)view
{
    UIGraphicsBeginImageContext(view.bounds.size);
    [view.layer renderInContext:UIGraphicsGetCurrentContext()];

    UIImage * img = UIGraphicsGetImageFromCurrentImageContext();

    UIGraphicsEndImageContext();

    return img;
}
Run Code Online (Sandbox Code Playgroud)

image-capture scale uikit uiimage retina-display

293
推荐指数
9
解决办法
15万
查看次数

如何将CVPixelBuffer变成UIImage?

我在从CVPixelBuffer获取UIIMage时遇到一些问题.这就是我想要的:

CVPixelBufferRef pixelBuffer = CMSampleBufferGetImageBuffer(imageDataSampleBuffer);
CFDictionaryRef attachments = CMCopyDictionaryOfAttachments(kCFAllocatorDefault, imageDataSampleBuffer, kCMAttachmentMode_ShouldPropagate);
CIImage *ciImage = [[CIImage alloc] initWithCVPixelBuffer:pixelBuffer options:(NSDictionary *)attachments];
if (attachments)
    CFRelease(attachments);
size_t width = CVPixelBufferGetWidth(pixelBuffer);
size_t height = CVPixelBufferGetHeight(pixelBuffer);
if (width && height) { // test to make sure we have valid dimensions
    UIImage *image = [[UIImage alloc] initWithCIImage:ciImage];

    UIImageView *lv = [[UIImageView alloc] initWithFrame:self.view.frame];
    lv.contentMode = UIViewContentModeScaleAspectFill;
    self.lockedView = lv;
    [lv release];
    self.lockedView.image = image;
    [image release];
}
[ciImage release];
Run Code Online (Sandbox Code Playgroud)

height并且width都正确设置为相机的分辨率. image是创建但我似乎是黑色(或可能是透明的?).我不太明白问题出在哪里.任何想法,将不胜感激.

avfoundation uiimage ios

36
推荐指数
5
解决办法
3万
查看次数

使用AVAssetReader从远程资产中读取(流)

我的主要目标是从服务器流式传输视频,并在流式传输时逐帧剪切(以便OpenGL可以使用它).为此,我使用了我在互联网上随处可见的代码(我记得它来自Apple的GLVideoFrame示例代码):

NSArray * tracks = [asset tracks];
NSLog(@"%d", tracks.count);

for(AVAssetTrack* track in tracks) {

    NSLog(@"type: %@", [track mediaType]);

    initialFPS = track.nominalFrameRate;
    width = (GLuint)track.naturalSize.width;
    height = (GLuint)track.naturalSize.height;


    NSError * error = nil;

    // _movieReader is a member variable
    @try {
        self._movieReader = [[[AVAssetReader alloc] initWithAsset:asset error:&error] autorelease];
    }
    @catch (NSException *exception) {
        NSLog(@"%@ -- %@", [exception name], [exception reason]);
        NSLog(@"skipping track");

        continue;
    }


    if (error)
    {
        NSLog(@"CODE:%d\nDOMAIN:%@\nDESCRIPTION:%@\nFAILURE_REASON:%@", [error code], [error domain], error.localizedDescription, [error localizedFailureReason]);                                          
        continue;
    }

    NSString* key = (NSString*)kCVPixelBufferPixelFormatTypeKey; …
Run Code Online (Sandbox Code Playgroud)

iphone objective-c avfoundation video-streaming ios

30
推荐指数
1
解决办法
2万
查看次数

我可以使用AVFoundation将下载的视频帧流式传输到OpenGL ES纹理中吗?

我已经能够使用AVFoundation的AVAssetReader类将视频帧上传到OpenGL ES纹理中.但是,它有一个警告,因为当它与AVURLAsset指向远程媒体一起使用时会失败.这个失败没有很好的记录,我想知道是否有任何解决方法的缺点.

streaming opengl-es objective-c avfoundation ios

20
推荐指数
1
解决办法
8930
查看次数

m3u8文件AVAssetImageGenerator错误

我正在使用AVPlayer播放.m3u8文件.使用AVAssetImageGenerator使用以下代码从中提取图像:

AVURLAsset *asset1 = [[AVURLAsset alloc] initWithURL:mp.contentURL options:nil];
AVAssetImageGenerator *generate1 = [[AVAssetImageGenerator alloc] initWithAsset:asset1];
generate1.appliesPreferredTrackTransform = YES;
NSError *err = NULL;
CMTime time = CMTimeMake(1, 2);
CGImageRef oneRef = [generate1 copyCGImageAtTime:time actualTime:NULL error:&err];
img = [[UIImage alloc] initWithCGImage:oneRef];
Run Code Online (Sandbox Code Playgroud)

它总是给我错误:

错误域= AVFoundationErrorDomain代码= -11800"操作无法完成"UserInfo = 0x7fb4e30cbfa0 {NSUnderlyingError = 0x7fb4e0e28530"操作无法完成.(OSStatus error -12782.)",NSLocalizedFailureReason =发生未知错误(-12782) ),NSLocalizedDescription =操作无法完成}

它适用于mp4,mov和所有主要视频扩展URL但不适用于m3u8.任何的想法??

avfoundation ios avplayer avassetimagegenerator

15
推荐指数
2
解决办法
4157
查看次数

[iOS] AVPlayerItemVideoOutput.hasNewPixelBufferForItemTime无法正常工作

这是我的第一个问题,所以不要太严厉.

我正在使用AVPlayer从网上播放视频.I输出使用当前帧AVPlayerItemVideoOutput附接到AVPlayerItem通过所播放的AVPlayer.要检查新帧是否准备就绪,我调用[AVPlayerItemVideoOutput hasNewPixelBufferForItemTime],然后使用OpenGL ES输出它.如果我读取mp4,一切都很完美,但如果我尝试读取m3u8,它可以工作约1秒钟(~30帧),但在此期间[AVPlayerItemVideoOutput hasNewPixelBufferForItemTime]开始仅返回FALSE,因此当前帧不会更新.

如果我在此问题首次发生之前使用[AVPlayer seekToTime]寻找当前帧,则一切正常.

测试我使用的m3u8视频:

http://195.16.112.71/adaptive/3006a26a-9154-4b38-a327-4fa2a2381ae6.video/3006a26a-9154-4b38-a327-4fa2a2381ae6.m3u8
Run Code Online (Sandbox Code Playgroud)

为了重现这个问题,我修改了Apple的AVPlayerDemo示例,这里是:https://yadi.sk/d/T2aVGoKnWmf5Z

主要的变化在于我调用[AVPlayerDemoPlaybackViewController update]调用提到的[AVPlayerItemVideoOutput hasNewPixelBufferForItemTime].此函数具有静态变量计数器,用于存储成功[AVPlayerItemVideoOutput copyPixelBufferForItemTime]调用的数量.

视频网址在[AVPlayerDemoPlaybackViewController setURL]中设置,它在函数的开头硬编码.默认情况下,它的值指向m3u8视频,它会再现问题,在这种情况下,具有该索引的帧[AVPlayerItemVideoOutput hasNewPixelBufferForItemTime]仅返回FALSE 后,计数器的平均值约为30 .

在使用其他视频Url的情况下(参见[AVPlayerDemoPlaybackViewController setURL]的开头- 还有一个可以取消注释的替代Url),所有帧都被成功读取.

任何帮助将不胜感激!

iphone video ios avplayer

11
推荐指数
2
解决办法
4059
查看次数

使用 AV 播放器访问单个帧

在最近的一个项目中,我必须使用 AV Foundation 单独访问我的视频的所有帧。此外,如果可能的话,随机访问它们(如数组)

我试图研究这个问题,但没有得到任何有用的信息。

注意:是否有任何有用的文档来熟悉 AV Foundation ?

video avfoundation ios avplayer swift

5
推荐指数
1
解决办法
2474
查看次数