简介: 基于 ffmpeg 库开发的简单媒体播放器,可用于播放音频和视频文件。相比于常见播放器,它更侧重 命令行操作方式,对于开发者和需要特定播放控制的场景很有用。
应用场景:开发者调试音视频播放功能,或在无图形化界面的服务器环境下播放媒体文件来测试媒体流。
ffplay -h
使用 ffplay 播放视频的基本命令
播放方式:
- 命令行输入 ffplay 视频路径 eg:ffplay yuanshen.mp4
- ffplay -showmode 0 input.aac
-showmode 0
:强制指定 FFplay 的显示模式为audio
(音频模式)ffplay -showmode <模式值> input.aac
- 0 视频模式(显示黑屏,仅音频播放)1. 隐藏音频可视化2. 纯后台播放
- 1 波形模式(默认音频模式,显示实时声波)直观观察音频振幅
- 2 频谱模式(实时FFT频域分析,显示频率能量分布)分析音频频率特征(默认)
如果直接运行
ffplay input.aac
,FFplay 会进入 音频模式,显示一个动态音频波形(频谱或波形图)。
ffplay input.mp4 -vf "setpts=0.5*PTS" -an
-
-vf
设置2倍速,-an
禁用音频。
-
播放控制
退出:q 或 esc 键。
全屏切换:f 键。; 鼠标左键双击 也可以进行全屏切换
暂停 / 恢复:p 键或空格键。
静音切换:m 键。
音量调整:j 键减少音量,k 键增加音量。M 键可切换 静音 / 非静音 状态
流切换:
a 键切换音频流
V 键切换视频流
t 键切换字幕流。
时间拖动:左右箭头键,向前和向后小幅度拖动 10s;上下箭头键,向前和向后拖动 60 秒。
逐帧播放:s键。
循环切换 : 针对有多个音频流以及视频流 , 如电视节目 TS 流 , 多个电视台信号在一个流中 , 可以通过切换 音频流 / 视频流 / 节目 等选择不同的电视台信号进行观看 ;
循环切换音频流 : A ; ( Audio )
循环切换视频流 : V ; ( Vedio )
循环切换字幕流 : T ;
循环切换节目 : C ;
循环切换过滤器或显示模式 : W ;
测试 TS 流循环切换 音频流/视频流/字幕流/节目
TS 流即传送流(Transport Stream ) ,是依据 ITU-T Rec.H.222.0|ISO/IEC13818 - 2 和 ISO/IEC13818 - 3 等协议定义的数据流 ,用于音视频及数据的传输与存储,在数字电视广播、流媒体等领域应用广泛。
工作原理
- 经过视音频压缩形成基本流(ES) ,ES 流经打包形成打包基本码流(PES) ,在 PES 包中加入定时信息(PTS/DTS) ,再将 PES 包内容分配到固定长度传输包中 ,加入节目参考时钟(PCR)和节目特定信息(PSI) ,最终连续输出传输包形成 TS 流 。
TS 流文件 cctv.ts , 其包含的流信息如下 , 该文件中有 7 个视频流 , 7 个音频流 ;
容器及常规信息
- 格式:
MPEG-TS
,即 MPEG 传输流,常用于数字电视广播、流媒体等领域,能有效复用多个音视频流 - 码率:
133 Mb
,指该文件在单位时间内传输的数据量大小,反映数据传输的速率
流信息
- 视频流:有
7 video streams
,编码格式均为MPEG Video
,说明该文件包含 7 个采用 MPEG 编码的视频流 - 音频流:存在
7 audio streams
,编码格式是MPEG Audio
,即有 7 个采用 MPEG 编码的音频流
使用ffplay cctv.ts
命令播放包含多个视频流 / 音频流 ;
如果声音太大可以使用 -volume
选项控制声音 :ffplay -volume 3 cctv.ts
播放开始后 , 按下 A 可以切换音频流 , 按下 V 可以切换视频流 , 按下 T 可以切换字幕流 ,
按下 C 可以切换完整的节目 , 即同时切换 音频流 , 视频流 , 字幕流 ;
注意事项
在 ts 流中切换音频流和视频流时,可能出现声音和画面不同步等问题 ,ffplay 处理码流时或存在 bug,导致切换不流畅,同时需留意设备兼容性。