qui il mio frammento di codice. Dichiararla
@property (nonatomic, retain) AVSampleBufferDisplayLayer *videoLayer;
in un primo momento di impostazione del livello video
self.videoLayer = [[AVSampleBufferDisplayLayer alloc] init];
self.videoLayer.bounds = self.bounds;
self.videoLayer.position = CGPointMake(CGRectGetMidX(self.bounds), CGRectGetMidY(self.bounds));
self.videoLayer.videoGravity = AVLayerVideoGravityResizeAspect;
self.videoLayer.backgroundColor = [[UIColor greenColor] CGColor];
//set Timebase
CMTimebaseRef controlTimebase;
CMTimebaseCreateWithMasterClock(CFAllocatorGetDefault(), CMClockGetHostTimeClock(), &controlTimebase);
self.videoLayer.controlTimebase = controlTimebase;
CMTimebaseSetTime(self.videoLayer.controlTimebase, CMTimeMake(5, 1));
CMTimebaseSetRate(self.videoLayer.controlTimebase, 1.0);
// connecting the videolayer with the view
[[self layer] addSublayer:_videoLayer];
fornire i dati video per lo strato di
__block AVAssetReaderTrackOutput *outVideo = [AVAssetReaderTrackOutput assetReaderTrackOutputWithTrack:video outputSettings:dic];
if([assetReaderVideo startReading])
{
[_videoLayer requestMediaDataWhenReadyOnQueue: assetQueue usingBlock: ^{
while([_videoLayer isReadyForMoreMediaData])
{
CMSampleBufferRef *sampleVideo = [outVideo copyNextSampleBuffer];
[_videoLayer enqueueSampleBuffer:sampleVideo.data];
}
}];
}
Per ulteriori dettagli: la Sessione 513 nel WWDC 2014 è molto istruttiva.
In questa risposta manca una porzione di codice necessaria, come indicato dalla risposta successiva. Così com'è, questo non funzionerebbe per nessuno. –
Non solo manca il codice, ma è sbagliato. Non esiste una proprietà data per CMSampleBuffer, quindi sampleBuffer.data non ha senso. –
I dati sono forniti nel secondo snippet tramite l'outVideo che sta leggendo il video. È necessario guardare prima la sessione WWDC 513/2014 ... – Karsten