#ios #objective-c #swift #avfoundation
#iOS #objective-c #swift #avfoundation
Вопрос:
В моем приложении я должен применять фильтры при воспроизведении. Я делаю это с помощью AVVideoComposition и применяю фильтр к каждому кадру.
Однако по некоторым причинам, когда я меняю видеокомпозицию моего элемента AVPlayer, видео вращается. Я попытался исправить эту проблему с помощью преобразования и добавить к нему инструкции по видеокомпозиции. Проблема с вращением исправлена, но фильтр больше не применяется.
Как я могу исправить вращение, пока все еще применен мой фильтр?
Код ниже:
- (void)setVideoComposition:(AVMutableVideoComposition *)videoComposition {
_videoComposition = videoComposition;
AVMutableComposition *composition = [AVMutableComposition composition];
AVMutableCompositionTrack *videoCompositionTrack =
[composition addMutableTrackWithMediaType:AVMediaTypeVideo
preferredTrackID:kCMPersistentTrackID_Invalid];
AVAssetTrack *videoAssetTrack = [_avAsset tracksWithMediaType:AVMediaTypeVideo].lastObject;
CMTimeRange range = CMTimeRangeMake(kCMTimeZero, videoAssetTrack.timeRange.duration);
[videoCompositionTrack insertTimeRange:range
ofTrack:videoAssetTrack
atTime:kCMTimeZero
error:nil];
AVMutableVideoCompositionInstruction *instruction =
[AVMutableVideoCompositionInstruction videoCompositionInstruction];
instruction.timeRange = range;
AVMutableVideoCompositionLayerInstruction *layerInstruction =
[AVMutableVideoCompositionLayerInstruction
videoCompositionLayerInstructionWithAssetTrack:videoCompositionTrack];
[layerInstruction setTransform:videoAssetTrack.preferredTransform
atTime:kCMTimeZero];
NSMutableArray *instructions = [[NSMutableArray alloc] init];
for (id instr in _videoComposition.instructions) {
[instructions addObject:instr];
}
[instructions insertObject:instruction atIndex:0];
_videoComposition.instructions = instructions;
// Hook it to the item player.
if (self.playerItem) {
self.playerItem.videoComposition = _videoComposition;
}
Комментарии:
1. Если вы поделитесь некоторым кодом, мы можем помочь
2. Я добавил код.
3. Одно замечание. Если я применяю фильтр как обычно, он вращается, как я сказал, но когда я закрываю и открываю приложение, я получаю правильный результат.
4. Куда вы добавляете другие фильтры
_videoComposition.instructions
? Кажется, он уже пуст в вашем коде. И он содержит толькоinstruction
то, что вставлено в индекс 0.