【问题标题】:Playing video on iOS using OpenGL-ES使用 OpenGL-ES 在 iOS 上播放视频
【发布时间】:2011-10-01 13:23:03
【问题描述】:

我正在尝试在 iOS 上播放视频 (MP4/H.263),但结果非常模糊。 这是初始化资产读取的代码:

mTextureHandle = [self createTexture:CGSizeMake(400,400)];

NSURL * url = [NSURL fileURLWithPath:file];    
mAsset = [[AVURLAsset alloc] initWithURL:url options:NULL];

NSArray * tracks = [mAsset tracksWithMediaType:AVMediaTypeVideo];

mTrack = [tracks objectAtIndex:0];

NSLog(@"Tracks: %i", [tracks count]);

NSString* key = (NSString*)kCVPixelBufferPixelFormatTypeKey;
NSNumber* value = [NSNumber numberWithUnsignedInt:kCVPixelFormatType_32BGRA];
NSDictionary * settings = [[NSDictionary alloc] initWithObjectsAndKeys:value, key, nil];

mOutput = [[AVAssetReaderTrackOutput alloc] 
            initWithTrack:mTrack outputSettings:settings];


mReader = [[AVAssetReader alloc] initWithAsset:mAsset error:nil];
[mReader addOutput:mOutput];

对于读者初始化来说,现在是实际的纹理:

CMSampleBufferRef sampleBuffer = [mOutput copyNextSampleBuffer];    
CVImageBufferRef pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer);
CVPixelBufferLockBaseAddress( pixelBuffer, 0 );

glBindTexture(GL_TEXTURE_2D, mTextureHandle);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 600, 400, 0, GL_BGRA_EXT, GL_UNSIGNED_BYTE, CVPixelBufferGetBaseAddress( pixelBuffer ));    
CVPixelBufferUnlockBaseAddress( pixelBuffer, 0 );    
CFRelease(sampleBuffer);

一切都很好......除了渲染的图像看起来像这样;切片和歪斜?

我什至尝试查看AVAssetTrack 的首选转换矩阵,但无济于事,因为它总是返回CGAffineTransformIdentity

旁注:如果我将源切换到相机,图像会渲染得很好。我错过了一些减压步骤吗?这不应该由资产读取器处理吗?

谢谢!

代码:https://github.com/shaded-enmity/objcpp-opengl-video

【问题讨论】:

  • 您介意分享您为此项目编写的代码吗?我正在尝试做类似的事情,但很难开始。
  • 我也有兴趣使用 OnenGL ES 播放视频。你有没有遵循任何教程?或者我有什么推荐的博客吗?
  • 如果我设法恢复我用于此的代码,我将在 github 上与一些描述性的 README 步骤共享它。我猜有些东西可能在 API 方面发生了变化,所以代码可能有点过时(我不再做 iOS 开发,所以不能说,但我们会看到)
  • @arul ...您是否成功地设法在某处共享代码?我有兴趣看到它:) 提前谢谢!
  • 用我设法从损坏的高清备份中挽救的代码更新了问题。

标签: objective-c ios opengl-es avassetreader


【解决方案1】:

我认为 CMSampleBuffer 出于性能原因使用填充,因此您需要为纹理设置正确的宽度。

尝试设置纹理的宽度:CVPixelBufferGetBytesPerRow(pixelBuffer) / 4 (如果您的视频格式每像素使用 4 个字节,则更改其他)

【讨论】:

  • 你是对的,哇,我没有意识到错误的纹理宽度会以这种特殊的方式扭曲图像。非常感谢!
猜你喜欢
  • 2011-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-09
  • 1970-01-01
  • 2016-03-13
  • 2013-07-08
  • 2020-11-04
相关资源
最近更新 更多