2015-12-18 4 views
2

Это странно, после часовых испытаний я до сих пор не могу понять это.
Хорошо, это то, что я собираюсь сделать: объединить два видео, то есть добавить один за другим.
Я снимаю два видео, а затем два URL-адреса. Затем я создал два AVURLAsset с помощью:
AVAssetTrack.duration короче AVURLAsset.duration

AVURLAsset* video1 = [[AVURLAsset alloc]initWithURL:url1 options:options]; 
AVURLAsset* video2 = [[AVURLAsset alloc]initWithURL:url2 options:options]; 

Тогда я получаю соответствующие треки:

AVAssetTrack *videoAsset1Track = [[video1 tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0]; 
AVAssetTrack *videoAsset2Track = [[video2 tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0]; 

Тогда, у меня есть несколько CMTime для сравнения:

CMTime endtime1 = videoAsset1Track.timeRange.duration; 
CMTime endtime2 = videoAsset2Track.timeRange.duration; 
CMTime starttime1 = videoAsset1Track.timeRange.start; 
CMTime starttime2 = videoAsset2Track.timeRange.start; 

Странные вещи потом случаются , Когда я вхожу:

NSLog(@"video 1 duration : %f , start : %f, end : %f ", CMTimeGetSeconds(video1.duration), CMTimeGetSeconds(starttime1), CMTimeGetSeconds(endtime1)); 
NSLog(@"video 2 duration : %f , start : %f, end : %f ", CMTimeGetSeconds(video2.duration), CMTimeGetSeconds(starttime2), CMTimeGetSeconds(endtime2)); 

Он всегда приходит с: video 1 duration : 4.738333 , start : 0.000000, end : 4.738333 video 2 duration : 4.736871 , start : 0.000000, end : 3.090011 Video 1 всегда хорошо, в то время как видео 2: продолжительность продолжительность трека < актива.

Кстати, я использую GPUImageVideoCamera и GPUImageMovieWriter (Но я не думаю, что это важно, поскольку видео 1 всегда в порядке) для съемки видео и слияния.


Редактировать
Бог у меня есть еще один супер странное наблюдение:
Всякий раз, когда я снимаю видео, продолжительность трека всегда короче, чем стоимость актива. Однако, если я проверю его во второй раз, все будет в порядке ... Это ... Что мне делать в течение двух проверок? Я просто использовать AVPlayer играть URL ...


Edit Опять
Ребята это супер супер странно !!! Я просто играю в URL, и мир становится лучше. Я не знаю, почему, но, по крайней мере, найти выход ... (Нет, этот способ иногда по-прежнему не работает ...)

+0

Вы можете перебрать все треки в VIDEO2, чтобы увидеть, если есть другой (возможно, аудио) с большей продолжительностью по какой-то причине? Кроме того, какая из двух длительностей (4.73 или 3.09) вы считаете правильной? – kleezy

+0

Я также проверил продолжительность звука, которая равна активу, который является правильным (более длинным). – DrustZ

+0

Но я понятия не имею, почему это будет короче ... процесс почти такой же, за исключением того, что во второй раз я собираюсь объединить их ... – DrustZ

ответ

0

Ok После утомительного расследования я наконец понял.
Наконец-то это связано с GPUImageVideoCamera. И любой, кто также пользуется библиотекой, может обратить внимание: если вы пишете только [GPUImageMovieWriter finishRecording], этого недостаточно (это значит, файл не завершен).
Вы должны написать [videoCamera stopCameraCapture], чтобы закрыть захват камеры, а затем файл закрыт и завершен.

WEIRD ...

Смежные вопросы