回答
这里是我的代码片段。声明它
@property (nonatomic, retain) AVSampleBufferDisplayLayer *videoLayer;
在第一次设置视频层
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];
提供视频数据到层
__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];
}
}];
}
对于进一步的细节:在WWDC 2014届513是非常丰富的。
我在尝试这个,但发现AVSampleBufferDisplay层没有图像。
我创建一个原始字节流的NAL单元并通过IDR和使用非IDR片:
if ([avLayer isReadyForMoreMediaData]) {
[avLayer enqueueSampleBuffer:sampleBuffer];
}
有来自EnqueueSampleBuffer返回错误状态,因此可能很难找出它是怎么回事错误。
有关详细信息,您最好从WWDC 2014结帐会话513。问题是如预期提供CMSampleBufferRef。 – Karsten 2014-09-26 07:46:03
你可以看看我提供的源代码。 [看看](http://stackoverflow.com/questions/25980070/how-to-use-avsamplebufferdisplaylayer-in-ios-8-for-rtp-h264-streams-with-gstream) – Zappel 2014-10-29 18:47:30
我有一些成功与AVSampleBufferDisplayLayer,有没有人经历过任何类型的播放抖动(通常当iFrame到达时)?我尝试过使用缓冲区来实现流畅播放,但没有取得太多成功。我也尝试在SampleBuffer中使用TimingInfo,让它在与“PresentationTimeStamp”相同的位置播放,同时将“ShouldDisplayImmediately”设置为false。 – Md1079 2014-11-07 10:41:26
- 1. 将H.264 I帧放到AVSampleBufferDisplayLayer中,但没有显示视频图像
- 2. h.264流不显示在IOS6
- 3. Android:mpeg4/H.264打包示例
- 4. 如何中继h.264流?
- 5. H.264流标头
- 6. Firefox中的H.264
- 7. H.264和x.264有什么区别?
- 8. Android H.263或H.264文件?
- 9. H.264编码视频显示顺序语法
- 10. 如何将视频从H.264转换为H.265
- 11. 如何使用ffmpeg与h.265(或h.264)编码?
- 12. h.264和mpeg标题
- 13. WPF GUI中的H.264流
- 14. H.264 over RTP/RTSP(iPhone)
- 15. h.264解析训练
- 16. Flowplayer H.264视频编码
- 17. h.264/svc移动支持
- 18. H.264实时流媒体
- 19. ffmpeg h.264无效切割
- 20. H.264到MPEG2转换
- 21. Java - h.264视频编码
- 22. H.264编解码器
- 23. H.264视频编码
- 24. H.264时间参考
- 25. 解码H.264没有流
- 26. h.264字节流解析
- 27. H.264 RTSP绝对TIMESTAMP
- 28. MPEG-TS H.264与ExoPlayer
- 29. h.264 udp流解码
- 30. H.264保存在Android
如下一个答案所示,此答案缺少一大堆所需的代码。事实上,这对任何人都不适用。 – 2016-07-30 18:43:49
不仅代码丢失,而且错误。 CMSampleBuffer没有数据属性,所以sampleBuffer.data没有意义。 – 2016-08-14 21:53:45
数据通过阅读视频的outVideo在第二个片段中提供。您应该首先观看WWDC会话513/2014 ... – Karsten 2016-08-15 07:01:12