ios平台播放hls抖动问题

步骤:

1.Adobe Flash Media Live Encoder 2.5推送h.264 main profile给nginx-rtmp;

2.nginx-rtmp做hls切片;

3.ipad播放hls,画面抖动。

切片结果分析:

1.ffmpeg(Adobe Flash Media Live Encoder 2.5, h.264 main profile)

测试结果:会抖动,有B帧时,因为P帧的PTS比后面的B帧的PTS小

IDR PCR:18900000 PTS:126000

P  PCR:20736000 PTS:132120

B  PCR:22572000 PTS:138240

B  PCR:24408000 PTS:144360

B  PCR:26244000 PTS:150480

P  PCR:28080000 PTS:156600

2.nginx-rtmp(Adobe Flash Media Live Encoder 2.5, h.264 main profile)

测试结果:会抖动,有B帧时,因为P帧的PTS比后面的B帧的PTS小

IDR PCR:5044194000 PTS:16939980

P                           PTS:16946100

B                           PTS:16949160

B                           PTS:16955280

B                           PTS:16961400

P                           PTS:16967520

3.nginx-rtmp(Adobe Flash Media Live Encoder 2.5, h.264 baseline profile)

测试结果:不会抖动,无B帧时,各帧按正常递增式PTS顺序显示

IDR PCR:2576961477600 PTS:63000

P                                PTS:77310

P                                PTS:83430

P                                PTS:89460

P                                PTS:95670

P                                PTS:101790

日志:

2014/11/05 12:43:44 [debug ] 5741#5741: *1 hls: video pts=1112850, dts=1112850, cts=0

2014/11/05 12:43:44 [debug ] 5741#5741: *1 hls: video pts=1118970, dts=1118970, cts=0

2014/11/05 12:43:44 [debug ] 5741#5741: *1 hls: video pts=1125090, dts=1125090, cts=0

2014/11/05 12:43:44 [debug ] 5741#5741: *1 hls: video pts=1131210, dts=1131210, cts=0

2014/11/05 12:43:44 [debug ] 5741#5741: *1 hls: video pts=1137330, dts=1137330, cts=0

2014/11/05 12:43:44 [debug ] 5741#5741: *1 hls: video pts=1143450, dts=1143450, cts=0

2014/11/05 12:43:44 [debug ] 5741#5741: *1 hls: video pts=1149570, dts=1149570, cts=0

2014/11/05 12:43:44 [debug ] 5741#5741: *1 hls: video pts=1155690, dts=1155690, cts=0

2014/11/05 12:43:45 [debug ] 5741#5741: *1 hls: video pts=1161810, dts=1161810, cts=0

2014/11/05 12:43:45 [debug ] 5741#5741: *1 hls: video pts=1167930, dts=1167930, cts=0

2014/11/05 12:43:45 [debug ] 5741#5741: *1 hls: video pts=1174050, dts=1174050, cts=0

2014/11/05 12:43:45 [debug ] 5741#5741: *1 hls: video pts=1180260, dts=1180260, cts=0

2014/11/05 12:43:45 [debug ] 5741#5741: *1 hls: video pts=1186380, dts=1186380, cts=0

2014/11/05 12:43:45 [debug ] 5741#5741: *1 hls: video pts=1192500, dts=1192500, cts=0

2014/11/05 12:43:45 [debug ] 5741#5741: *1 hls: video pts=1198620, dts=1198620, cts=0

2014/11/05 12:43:45 [debug ] 5741#5741: *1 hls: video pts=1204740, dts=1204740, cts=0

2014/11/05 12:43:45 [debug ] 5741#5741: *1 hls: video pts=1210860, dts=1210860, cts=0

2014/11/05 12:43:45 [debug ] 5741#5741: *1 hls: video pts=1216980, dts=1216980, cts=0

2014/11/05 12:43:45 [debug ] 5741#5741: *1 hls: video pts=1220040, dts=1220040, cts=0

2014/11/05 12:43:45 [debug ] 5741#5741: *1 hls: video pts=1226160, dts=1226160, cts=0

2014/11/05 12:43:45 [debug ] 5741#5741: *1 hls: video pts=1232280, dts=1232280, cts=0

2014/11/05 12:43:45 [debug ] 5741#5741: *1 hls: video pts=1238400, dts=1238400, cts=0

2014/11/05 12:43:45 [debug ] 5741#5741: *1 hls: video pts=1244520, dts=1244520, cts=0

2014/11/05 12:43:46 [debug ] 5741#5741: *1 hls: video pts=1250640, dts=1250640, cts=0

2014/11/05 12:43:46 [debug ] 5741#5741: *1 hls: video pts=1256760, dts=1256760, cts=0

2014/11/05 12:43:46 [debug ] 5741#5741: *1 hls: video pts=1262880, dts=1262880, cts=0

2014/11/05 12:43:46 [debug ] 5741#5741: *1 hls: video pts=1268820, dts=1268820, cts=0

2014/11/05 12:43:46 [debug ] 5741#5741: *1 hls: video pts=1275030, dts=1275030, cts=0

2014/11/05 12:43:46 [debug ] 5741#5741: *1 hls: video pts=1281150, dts=1281150, cts=0

4.nginx-rtmp(Adobe Flash Media Live Encoder 3.2, h.264 main profile)

测试结果:不会抖动,有B帧时,因为P帧的PTS比后面的B帧的PTS大

IDR PCR:1468908000 PTS:5028570 DTS:5022360

P                           PTS:5053050 DTS:5028570

B                           PTS:5034690

B                           PTS:5040810

B                           PTS:5046930

P                           PTS:5065290 DTS:5053050

日志:

2014/11/05 12:46:17 [debug ] 5760#5760: *2 hls: video pts=14130, dts=0, cts=157

2014/11/05 12:46:18 [debug ] 5760#5760: *2 hls: video pts=32400, dts=14130, cts=203

2014/11/05 12:46:18 [debug ] 5760#5760: *2 hls: video pts=20250, dts=20250, cts=0

2014/11/05 12:46:18 [debug ] 5760#5760: *2 hls: video pts=26370, dts=26370, cts=0

2014/11/05 12:46:18 [debug ] 5760#5760: *2 hls: video pts=50760, dts=32400, cts=204

2014/11/05 12:46:18 [debug ] 5760#5760: *2 hls: video pts=38520, dts=38520, cts=0

2014/11/05 12:46:18 [debug ] 5760#5760: *2 hls: video pts=44640, dts=44640, cts=0

2014/11/05 12:46:18 [debug ] 5760#5760: *2 hls: video pts=75150, dts=50760, cts=271

2014/11/05 12:46:18 [debug ] 5760#5760: *2 hls: video pts=56970, dts=56970, cts=0

2014/11/05 12:46:18 [debug ] 5760#5760: *2 hls: video pts=63090, dts=63090, cts=0

2014/11/05 12:46:18 [debug ] 5760#5760: *2 hls: video pts=69120, dts=69120, cts=0

2014/11/05 12:46:18 [debug ] 5760#5760: *2 hls: video pts=93600, dts=75240, cts=204

2014/11/05 12:46:18 [debug ] 5760#5760: *2 hls: video pts=81360, dts=81360, cts=0

2014/11/05 12:46:18 [debug ] 5760#5760: *2 hls: video pts=87480, dts=87480, cts=0

2014/11/05 12:46:18 [debug ] 5760#5760: *2 hls: video pts=111960, dts=93600, cts=204

2014/11/05 12:46:18 [debug ] 5760#5760: *2 hls: video pts=99810, dts=99810, cts=0

2014/11/05 12:46:18 [debug ] 5760#5760: *2 hls: video pts=105930, dts=105930, cts=0

2014/11/05 12:46:19 [debug ] 5760#5760: *2 hls: video pts=130410, dts=112050, cts=204

2014/11/05 12:46:19 [debug ] 5760#5760: *2 hls: video pts=118170, dts=118170, cts=0

2014/11/05 12:46:19 [debug ] 5760#5760: *2 hls: video pts=124290, dts=124290, cts=0

2014/11/05 12:46:19 [debug ] 5760#5760: *2 hls: video pts=151830, dts=130410, cts=238

2014/11/05 12:46:19 [debug ] 5760#5760: *2 hls: video pts=136530, dts=136530, cts=0

2014/11/05 12:46:19 [debug ] 5760#5760: *2 hls: video pts=142650, dts=142650, cts=0

2014/11/05 12:46:19 [debug ] 5760#5760: *2 hls: video pts=148770, dts=148770, cts=0

2014/11/05 12:46:19 [debug ] 5760#5760: *2 hls: video pts=179370, dts=154890, cts=272

2014/11/05 12:46:19 [debug ] 5760#5760: *2 hls: video pts=157950, dts=157950, cts=0

2014/11/05 12:46:19 [debug ] 5760#5760: *2 hls: video pts=164070, dts=164070, cts=0

2014/11/05 12:46:19 [debug ] 5760#5760: *2 hls: video pts=170190, dts=170190, cts=0

2014/11/05 12:46:19 [debug ] 5760#5760: *2 hls: video pts=194670, dts=176310, cts=204

2014/11/05 12:46:19 [debug ] 5760#5760: *2 hls: video pts=182430, dts=182430, cts=0

2014/11/05 12:46:19 [debug ] 5760#5760: *2 hls: video pts=188640, dts=188640, cts=0

2014/11/05 12:46:20 [debug ] 5760#5760: *2 hls: video pts=219240, dts=194760, cts=272

2014/11/05 12:46:20 [debug ] 5760#5760: *2 hls: video pts=200880, dts=200880, cts=0

2014/11/05 12:46:20 [debug ] 5760#5760: *2 hls: video pts=207000, dts=207000, cts=0

2014/11/05 12:46:20 [debug ] 5760#5760: *2 hls: video pts=213120, dts=213120, cts=0

2014/11/05 12:46:20 [debug ] 5760#5760: *2 hls: video pts=243720, dts=219240, cts=272

2014/11/05 12:46:20 [debug ] 5760#5760: *2 hls: video pts=225360, dts=225360, cts=0

结论:

1.抖动原因与h.264编码无直接关系,在adobe Flash Media Live Encoder 2.5版本推送h.264 main profile, rtmp的时间戳和cts有误,造成生成出错误的b帧和p帧pts。

2.正确PTS:P帧的PTS要比后面的B帧的PTS大!

3.该问题由编码器导致

cts:参考ISO 14496-12, 8.15.3

时间: 2024-10-11 03:57:48

ios平台播放hls抖动问题的相关文章

实战FFmpeg + OpenGLES--iOS平台上视频解码和播放

一个星期的努力终于搞定了视频的播放,利用FFmpeg解码视频,将解码的数据通过OpenGLES渲染播放.搞清楚了自己想知道的和完成了自己的学习计划,有点小兴奋.明天就是“五一”,放假三天,更开心啦. 本文实现视频文件的播放是在自己之前写的文章实战FFmpeg--iOS平台使用FFmpeg将视频文件转换为YUV文件 . 实战OpenGLES--iOS平台使用OpenGLES渲染YUV图片 的基础上改进合成来完成的.不多种解释,直接上代码,清晰明了. NSString *path = [[NSBun

使用Vitamio开发iOS平台上的万能播放器

迅速了解 Vitamio是干什么的?看官方怎么说: "Vitamio SDK for iOS是Yixia Ltd官方推出的 iOS 平台上使用的软件开发工具包(SDK),为iOS开发者提供简单.快捷的接口,帮助开发者实现 iOS 平台上的媒体播放应用." 说白了,就是可以帮助你便捷地开发自己的iOS播放器. 本文目标 从0开始建工程,使用VitamioSDK开发一个最简单的播放器:打开app之后,能看到一个播放按钮,点击按钮,就开始播放事先放在Documents目录下的视频文件,再按一

phongap开发中安卓平台上如何调用第三方播放器来播放HLS视频

前文曾经讲了关于在安卓平台上利用phonegap开发播放HLS的解决方案,其实最好的方案就是自己针对HLS视频开发自己的播放器,但是开发播放器是一个浩大的工程,必须对原生安卓开发非常熟悉,并且对视频播放知识需要一定的积累.对于一般开发人员,尤其是web开发人员来讲,这显然不现实,同时这也违背了我们采用phonegap来开发跨平台移动软件的初衷.那么在这种情况下如何达到我们预期的目标呢?答案是调用第三方应用. step1:首先需要在手机上安装一个能够播放HLS协议视频的播放器,例如MXplayer

IOS 音频播放

iOS音频播放 (一):概述 Audio Playback in iOS (Part 1) : Introduction 前言 从事音乐相关的app开发也已经有一段时日了,在这过程中app的播放器几经修改我也因此对于iOS下的音频播放实现有了一定的研究.写这个系列的博客目的一方面希望能够抛砖引玉,另一方面也是希望能帮助国内其他的iOS开发者和爱好者少走弯路(我自己就遇到了不少的坑=.=). 本篇为<iOS音频播放>系列的第一篇,主要将对iOS下实现音频播放的方法进行概述. 基础 先来简单了解一

在iOS平台使用ffmpeg解码h264视频流

来源:http://www.aichengxu.com/view/37145 在iOS平台使用ffmpeg解码h264视频流,有需要的朋友可以参考下. 对于视频文件和rtsp之类的主流视频传输协议,ffmpeg提供avformat_open_input接口,直接将文件路径或URL传入即可打开.读取视频数据.解码器初始参数设置等,都可以通过调用API来完成. 但是对于h264流,没有任何封装格式,也就无法使用libavformat.所以许多工作需要自己手工完成. 这里的h264流指AnnexB,也

IOS平台的MobileVLCKit的编译和使用

接手了一个项目,里面用到的播放库比较老并且播放效果不是很稳定,下载了最新的MobileVLCKit编译了一把,跟大家分享一下编译过程: 我的环境是xcode7.1 ,sdk是9.1 编译过程: 参考 https://wiki.videolan.org/VLCKit 中的Building the framework for iOS项 在终端中执行 git Clone http://code.videolan.org/videolan/VLCKit.git,会生成目录下生成一个VLCKit的文件夹,

iOS音频播放 (五):AudioQueue

码农人生 ChengYin's coding life 主页 Blog 分类 Categories 归档 Archives 关于 About Weibo GitHub RSS Where there is a will, there is a way. -- Thomas Edison Aug 2nd, 2014 Audio, iOS, iOS Audio iOS音频播放 (五):AudioQueue Audio Playback in iOS (Part 5) : AudioQueue 在第三

iOS平台下闪退原因汇总(一):&quot;Ran out of trampolines of type 0/1/2&quot; 运行时间错误

"Ran out of trampolines of type 0/1/2" 运行时间错误通常出现在使用大量递归泛型时.要看到这个错误需要连接着设备直接将项目build到设备里运行调试才能看到,您可以暗示 AOT 编译器分配更多type 0.type 1 或 type 2 trampolines.此外,AOT 编译器命令行选项可以在播放器设置 (Player Settings)的其他设置 (Other Setings) 部分指定.对于 type 1 trampolines,指定 nrg

在iOS平台使用ffmpeg解码h264视频流(转)

在iOS平台使用ffmpeg解码h264视频流,有需要的朋友可以参考下. 对于视频文件和rtsp之类的主流视频传输协议,ffmpeg提供avformat_open_input接口,直接将文件路径或URL传入即可打开.读取视频数据.解码器初始参数设置等,都可以通过调用API来完成. 但是对于h264流,没有任何封装格式,也就无法使用libavformat.所以许多工作需要自己手工完成. 这里的h264流指AnnexB,也就是每个nal unit以起始码00 00 00 01 或 00 00 01开