直播iOS Developer

iOS 视频逆向播放

2017-03-31  本文已影响185人  飞鱼非鱼会飞
timg.jpg

看过<<东成西就>>的小伙伴,都知道周伯通为了给师兄报仇,用了三花聚顶,不慎走火入魔,让时间倒流.于是,神奇的一幕发生了,欧阳锋想杀洪七公就是杀不死,段王爷的小便却总是解不完......看到这一幕,我就忍不住想搞一个视频逆转的方法.

其实,视频逆向播放的原理很简单.用通俗的话说,视频本质上是一张张图片连续播放出来的.所以我们只需要把组成视频的图片逆向排列一下,再播放就OK了.

但是,视频因为是由很多图片组成的,所以如果一下子把所有图片加载到内存中,然后再重排,这样1分钟的视频,就能占到500M,显然不是理想的.

<b>于是想到一种解决内存的方法:</b>

1,我们把视频进行分割成很多1秒的小视频,把这么多视频暂时放在沙盒里.

2,然后逐一的把1秒的视频进行逆向排列,然后得到很多1秒的逆向播放的视频.

3,最后,我们再把1秒的逆向的视频组合起来,完毕.

所以,只要会了分割视频,逆向视频,合并视频,就可以解决问题了.亲测,这样不管视频的长短内存可以稳定在80M左右.但是长视频处理的时间肯定很长.

<b>1,递归分割视频</b>
<pre>

}
</pre>
<b>2.0,递归逆向处理视频</b>
<pre>

<b>2.1,递归逆向处理具体实现</b>

<pre>

}

</pre>

<b>3,合并视频</b>
<pre>

//每拼完一个小视频就直接删除
[self.filemanager removeItemAtPath:paths[i] error:&error];
}
//合并之后视频的输出路径
NSURL *mergeFileURL = [NSURL fileURLWithPath:outputPath];

    AVAssetExportSession *exporter = [[AVAssetExportSession alloc] initWithAsset:mixComposition presetName:AVAssetExportPresetHighestQuality];
    exporter.outputURL = mergeFileURL;
    exporter.outputFileType = AVFileTypeQuickTimeMovie;
    //        exporter.videoComposition = mixVideoComposition;
    exporter.shouldOptimizeForNetworkUse = YES;
    [exporter exportAsynchronouslyWithCompletionHandler:^{
        dispatch_async(dispatch_get_main_queue(), ^{
            completed();
        });
    }];

}
</pre>

<a href="https://github.com/YY415263/VideoHandler">Demo github地址</a>.如果您有更好的方法,也请不吝赐教.

上一篇 下一篇

猜你喜欢

热点阅读