liunx源码部署 ffmpeg 踩坑指南 x264、yasm、nasm、java集成ffmpeg

liunx部署 ffmpeg 踩坑指南 x264、yasm、nasm 、java集成ffmpeg

部署流程

准备安装包

ffmpeg-6.1.1.tar.gz、nasm-2.14.tar.gz、x264.tar.gz、yasm-1.3.0.tar.gz
部署包图片

下载地址:
wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
wget http://www.ffmpeg.org/releases/ffmpeg-3.1.tar.gz
wget https://www.nasm.us/pub/nasm/releasebuilds/2.14/nasm-2.14.tar.gz --no-check-certificate
git clone https://code.videolan.org/videolan/x264.git

开始部署

安装 nasm

在编译安装libx264时,报了缺少nasm,需要先安装nasm。

wget https://www.nasm.us/pub/nasm/releasebuilds/2.14/nasm-2.14.tar.gz --no-check-certificate
tar -zxvf  nasm-2.14.tar.gz 
./configure
make && make install 

#添加PATH  至/etc/profile
export PATH=$PATH:/usr/local/bin
source /etc/profile

安装 x264
在使用–enable-libx264时需要。mp4格式的视频就有3种编码: mpg4(xdiv),mpg4(xvid),avc(h264)
这三种格式虽然在播放器里可以正常播放,但是mpg(xdiv),mpg4(xvid)这两种格式嵌到html5页面里的时候就会出现只有声音不显示图像的情况,转换成H264编码就可以在网页正常播放了。为了兼容浏览器,建议安装x264依赖

git clone https://code.videolan.org/videolan/x264.git
cd x264
./configure --enable-shared
## --enable-shared 参数需要带上,不然只有安装x264命令而没有生成相关lib 库文件
make && make install

安装yasm

wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
tar -zxvf yasm-1.3.0.tar.gz
cd yasm-1.3.0
./configure
make && make install

安装ffmpeg

wget http://www.ffmpeg.org/releases/ffmpeg-3.1.tar.gz
tar -zxvf ffmpeg-3.1.tar.gz 
cd ffmpeg-3.1
./configure --enable-shared --enable-swscale --enable-gpl --enable-nonfree --enable-pic --prefix=/usr/local/ffmpeg  --enable-postproc --enable-pthreads --enable-static --enable-libx264
make && make install


#配置环境变量
vim /etc/profile
#在最后PATH添加环境变量:
export PATH=$PATH:/usr/local/ffmpeg/bin
#x264的环境变量
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig

#保存退出
source /ect/profile  
#设置生效

验证是否安装完成

[root@node1 ffmpeg-6.1.1]# ffmpeg -version
ffmpeg version 6.1.1 Copyright (c) 2000-2023 the FFmpeg developers
built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-44)
configuration: --enable-shared --enable-swscale --enable-gpl --enable-nonfree --enable-pic --prefix=/usr/local/ffmpeg --enable-postproc --enable-pthreads --enable-static --enable-libx264
libavutil      58. 29.100 / 58. 29.100
libavcodec     60. 31.102 / 60. 31.102
libavformat    60. 16.100 / 60. 16.100
libavdevice    60.  3.100 / 60.  3.100
libavfilter     9. 12.100 /  9. 12.100
libswscale      7.  5.100 /  7.  5.100
libswresample   4. 12.100 /  4. 12.100
libpostproc    57.  3.100 / 57.  3.100


踩坑记录!!(先看)

在部署途中遇到的问题记录

1.当只安装ffmpeg服务。查看版本时:

[root@node1 ffmpeg-6.1.1]# ffmpeg -version
ffmpeg: error while loading shared libraries: libavdevice.so.60: cannot open shared object file: No such file or directory
#原因及解决方案:相关库文件没有加载上,编辑/etc/ld.so.conf 添加相关库文件的目录
cat  /etc/ld.so.conf 
include ld.so.conf.d/*.conf
/usr/local/ffmpeg/lib/
/usr/local/lib/
#   /usr/local/ffmpeg/lib/ 是 ffmpeg 的编译目录
# /usr/local/lib/ 是x264的编译生成的库文件 ,没有指定的编译目录的生成配置都是系统默认的该目录下
# 
ldconfig 加载生效

2.下载ffmpeg后,设置配置错误提示:
在这里插入图片描述

增加配置文件
vim /etc/profile
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
source /etc/profile
重新配置编译
./configure --enable-shared --enable-swscale --enable-gpl --enable-nonfree --enable-pic --prefix=/usr/local/ffmpeg  --enable-postproc --enable-pthreads --enable-static --enable-libx264
  1. 缺少yasm报错
    错误提示:
    在这里插入图片描述
    解决方案:安装yasm依赖

测试转换

ffmpeg -i /data/test.wmv -c:v libx264 -c:a aac -strict -2 /data/output.mp4

转换命令

ffmpeg -i input.mp4 output.avi

其中,input.mp4为输入文件名(可以根据需要修改),output.avi为输出文件名。这条命令将会将MP4格式的视频文件转换成AVI格式的视频文件
除了上述最基本的命令外,还有更多高级选项可供配置,比如调整分辨率、设定编码参数等。以下是一些常用的FFmpeg转换命令及相关说明
-s <width>x<height>:指定输出视频的分辨率大小
-b:v <bitrate>:设置视频流的比特率
-r <fps>:设置视频的帧率
-c:a copy:复制音频流而不重新编码
-c:v libx264:使用libx264编码器对视频进行H.264编码
-preset ultrafast:设置编码速度与质量之间的平衡,ultrafast表示非常快速但画面质量也较差
-crf <quality>:控制视频的质量,值越小则质量越好,通常取1823之间的数字
-threads <num_of_threads>:并发处理线程数。

java集成

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 * @description: ffmpeg文件转码工具类
 * @author: ajiang
 * @create: 2024-01-03 11:35
 **/

public class FFMpegExecutorUtil {

    /**
     * 视频格式转换
     *
     * @param inputPath
     * @param outputPath
     */
    public static void codingConvert(String inputPath, String outputPath) {
        String ffmpegCommand = "ffmpeg -i " + inputPath + " -c:v libx264 -c:a aac -strict -2 " + outputPath; // 这里的命令根据需要自定义
        try {
            // 执行FFmpeg命令
            Process process = Runtime.getRuntime().exec(ffmpegCommand);
            // 等待FFmpeg命令执行完毕
            int exitCode = process.waitFor();
            if (exitCode == 0) {
                System.out.println("FFmpeg命令执行成功!");
            } else {
                System.out.println("FFmpeg命令执行失败!");
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
要在Java中使用FFmpegH264和AAC实时流保存为ts格式文件,可以参考以下步骤: 1. 首先,需要在Java项目中引入FFmpeg库,可以使用JavaCV库,或者自己编译FFmpeg库。 2. 接下来,使用FFmpeg库的API进行实时流转换和保存。可以使用如下命令将H264和AAC实时流转换为ts格式并保存: ``` ffmpeg -i rtmp://input_stream_url -c:v copy -c:a copy -f mpegts -mpegts_flags initial_discontinuity -y output.ts ``` 其中,`rtmp://input_stream_url`是输入的实时流地址,`output.ts`是输出的ts文件路径。 在Java中,可以使用JavaCV库的`FFmpegFrameGrabber`和`FFmpegFrameRecorder`类来实现实时流的抓取和保存。 3. 最后,需要在Java中编写相应的代码,将实时流抓取和保存的过程连接起来,实现实时流转换和保存。 ``` FFmpegFrameGrabber grabber = new FFmpegFrameGrabber("rtmp://input_stream_url"); grabber.start(); FFmpegFrameRecorder recorder = new FFmpegFrameRecorder("output.ts", grabber.getImageWidth(), grabber.getImageHeight(), grabber.getAudioChannels()); recorder.setFormat("mpegts"); recorder.setFrameRate(grabber.getFrameRate()); recorder.setPixelFormat(grabber.getPixelFormat()); recorder.setSampleRate(grabber.getSampleRate()); recorder.setAudioChannels(grabber.getAudioChannels()); recorder.start(); Frame frame; while ((frame = grabber.grabFrame()) != null) { recorder.record(frame); } recorder.stop(); grabber.stop(); ``` 注意:在使用JavaCV库的API时,需要注意库的版本和API的使用方法,以免造成不必要的错误。同时,也需要注意实时流的格式和编码方式,以保证转换和保存的正确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值