Я использую AlAssetsGroup enumerateAssetsAtIndexes
для перечисления активов в приложении Фото (Камера).Для данного видео актива я хочу определить, был ли он снят в портретном или ландшафтном режиме.
В следующем коде актив - это AlAsset
, и я проверил, является ли он активом видео [asset valueForProperty:ALAssetPropertyType]
- это AlAssetTypeVideo
, тогда:
int orientation = [[asset valueForProperty:ALAssetPropertyOrientation] intValue];
В этомcase orientation
всегда равно 0, что ALAssetOrientationUp
.Возможно, этого и следовало ожидать, все видео работают правильно, но портретное видео представлено в MPEG-4 как альбомное видео, повернутое на 90 градусов (т.е. все видео на самом деле в альбомной ориентации, попробуйте приложение MediaInfo на Mac, если вы этого не сделаетеповерь мне).
Где в файле и / или как получить доступ к информации, которая говорит о том, что она действительно была записана при удерживании телефона в портретной ориентации?
Я также пробовал это, учитывая URL-адресактив:
AVURLAsset *avAsset = [[AVURLAsset alloc] initWithURL:url options:nil];
CGSize size = [avAsset naturalSize];
NSLog(@"size.width = %f size.height = %f", size.width, size.height);
CGAffineTransform txf = [avAsset preferredTransform];
NSLog(@"txf.a = %f txf.b = %f txf.c = %f txf.d = %f txf.tx = %f txf.ty = %f",
txf.a, txf.b, txf.c, txf.d, txf.tx, txf.ty);
, который всегда дает width> height, то есть для iPhone 4, width = 1280 height = 720, а значения a и d преобразования равны 1.0
, остальные 0.0
, независимоориентации захвата.
Я просмотрел метаданные с помощью приложения MediaInfo на Mac, сделал Hexdump и до сих пор не нашел различий между альбомным и портретным видео.Но QuickTime знает и отображает портретные видео по вертикали, и телефон знает, поворачивая портретное видео, если вы держите телефон в альбомной ориентации при воспроизведении и правильно отображаете его, если держите его в портретном режиме.используйте ffmpeg
(не может жить с лицензионными ограничениями).Есть ли в iPhone SDK родной способ сделать это?