qnx环境下编译ffmpeg及解码mp4实践

这篇具有很好参考价值的文章主要介绍了qnx环境下编译ffmpeg及解码mp4实践。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一 ffmpeg简介

1.ffmpeg是一套可以用来进行音视频处理的工具和编解码库;

2.采用LGPL或GPL许可证(不能修改源码,只能使用so库,如果要修改源码,必须发布工程代码);

3.ffmpeg对与硬件平台、GPU做了很多优化,效率非常高;

4.包含库:

(1)avcodec 编解码(最重要的库)

(2)avformat 封装格式处理

(3)avfilter 滤镜特效处理

(4)avdevice 各种设备的输入输出

(5)avutil 工具库

(6)postproc 后加工

(7)swresample 音频采样数据格式转换

(8)swscale 视频像素数据格式转换

二 在qnx710环境编译ffmpeg源码

1.源码:

GitHub - FFmpeg/FFmpeg: Mirror of https://git.ffmpeg.org/ffmpeg.git

2.解压

tar jxvf ffmpeg-snapshot.tar.bz2

3.下载yasm(yasm是汇编编译器,ffmpeg为了提高效率使用了汇编指令,如MMX和SSE等,所以系统中未安装yasm时,就会报“nasm/yasm not found or too old. Use --disable-x86asm for a crippled build.”)

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
cp -f yasm ytasm vsyasm /home/zt/ffmpeg/ #将编译出来的yasm拷贝到ffmpeg目录
export PATH=../:$PATH   #修改系统路径
4.编译ffmpeg
#! /bin/bash

g_root_path="$( cd "$( dirname "$0" )" && pwd )" #当前路径

function update_build_folder(){
    local build_dir=$1
    if [[ -z $1 ]]
    then
        build_dir="build"
    fi

    if [[ ! -d $build_dir ]]
    then
        mkdir ${build_dir}
        echo ${build_dir}
        return 0
    else
        build_dir=$build_dir"1"
        update_build_folder ${build_dir}
        return 0
    fi
}

function compile_ffmpeg(){
    local build_dir_name=$1
    local ffmpeg_source_dir_path=$2
    local qnx_sdp_source_dir_path=$3
    
    if [[ -z build_dir_name ]] || [[ -z ffmpeg_source_dir_path ]] || [[ -z qnx_sdp_source_dir_path ]] 
    then
        echo error should input 3 param
    fi

    path_build_dir=$(update_build_folder "$g_root_path/"${build_dir_name})
    local pkgconfig_dir_path=$(update_build_folder ${path_build_dir}/pkg)

    echo current establish build dir:$path_build_dir
    echo current establish pkg dir:$pkgconfig_dir_path

    source ${qnx_sdp_source_dir_path}/qnx710/qnxsdp-env.sh

    cd ${ffmpeg_source_dir_path}
    ./configure \
    --cc=${qnx_sdp_source_dir_path}/qnx710/host/linux/x86_64/usr/bin/aarch64-unknown-nto-qnx7.1.0-gcc-8.3.0 \
    --prefix=${path_build_dir} \
    --pkgconfigdir=${pkgconfig_dir_path} \
    --enable-pic \
    --enable-cross-compile \
    --disable-optimizations \
    --disable-stripping \
    --target-os=qnx \
    --arch=aarch64 \
    --enable-shared \
    --disable-static \
    --enable-gpl \
    --enable-nonfree \
    --enable-asm \
    --disable-avdevice \
    --disable-swresample \
    --disable-postproc \
    --disable-avfilter \
    --disable-programs \
    --disable-logging \
    --disable-everything \
    --enable-avformat \
    --enable-decoder=hevc \
    --enable-decoder=h264 \
    --enable-decoder=mpeg4 \
    --enable-decoder=aac \
    --disable-ffplay \
    --disable-ffprobe \
    --disable-doc \
    --disable-devices \
    --disable-network \
    --disable-hwaccels \
    --disable-parsers \
    --disable-bsfs \
    --disable-debug \
    --enable-protocol=file \
    --enable-demuxer=mov \
    --enable-demuxer=flv \
    --disable-indevs \
    --extra-cflags="-std=gnu99 -fPIC" \
    --disable-outdevs


    make && make install
}

compile_ffmpeg \
 ffmpeg_build  \
 /home/xx/ffmpeg/ffmpeg \
 /home/xx/qnx710


注意修改如下:
compile_ffmpeg \
 ffmpeg_build  \    #编译后相关库输出路径
 /home/xx/ffmpeg/ffmpeg \   #ffmpeg源码路径
 /home/xx/qnx710            #qnx710环境路径

使用时,需要拷贝inclue和lib到自己的代码工程目录,添加相关库链接即可。

三 ffmpeg解码mp4流程

1.打开视频

avformat_open_input(&format_ctx_, video_path, nullptr, nullptr);

2.寻找视频流

avformat_find_stream_info(format_ctx_, nullptr);

3.定位视频索引通道

for (uint i = 0;i < format_ctx_->nb_streams;i++) {

    LOG_I("codec_type:%d", format_ctx_->streams[i]->codecpar->codec_type);

    if (AVMEDIA_TYPE_VIDEO == format_ctx_->streams[i]->codecpar->codec_type) {

        video_stream_index_ = i;

        break;

    }

}

4.寻找解码器

codec_ = (AVCodec*)avcodec_find_decoder(format_ctx_->streams[video_stream_index_]->codecpar->codec_id);

5.创建解码上下文

codec_ctx_ = avcodec_alloc_context3(codec_);

6.为解码上下文分配参数

ret = avcodec_parameters_to_context(codec_ctx_, format_ctx_->streams[video_stream_index_]->codecpar);

7.配置解码线程数

codec_ctx_->thread_count = thread_num_;

8.打开解码器

ret = avcodec_open2(codec_ctx_, codec_, nullptr);

四 ffmpeg解码mp4实例

1.功能:对指定mp4(1280✖800)文件进行解码,输出为(1280✖800)uyvy格式文件

2.代码

https://github.com/wangzhicheng2013/ffmpeg_decode_video

注意:替换I420转uyvy函数即可文章来源地址https://www.toymoban.com/news/detail-419297.html

到了这里,关于qnx环境下编译ffmpeg及解码mp4实践的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ffmpeg批量转换mpg为mp4

    1、新建一个txt文件,并复制如下代码进入,然后保存。 2、把文件后缀修改为bat 。 3、把后缀为bat的文件放到要批量处理的视频文件夹里面。 4、在确保安装了ffmpeg的情况下,双击bat文件执行即可。 5、参数说明: -i          输入文件,这里指的就是视频文件。 -y       

    2024年02月13日
    浏览(35)
  • ffmpeg ts列表合并为mp4

    操作系统:ubuntu 注意事项: 1.ts文件顺序必须正确,也就是下一帧的dst和pst要比上一帧的大,否则会报错 2.codecpar-codec_tag要设置为0,否则报错Tag [27][0][0][0] incompatible with output codec id ‘27’ (avc1) 3.设置output的max_streams数目,默认是1000,超过此数目就会报错

    2024年02月13日
    浏览(43)
  • FFmpeg将编码后数据保存成mp4

          以下测试代码实现的功能是:持续从内存块中获取原始数据,然后依次进行解码、编码、最后保存成mp4视频文件。       可保存成单个视频文件,也可指定每个视频文件的总帧数,保存多个视频文件。       为了便于查看和修改,这里将可独立的程序段存放在单个函

    2024年02月13日
    浏览(30)
  • 基于FFmpeg的封装格式MP4(TS)

    每一帧音频或视频都有一个持续时间:duration: 采样频率是指将模拟声音波形进行数字化时,每秒钟抽取声波幅度样本的次数。 。正常人听觉的频率范围大约在20Hz~20kHz之间,根据奈奎斯特采样理论,为了保证声音不失真,采样频率应该在40kHz左右。常用的音频采样频率有8k

    2024年02月03日
    浏览(32)
  • ffmpeg从MP4中取出wav音频

    要从 MP4 文件中提取出 WAV 音频,你可以使用 FFmpeg 工具。请按照以下步骤进行操作: 1. 下载 FFmpeg:首先,你需要下载 FFmpeg 工具。你可以在 FFmpeg 官方网站(https://ffmpeg.org/)上找到适用于 Windows 的预编译版本。下载后,解压缩到一个方便的位置。 2. 打开命令提示符:按下

    2024年02月03日
    浏览(37)
  • 【FFMPEG应用篇】基于FFmpeg的转码应用(FLV MP4)

     方法声明  定义实现   调用实例

    2024年02月02日
    浏览(30)
  • C# 使用ffmpeg将图片保存为mp4视频

    使用 FFmpeg 这个强大的多媒体处理工具,可以轻松地将一系列图片转换为一个 MP4 视频文件。以下是一个基本的命令行示例来完成这个任务: 命令参数说明: -framerate 25 :设置输入图像序列的帧率,这里表示每秒25帧。 -i image-%03d.jpg :指定输入文件格式,这里的  %03d  是一个

    2024年04月27日
    浏览(33)
  • 第4课 FFmpeg读取本地mp4文件并显示

    在上节课,我们使用FFmpeg实现了一个最简单的rtmp播放器,它看起来工作正常。这节课,我们尝试让它来播放本地的mp4文件试试。 1.压缩备份上节课工程文件夹为demo3.rar,并修改工程文件夹demo3为demo4,重要的事情再说一遍:及时备份源文件并在原基础上继续迭代开发是一种好

    2024年02月03日
    浏览(36)
  • 【音视频 ffmpeg 学习】 RTMP推流 mp4文件

    1.RTMP(实时消息传输协议)是Adobe 公司开发的一个基于TCP的应用层协议。 2.RTMP协议中基本的数据单元称为消息(Message)。 3.当RTMP协议在互联网中传输数据的时候,消息会被拆分成更小的单元,称为消息块(Chunk)。 (1). linux 环境准备 安装nginx 和 rtmp模块 下载nginx安装包 下载

    2024年02月03日
    浏览(48)
  • (保姆级)利用ffmpeg将flv批量转mp4

    进入ffmpeg官网,选择需要的版本进行下载: 以windows为例,点击下图红色框内选项: 下一步会跳转到github,我下载的是下图红色框内的版本: 解压zip安装包,打开bin文件夹,将路径添加到系统变量。具体操作如下: (1) 依次点击 “此电脑 – 属性 – 高级系统设置 – 环境变量

    2024年02月08日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包