ffplay编译和安装

版权声明:可自由转载。 https://blog.csdn.net/freeman1975/article/details/88366031

ffplay build:
    # yum -y install autoconf automake bzip2 cmake freetype-devel gcc gcc-c++ git libtool make mercurial pkgconfig zlib-devel cmake hg numactl numactl-devel freetype freetype-devel freetype-demos
    # curl -O -L http://www.nasm.us/pub/nasm/releasebuilds/2.13.02/nasm-2.13.02.tar.bz2
    # tar xjvf nasm-2.13.02.tar.bz2
    # cd nasm-2.13.02
    # ./autogen.sh && ./configure && make && make install
    # curl -O -L http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
    # ./configure && make && make install
    
    # ffmpeg编译选项增加:--enable-ffplay,缺省是不编译ffplay的。
    但编译出来居然仍然没有ffplay。直接修改config.h。
    #define CONFIG_FFPLAY 1
    #define CONFIG_FFPROBE 1
    #define CONFIG_FFMPEG 1
    ffplay编译和运行都依赖SDL库,http://libsdl.org/release/
    # wget http://libsdl.org/release/SDL2-2.0.9.tar.gz && tar xf SDL2-2.0.9.tar.gz && cd SDL2-2.0.9
    # ./configure && make && make install
    [root@localhost yasm-1.3.0]# ls /usr/local/lib/lib
    libSDL2-2.0.so.0      libSDL2main.a         libSDL2_test.la
    libSDL2-2.0.so.0.9.0  libSDL2main.la        libyasm.a
    libSDL2.a             libSDL2.so
    libSDL2.la            libSDL2_test.a
    # ffplay -rtsp_transport tcp rtsp://184.72.239.149/vod/mp4://BigBuckBunny_175k.mov
    报异常:
    Could not initialize SDL - No available video device
    (Did you set the DISPLAY variable?)
    解决过程:
    这个出错信息说明系统中没有安装x11的库文件,因此编译出来的SDL库实际上不能用。
    centos6安装x11库文件
    # yum -y install libX*
    然后再重新编译安装SDL2库文件。
    再次运行ffplay,出现问题:
    Failed to initialize a hardware accelerated renderer: Couldn't find matching render driver
    在虚拟机上面不能跑ffplay,我猜主要还是显卡的原因吧。

ffplay usage:
        # ffplay [option] file/URL 
        [option]跟ffmpeg的option是一样的。
        example: # ffplay -rtsp_transport tcp rtsp://184.72.239.149/vod/mp4://BigBuckBunny_175k.mov
        
    ffplay音画同步
    ffplay也是一个视频播放器,所以不得不提出来的一个问题是:音画同步。ffplay的音画同步的实现方式其实有三种,分别是:以音频为主时间轴作为同步源,以视频为主时间轴作为同步源,以外部时钟为主时间轴作为同步源。
    下面就以音频为主时间轴来作为同步源来作为案例进行讲解,而且ffplay默认也是以音频为基准进行对齐的,那么以音频作为对齐基准是如何实现的呢?

    首先需要说明的是,播放器接收到的视频帧或者音频帧,内部都是会有时间戳(PTS时钟)来标识它实际应该在什么时刻展示,实际的对齐策略如下:比较视频当前的播放时间和音频当前的播放时间,如果视频播放过快,则通过加大延迟或者重复播放来降低视频播放速度,如果视频播放满了,则通过减小延迟或者丢帧来追赶音频播放的时间点。关键就在于音视频时间的比较和延迟的计算,当前在比较的过程中会设置一个阈值,如果超过预设的阈值就应该作出调整(丢帧或者重复渲染),这就是整个对齐策略。

    在使用ffplay的时候,我们可以明确的指定使用那种对齐方式,比如:

    ffplay pm.mp4 -sync audio
    上面这个命令显式的指定了使用以音频为基准进行音视频同步的方式播放视频文件,当然这也是ffplay的默认播放设置。

    ffplay pm.mp4 -sync video
    上面这个命令显式的指定了使用以视频为基准进行音视频同步的方式播放视频文件。

    ffplay pm.mp4 -sync ext
    上面这个命令显式的指定了使用外部时钟为基准进行音视频同步的方式播放视频文件。
 

猜你喜欢

转载自blog.csdn.net/freeman1975/article/details/88366031