O anda çalmakta olan videodan gerçek zamanlı ses ve video parçalarını analiz eden bir video oynatıcı yaptım. Videolar iOS cihazında (Uygulamalar Belgeleri dizininde) depolanır.iOS: Airplay'den Ses ve Video bağlantısı
Her şey yolunda. Tüm ses örneklerini almak ve bazı FFT yapmak için MTAudioProcessingTap kullanıyorum ve video oynatma işlemini şu anda çalınan CMTime (AVPlayer currentTime özelliği) piksel piksellerini kopyalayarak yapıyorum. Dediğim gibi, bu iyi çalışıyor.
Ancak şimdi Airplay'i desteklemek istiyorum. Sadece Airplay'in kendisi zor değil, ancak Airplay açıldığında ve video ATV'de oynatılırken musluklarım çalışmaya devam ediyor. Her nasılsa, MTAudioProcessingTap işlenmeyecek ve pixelbuffers hepsi boş ... Verilere ulaşamıyorum.
Bu verilere ulaşmanın bir yolu var mı?
Piksel tamponlarını elde etmek için, sadece birkaç mili saniyede bir olayı tetikleyip oyuncunun currentTime'ı alıyorum. Ardından:
CVPixelBufferRef imageBuffer = [videoOutput copyPixelBufferForItemTime:time itemTimeForDisplay:nil];
CVPixelBufferLockBaseAddress(imageBuffer,0);
uint8_t *tempAddress = (uint8_t *) CVPixelBufferGetBaseAddress(imageBuffer);
size_t bytesPerRow = CVPixelBufferGetBytesPerRow(imageBuffer);
size_t height = CVPixelBufferGetHeight(imageBuffer);
CVPixelBufferUnlockBaseAddress(imageBuffer,0);
tempAddress
benim pixelbuffer ve videoOutput
AVPlayerItemVideoOutput
bir örneğidir. Ses için
, ben kullanın:
AVMutableAudioMixInputParameters *inputParams = [AVMutableAudioMixInputParameters audioMixInputParametersWithTrack:audioTrack];
// Create a processing tap for the input parameters
MTAudioProcessingTapCallbacks callbacks;
callbacks.version = kMTAudioProcessingTapCallbacksVersion_0;
callbacks.clientInfo = (__bridge void *)(self);
callbacks.init = init;
callbacks.prepare = prepare;
callbacks.process = process;
callbacks.unprepare = unprepare;
callbacks.finalize = finalize;
MTAudioProcessingTapRef tap;
OSStatus err = MTAudioProcessingTapCreate(kCFAllocatorDefault, &callbacks,
kMTAudioProcessingTapCreationFlag_PostEffects, &tap);
if (err || !tap) {
NSLog(@"Unable to create the Audio Processing Tap");
return;
}
inputParams.audioTapProcessor = tap;
// Create a new AVAudioMix and assign it to our AVPlayerItem
AVMutableAudioMix *audioMix = [AVMutableAudioMix audioMix];
audioMix.inputParameters = @[inputParams];
playerItem.audioMix = audioMix;
Saygılarımızla, Niek İşte
Eğer piksel tamponlarını erişiyorsunuz kodu ekleyin lütfen? –
Ve video oynatma kodu da yardımcı olabilir :) –
Bitti. Düşüncesi olan var mı ? –