IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> 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函数即可

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2022-10-31 12:20:15  更:2022-10-31 12:20:35 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 20:33:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码