在iOS中解码H264

5

我是AVFoundation和解码过程的新手。我需要解码一个H264视频文件并在iPhone上播放它...有人可以给我指导吗。

我不想使用任何第三方库(例如ffmpeg)来完成这项工作。据我所知,使用AVFoundation编码是可能的...这里是我认为用于编码的代码,但并不确定...

float bitsPerPixel;
CMVideoDimensions dimensions = CMVideoFormatDescriptionGetDimensions(currentFormatDescription);
int numPixels = dimensions.width * dimensions.height;
int bitsPerSecond;

// Assume that lower-than-SD resolutions are intended for streaming, and use a lower bitrate
if ( numPixels < (640 * 480) )
    bitsPerPixel = 4.05; // This bitrate matches the quality produced by AVCaptureSessionPresetMedium or Low.
else
    bitsPerPixel = 11.4; // This bitrate matches the quality produced by AVCaptureSessionPresetHigh.

bitsPerSecond = numPixels * bitsPerPixel;

NSDictionary *videoCompressionSettings = [NSDictionary dictionaryWithObjectsAndKeys:
                                          AVVideoCodecH264, AVVideoCodecKey,
                                          [NSNumber numberWithInteger:dimensions.width], AVVideoWidthKey,
                                          [NSNumber numberWithInteger:dimensions.height], AVVideoHeightKey,
                                          [NSDictionary dictionaryWithObjectsAndKeys:
                                           [NSNumber numberWithInteger:bitsPerSecond], AVVideoAverageBitRateKey,
                                           [NSNumber numberWithInteger:30], AVVideoMaxKeyFrameIntervalKey,
                                           nil], AVVideoCompressionPropertiesKey,
                                          nil];
if ([assetWriter canApplyOutputSettings:videoCompressionSettings forMediaType:AVMediaTypeVideo]) {
    assetWriterVideoIn = [[AVAssetWriterInput alloc] initWithMediaType:AVMediaTypeVideo outputSettings:videoCompressionSettings];
    assetWriterVideoIn.expectsMediaDataInRealTime = YES;
    assetWriterVideoIn.transform = [self transformFromCurrentVideoOrientationToOrientation:self.referenceOrientation];
    if ([assetWriter canAddInput:assetWriterVideoIn])
        [assetWriter addInput:assetWriterVideoIn];
    else {
        NSLog(@"Couldn't add asset writer video input.");
        return NO;
    }
}
else {
    NSLog(@"Couldn't apply video output settings.");
    return NO;
}

return YES;

我对此完全不了解,请帮忙...从哪里开始?

谢谢


我也在尝试做同样的事情,你找到解决方案了吗? - William A
该项目已被取消...我们没有找到解决方案... - Shoeb Amin
2个回答

0
您可以参考并构建官方示例代码:AVPlayerDemo,以了解其工作原理。它使用 AV Foundation 框架,主要使用 AVPlayer API 播放视频文件,性能表现优异。 要通过 AVPlayerDemo 播放视频文件,您应该通过 iTunes 将视频文件复制到您的 iOS 设备并在 AVPlayerDemo 应用程序中选择 iPod 图书馆。

0

更简单的解决方案是使用MPMoviePlayerController。它可以输入本地文件系统或通过URL获取mov或mv4文件。

另一个选项是使用AVPlayer类。

希望能有所帮助,

David


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接