Tôi đã quản lý để tải một đoạn video của một khung phim bằng cách khung thành một kết cấu OpenGL với AVFoundation. Tôi làm theo các bước được mô tả trong các câu trả lời ở đây: iOS4: how do I use video file as an OpenGL texture? và mất một số mã từ mẫu GLVideoFrame từ WWDC2010 mà có thể được tải về tại đây: http://bit.ly/cEf0rMAVFoundation: Video kết nối OpenGL hoạt động - Cách phát và đồng bộ hóa âm thanh?
Làm thế nào để chơi các âm thanh theo dõi của bộ phim đồng bộ với video. Tôi nghĩ rằng không nên chơi nó trong một máy nghe nhạc riêng biệt, nhưng để sử dụng bản âm thanh của cùng một AVAsset
.
AVAssetTrack* audioTrack = [[asset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0];
Tôi lấy một videoframe và đó là dấu thời gian trong CADisplayLink-callback qua
CMSampleBufferRef sampleBuffer = [self.readerOutput copyNextSampleBuffer];
CMTime timestamp = CMSampleBufferGetPresentationTimeStamp(sampleBuffer);
nơi readerOutput
là loại AVAssetReaderTrackOutput*
Làm thế nào để có được những âm thanh-mẫu tương ứng? Và cách chơi chúng?
Edit:
Tôi đã nhìn xung quanh một chút và tôi nghĩ rằng, tốt nhất là nên sử dụng AudioQueue
từ AudioToolbox.framework sử dụng phương pháp này được mô tả ở đây: AVAssetReader and Audio Queue streaming problem
Ngoài ra còn một là trình phát âm thanh trong AVFoundation: AVAudioPlayer
. Nhưng tôi không biết chính xác cách tôi nên chuyển dữ liệu đến số initWithData
-initializer của mình, dự kiến NSData
. Hơn nữa tôi không nghĩ rằng đó là sự lựa chọn tốt nhất cho trường hợp của tôi bởi vì một AVAudioPlayer
-instance mới sẽ phải được tạo ra cho mỗi đoạn âm thanh mới, như tôi đã hiểu.
Bất kỳ đề xuất nào khác? Cách tốt nhất để phát các mẫu âm thanh thô mà tôi nhận được từ AVAssetReaderTrackOutput
là gì?
Bạn đã bao giờ nhận được bất cứ đâu với điều này? – RyanSullivan
Giải pháp của tôi là mở phim bằng AVAssetReader để lấy khung cho OpenGL và đồng thời mở lại cùng một tệp phim với một AVAudioPlayer và để cả hai cùng bắt đầu đồng thời. Nó không phải là một giải pháp tốt đẹp nhưng âm thanh và video khá đồng bộ. Kể từ đó tôi không có thời gian để làm việc trên một giải pháp tốt hơn. – j00hi
Tôi cũng đang sử dụng AVAudioPlayer nhưng đồng bộ hóa âm thanh không phải là rất tốt. Có một giải pháp thực sự sẽ tốt hơn. –