2011-01-20 39 views
8

Tôi muốn hiển thị lớp phủ hiển thị trên video và xuất video đó bao gồm hiển thị này. Tôi đã có một cái nhìn vào khuôn khổ AVFoundation, AVCompositions, AVAssets vv nhưng tôi vẫn không có một ý tưởng để đạt được điều này. Có một lớp được gọi là AVSynchronizedLayer cho phép bạn tạo hoạt ảnh đồng bộ hóa với video, nhưng tôi không muốn tạo hiệu ứng động, tôi jsut muốn phủ màn hình thời gian vào từng khung hình của video. Lời khuyên nào?iOS AVFoundation - Hiển thị thời gian hiển thị trên video và xuất

Trân

+0

Tôi muốn làm điều tương tự. Bạn đã thực hiện việc này chưa? Bạn có thể giúp tôi rằng làm thế nào tôi có thể cập nhật "myClockLayer" Theo câu trả lời của Adam. – Nikunj

+0

bạn có nhận được gì liên quan đến điều này không ??? –

Trả lời

5

Something như thế này ...

(NB: chọn lọc từ một dự án lớn hơn nhiều, vì vậy tôi có thể bao gồm một số phần không cần thiết một cách tình cờ).

Bạn sẽ cần phải lấy CALayer của đồng hồ/hoạt hình của bạn, và đặt nó vào var myClockLayer (sử dụng 1/3 đường xuống bởi công cụ andimation).

Điều này cũng giả định video đến của bạn chỉ có hai bản nhạc - âm thanh và video. Nếu bạn có nhiều hơn, bạn cần đặt id theo dõi trong "asTrackID: 2" cẩn thận hơn.

AVURLAsset* url = [AVURLAsset URLAssetWithURL:incomingVideo options:nil]; 
AVMutableComposition *videoComposition = [AVMutableComposition composition]; 

AVMutableCompositionTrack *compositionVideoTrack = [videoComposition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid]; 
AVAssetTrack *clipVideoTrack = [[url tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0]; 
[compositionVideoTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, [url duration]) ofTrack:clipVideoTrack atTime:kCMTimeZero error:&error]; 

AVMutableVideoComposition* videoComposition = [[AVMutableVideoComposition videoComposition]retain]; 
videoComposition.renderSize = CGSizeMake(320, 240); 
videoComposition.frameDuration = CMTimeMake(1, 30); 
videoComposition.animationTool = [AVVideoCompositionCoreAnimationTool videoCompositionCoreAnimationToolWithAdditionalLayer:myClockLayer asTrackID:2]; 

AVMutableVideoCompositionInstruction *instruction = [AVMutableVideoCompositionInstruction videoCompositionInstruction]; 
instruction.timeRange = CMTimeRangeMake(kCMTimeZero, CMTimeMakeWithSeconds(60, 30)); 

AVMutableVideoCompositionLayerInstruction* layerInstruction = [AVMutableVideoCompositionLayerInstruction videoCompositionLayerInstructionWithAssetTrack:clipVideoTrack]; 
instruction.layerInstructions = [NSArray arrayWithObject:layerInstruction]; 

videoComposition.instructions = [NSArray arrayWithObject: instruction]; 

exporter = [[AVAssetExportSession alloc] initWithAsset:saveComposition presetName:AVAssetExportPresetHighestQuality] ; 
exporter.videoComposition = videoComposition; 
exporter.outputURL=url3; 
exporter.outputFileType=AVFileTypeQuickTimeMovie; 

[exporter exportAsynchronouslyWithCompletionHandler:^(void){}]; 
+0

tôi muốn cập nhật textlayer của tôi trên mỗi giây .. Tôi muốn hiển thị ngày thời gian trên video expoerted với cập nhật cho mỗi giây.Có thể bạn hãy hướng dẫn tôi làm thế nào tôi có thể làm gì? – Nikunj

+0

Tạo câu hỏi mới trên StackOverflow với sự cố của bạn – Adam

+0

đã được tạo. đây là liên kết http://stackoverflow.com/questions/14894324/add-date-and-time-on-recorded-video và – Nikunj

2

Tôi nghĩ rằng bạn có thể sử dụng AVCaptureVideoDataOutput để xử lý mỗi frame và sử dụng AVAssetWriter để ghi lại frame.You xử lý có thể tham khảo câu trả lời này

https://stackoverflow.com/a/4944594/379941.

sử dụng appendPixelBuffer AVAssetWriterPixelBufferAdaptor của: withPresentationTime: Phương pháp xuất khẩu
Và tôi đề nghị sử dụng OpenCV để xử lý khung. đây là một hướng dẫn tốt đẹp

http://aptogo.co.uk/2011/09/opencv-framework-for-ios/.

Thư viện OpenCV rất tuyệt vời.

Các vấn đề liên quan