ffplay是以FFmpeg框架为基础,外加渲染音视频的库libSDL构建的媒体文件播放器。html
在使用ffplay以前必需要安装到系统中,MAC的安装教程为:http://www.cnblogs.com/renhui/p/8458150.html框架
在安装了在命令行中输入以下格式的命令:ide
ffplay [选项] ['输入文件']
'-x width' 强制以 "width" 宽度显示 '-y height' 强制以 "height" 高度显示 '-an' 禁止音频 '-vn' 禁止视频 '-ss pos' 跳转到指定的位置(秒) '-t duration' 播放 "duration" 秒音/视频 '-bytes' 按字节跳转 '-nodisp' 禁止图像显示(只输出音频) '-f fmt' 强制使用 "fmt" 格式 '-window_title title' 设置窗口标题(默认为输入文件名) '-loop number' 循环播放 "number" 次(0将一直循环) '-showmode mode' 设置显示模式 可选的 mode : '0, video' 显示视频 '1, waves' 显示音频波形 '2, rdft' 显示音频频带 默认值为 'video',你能够在播放进行时,按 "w" 键在这几种模式间切换 '-i input_file' 指定输入文件
'-sync type' 设置主时钟为音频、视频、或者外部。默认为音频。主时钟用来进行音视频同步 '-threads count' 设置线程个数 '-autoexit' 播放完成后自动退出 '-exitonkeydown' 任意键按下时退出 '-exitonmousedown' 任意鼠标按键按下时退出 '-acodec codec_name' 强制指定音频解码器为 "codec_name" '-vcodec codec_name' 强制指定视频解码器为 "codec_name" '-scodec codec_name' 强制指定字幕解码器为 "codec_name"
'q, ESC' 退出 'f' 全屏 'p, SPC' 暂停 'w' 切换显示模式(视频/音频波形/音频频带) 's' 步进到下一帧 'left/right' 快退/快进 10 秒 'down/up' 快退/快进 1 分钟 'page down/page up' 跳转到前一章/下一章(若是没有章节,快退/快进 10 分钟) 'mouse click' 跳转到鼠标点击的位置(根据鼠标在显示窗口点击的位置计算百分比)
播放音频文件的命令:oop
ffplay shy.mp3
这时候就会弹出来一个窗口,一边播放MP3文件,一边将播放音频的图画到该窗口上。针对该窗口的操做以下:ui
播放视频文件的命令:命令行
ffplay pm.mp4
这时候,就会在新弹出的窗口上播放该视频了。线程
ffplay pm.mp4 -loop 10
上述命令表明播放视频结束以后会从头再次播放,共循环播放10次。code
ffplay -autoexit pm.mp4
ffplay -x 320 -y 240 pm.mp4
ffplay -window_title myplayer -loop 2 pm.mp4
ffplay -f s16le -ar 32000 -ac 2 test.pcm
ffplay也是一个视频播放器,因此不得不提出来的一个问题是:音画同步。ffplay的音画同步的实现方式其实有三种,分别是:以音频为主时间轴做为同步源,以视频为主时间轴做为同步源,之外部时钟为主时间轴做为同步源。视频
下面就以音频为主时间轴来做为同步源来做为案例进行讲解,并且ffplay默认也是以音频为基准进行对齐的,那么以音频做为对齐基准是如何实现的呢?xml
首先须要说明的是,播放器接收到的视频帧或者音频帧,内部都是会有时间戳(PTS时钟)来标识它实际应该在什么时刻展现,实际的对齐策略以下:比较视频当前的播放时间和音频当前的播放时间,若是视频播放过快,则经过加大延迟或者重复播放来下降视频播放速度,若是视频播放满了,则经过减少延迟或者丢帧来追赶音频播放的时间点。关键就在于音视频时间的比较和延迟的计算,当前在比较的过程当中会设置一个阈值,若是超过预设的阈值就应该做出调整(丢帧或者重复渲染),这就是整个对齐策略。
在使用ffplay的时候,咱们能够明确的指定使用那种对齐方式,好比:
ffplay pm.mp4 -sync audio
上面这个命令显式的指定了使用以音频为基准进行音视频同步的方式播放视频文件,固然这也是ffplay的默认播放设置。
ffplay pm.mp4 -sync video
上面这个命令显式的指定了使用以视频为基准进行音视频同步的方式播放视频文件。
ffplay pm.mp4 -sync ext
上面这个命令显式的指定了使用外部时钟为基准进行音视频同步的方式播放视频文件。
你们能够分别使用这三种方式进行播放,尝试听一听,作一些快进或者seek的操做,看看不一样的对齐策略对最终的播放会产生什么样的影响。