花果山札记cutbag.blog.chinaunix.net

独学而无友则孤陋而寡闻

  • 博客访问: 1295814
  • 博文数量: 145
  • 博客积分: 3552
  • 博客等级: 中校
  • 技术积分: 4015
  • 用 户 组: 普通用户
  • 注册时间: 2009-07-15 14:39
  • 认证徽章:
个人简介

熟悉Linux下程序设计及各种应用程序 熟悉C Language 熟悉Glusterfs、FFmpeg、CDN 系统设计,计算机图形系统设计、分布式程序设计 目前主要研究方向:流媒体

文章分类

全部博文(145)

微信关注

IT168企业级官微



微信号:IT168qiye



系统架构师大会



微信号:SACC2013

订阅
热词专题

分类: LINUX

在编译FFmpeg源代码时,如果系统中包含了SDL-1.2版本时,会默认将ffplay编译生成出来,如果不包含SDL-1.2或者版本不是SDL-1.2时,无法生成ffplay文件,所以,生成如果想使用ffplay进行流媒体播放测试,是需要安装SDL-1.2的。

通常使用ffplay作为播放器,其实ffplay不但可以做播放器,同样可以作为很多图像化音视频数据的分析根据,通过ffplay可以看到视频图像的运动估计方向,音频数据的波形等,在本节将会有更多的参数进行介绍并举例。


6.1 ffplay 常用参数
ffplay不仅仅是播放器,同时也是测试ffmpeg的codec引擎,format引擎,以及filter引擎的工具,并且也可以做可视化的媒体参数分析,可以通过ffplay --help 进行查看:

如上图,大多数是前面已经介绍过的参数,还有些是未介绍过的

参数

说明

X

强制设置视频显示窗口的宽度

y

强制设置视频显示窗口的高度

S

设置视频显示的宽高

fs

强制全屏显示

an

屏蔽音频

vn

屏蔽视频

Sn

屏蔽字幕

ss

根据设置的秒进行定位拖动

t

设置播放视频/音频长度

Bytes

设置定位拖动的策略,0为不可拖动,1为可拖动,-1为自动

Nodisp

关闭图形化显示窗口

f

强制使用设置的格式进行解析

window_title

设置显示窗口的标题

af

设置音频的滤镜

Codec

强制使用设置的codec进行解码

autorotate

自动旋转视频


常见参数可以手动进行尝试:
如果希望从视频的第30秒开始播放,播放10秒钟的文件,则可以使用如下命令
#ffplay -ss 30 -t 10 input.mp4
如果希望视频播放时播放器的窗口显示标题为自定义标题,则使用如下命令
ffplay -window_title "Hello World, This is a sample" output.mp4
显示窗口如下图:

例如使用ffplay打开网络直播流,可以使用命令
# ffplay -window_title "播放测试"  rtmp://up.v.test.com/live/stream

如图播放的视频为实时网络直播视频流。


根据上图可以看到播放器播放的窗口标题已经显示为自定义设置的内容。
基本参数介绍完毕,下面进一步介绍ffplay的高级一些的参数。

6.2 ffplay高级参数
通过使用ffplay –help参数看到帮助信息比较多,其中包含了高级参数介绍,下面详细介绍一下

参数

说明

ast

设置将要播放的音频流

vst

设置将要播放的视频流

sst

设置将要播放的字幕流

Stats

输出多媒体播放状态

Fast

非标准化规范的多媒体兼容优化

sync

音视频同步设置可设置根据音频视频进行参考,视频时间参考,或者外部扩展时间进行参考

autoexit

多媒体播放完毕自动退出ffplay,ffplay默认播放完毕不退出播放器

exitonkeydown

当有按键按下事件产生时退出ffplay

exitonmousedown

当有鼠标按键事件产生时退出ffplay

loop

设置多媒体文件循环播放次数

framedrop

当CPU资源占用过高时,自动丢帧

infbuf

设置无极限的播放器buffer,这个选项常见于实时流媒体播放场景

vf

视频滤镜设置

acodec

强制使用设置的音频解码器

vcodec

强制使用设置的视频解码器

scodec

强制使用设置的字幕解码器


下面根据这些参数与前面介绍过的一些参数进行组合:
例如从20秒播放一个视频,播放时长为10秒钟,播放完成后自动退出ffplay,播放器的窗口标题为”Hello World”,为了确认播放时长正确,可以通过系统命令time查看命令运行时长
#time ffplay -window_title "Hello World" -ss 20 -t 10 -autoexit output.mp4
该命令执行完毕之后输出如下:
real 0m10.783s
user 0m8.401s
sys 0m0.915s

例如强制使用H264解码器解码mpeg4的视频,将会报错:
# ffplay -vcodec h264 output.mp4

使用h264的解码器解码mpeg4时会得到no frame的错误,视频也解析不出来。
前面举过的例子中,看到比较多的是单节目的流,下面举一个多节目的流,常见于**行业的视频:

当视频流中出现多个Program时,播放Program与常规的播放方式则有所不同,需要指定对应的流,可以通过vst、ast、sst参数指定,例如希望播放Program 13中的音视频流,则通过如下命令行指定:
#ffplay -vst 4 -ast 5 ~/Movies/movie/ChinaTV-11.ts
播放效果如图:

通过Program 13中的信息可以看到该流名称为service_name对应的值是CCTV 9,而指定音视频流播放之后播放出来的图像也能够与之对应。
如果使用ffplay播放视频时希望加载字幕文件,则可以通过加载ASS或者SRT字幕文件来解决,下面举一个加载SRT字幕的例子,首先编辑SRT字幕文件,内容如下:

然后通过filter将字幕文件加载如播放数据中,使用命令
# ffplay -window_title "Test Movie" -vf "subtitles=input.srt" output.mp4
通过这条命令可以看到播放的效果如下






6.3 ffplay的数据可视化分析应用
使用ffplay除了可以播放视频流媒体文件之外,还可以作为可视化的视频流媒体分析工具,例如当播放音频文件时,不确定文件的声音是否正常,噪声数据等分析,可以直接使用ffplay播放音频文件,播放的时候将会把解码后的音频数据以音频波形显示出来:
#ffplay -showmode 1 output.mp3

从图中可以看到,音频的播放时的波形可以通过振幅显示出来,可以用来看到音频的播放情况。
例如当播放视频时体验解码器是如何解码每个宏块的,可以使用命令
# ffplay -debug vis_mb_type -window_title "show vis_mb_type" -ss 20 -t 10 -autoexit output.mp4
显示窗口内容

在输出的视频信息中,可以看到不同颜色的方块,下面来说明一下这些颜色代表着什么信息:

颜色

宏块类型条件

说明

IS_PCM (MB_TYPE_INTRA_PCM)

无损(原始采样不包含预测信息)   

(IS_INTRA && IS_ACPRED) || IS_INTRA16x16  

16x16帧内预测

IS_INTRA4x4     

4x4帧内预测

IS_DIRECT

无运动向量处理(B帧分片)

IS_GMC && IS_SKIP

16x16跳宏块(P或B帧分片)

IS_GMC    

全局运动补偿(与H264无关)

!USES_LIST(1)  

参考过去的信息(P或B帧分片)

!USES_LIST(0)  

参考未来的信息(B帧分片)

USES_LIST(0) && USES_LIST(1)

参考过去和未来信息(B帧分片)


例如通过ffplay查看B帧预测与P帧预测信息,希望将信息在窗口中显示出来,使用命令
# ffplay -vismv pf output.mp4
显示效果如图

通过图中的箭头可以看到p帧运动估计的信息
而vismv参数则是用来显示图像解码时的运动向量信息的,参数可以设置三种类型的运动向量信息显示

参数

说明

pf

P帧向前运动估计显示

bf

B帧向前运动估计显示

bb

B帧向后运动估计显示

这个vismv参数将会在未来被替换掉,未来更多的是使用codecview这个filter来进行设置,如上面图像,也可以通过下面这条命令完成
# ffplay -flags2 +export_mvs -ss 40 ~/Movies/objectC/facebook.mp4 -vf codecview=mv=pf+bf+bb





阅读(10358) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~
评论热议
请登录后评论。

登录 注册