kiranyasala Ответов: 1

Объедините видео с различными размерами видео и измените ориентацию видео после слияния


I) перед слиянием мы берем URL-адреса видео(статические видео или видео, снятые камерой) из массива и храним их в активах.

II) при обработке хранения URL-адресов в активах,

1) Сначала берем первый адрес в 'firstVideoAsset', после этого мы берем второй URL-адрес в secondVideoAsset'. Затем объедините два видео и сохраните объединенный URL-адрес снова в "firstVideoAsset".

2) После этого возьмите третий URL-адрес в "secondVideoAsset". Они объединяют два видео. Тот же процесс будет продолжаться до тех пор, пока цикл не закончится.
3) отправьте окончательный объединенный URL-адрес в MPMoviePlayerController для воспроизведения "предварительного просмотра" объединенного видео.

Проблема ориентации:-

1) в процессе слияния, если мы захватим видео в "ландшафтной" ориентации(то есть LandscapeLeft), захваченное видео после слияния будет находиться в "перевернутом" режиме(то есть обратном захваченному видео).

2) размеры всех видео(статических или снятых камерой) не совпадают после слияния.

3) Если мы снимаем видео с помощью фронтальной камеры, то после слияния всех захваченных видео поступают вверх ногами.

Нужна помощь с вашей стороны:-

1) перед слиянием, если мы снимаем видео в любом режиме ориентации, они должны прийти только в одном режиме ориентации(например, LandscapeLeft или LandscapeRight) после слияния.

2) После объединения всех видео Размеры(высота и ширина) всех видео(статических или снятых камерой) в любом режиме ориентации должны быть одинаковыми.

3) при использовании фронтальной камеры, если мы захватим видео в ландшафтном левом режиме, после слияния всех видео, захваченные видео придут в правильный режим. Но при захвате видео в альбомном правом режиме захваченные видео после слияния всех видео будут перевернуты вверх дном(то есть наоборот оригинального захваченного видео).

4) при использовании задней камеры, если мы снимаем видео в ландшафтном левом режиме, после слияния всех видео захваченные видео будут перевернуты вверх ногами(т. е. обратное исходному захваченному видео). Но при захвате видео в альбомном правильном режиме захваченные видео после слияния всех видео будут приходить в правильный режим.

1 Ответов

Рейтинг:
0

Member 12980680

Вы можете проверить ориентацию времени выполнения видео в приведенном выше коде при создании объекта для AVMutableVideoCompositionInstruction.


AVMutableVideoCompositionInstruction *instruction = [AVMutableVideoCompositionInstruction videoCompositionInstruction];
instruction.timeRange = CMTimeRangeMake(kCMTimeZero, [mutableComposition duration]);
AVAssetTrack *videoTrack = [[mutableComposition tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0];

AVMutableVideoCompositionLayerInstruction * layerInstruction = [AVMutableVideoCompositionLayerInstruction videoCompositionLayerInstructionWithAssetTrack:videoTrack];

UIImageOrientation videoAssetOrientation_  = UIImageOrientationUp;
BOOL  isVideoAssetPortrait_  = NO;
CGAffineTransform videoTransform = assetVideoTrack.preferredTransform;

if(videoTransform.a == 0 && videoTransform.b == 1.0 && videoTransform.c == -1.0 && videoTransform.d == 0)
{
    videoAssetOrientation_= UIImageOrientationRight;
    isVideoAssetPortrait_ = YES;
}
if(videoTransform.a == 0 && videoTransform.b == -1.0 && videoTransform.c == 1.0 && videoTransform.d == 0)
{
    videoAssetOrientation_ =  UIImageOrientationLeft;
    isVideoAssetPortrait_ = YES;
}

CGFloat FirstAssetScaleToFitRatio = 320.0 / assetVideoTrack.naturalSize.width;
if(isVideoAssetPortrait_)
{
    videoSize=CGSizeMake(350,400);
    FirstAssetScaleToFitRatio = 320.0/assetVideoTrack.naturalSize.height;
    CGAffineTransform FirstAssetScaleFactor = CGAffineTransformMakeScale(FirstAssetScaleToFitRatio,FirstAssetScaleToFitRatio);
    [layerInstruction setTransform:CGAffineTransformConcat(assetVideoTrack.preferredTransform, FirstAssetScaleFactor) atTime:kCMTimeZero];
}
else
{
    videoSize=CGSizeMake(assetVideoTrack.naturalSize.width,assetVideoTrack.naturalSize.height);
}