当前位置: 首页 > news >正文

织梦网站建设交流群搜索引擎优化的流程是什么

织梦网站建设交流群,搜索引擎优化的流程是什么,免费ppt模板在线下载,长沙营销推广公司背景FFmpeg 是一款知名的开源音视频处理软件,它提供了丰富而友好的接口支持开发者进行二次开发。FFmpeg 读作 “ef ef em peg” ,其中的 “FF” 指的是 “Fast Forward”,“mpeg” 则是 “Moving Picture Experts Group” (动态图…

背景

FFmpeg 是一款知名的开源音视频处理软件,它提供了丰富而友好的接口支持开发者进行二次开发。

FFmpeg 读作 “ef ef em peg” ,其中的 “FF” 指的是 “Fast Forward”,“mpeg” 则是 “Moving Picture Experts Group” (动态图像专家组)。

FFmpeg 项目功能复杂而庞大,基本上支持所有常见的音视频处理操作,如封装格式转换、音视频转码、音视频播放和剪辑、视频添加水印滤镜等。

尽管 FFmpeg 功能强大,但是由于其采用的是带有传染性的 LGPL/GPL 开源协议,所以一些大厂基本上都是自己独立开发类似的音视频处理库,甚至在接口和组织模块上模仿 FFmpeg 。

因此,学习 FFmpeg 不仅能够帮助你掌握音视频开发的相关知识脉络,还能让你快速适应不同的音视频处理框架。

FFmpeg 编译

FFmpeg 有六个常用的功能模块:

  • libavformat:多媒体文件或协议的封装和解封装库;

  • libavcodec:音视频编解码库;

  • libavfilter:音视频、字幕滤镜库;

  • libswscale:图像格式转换库;

  • libswresample:音频重采样库;

  • libavutil:工具库。

本文主要是帮助初学者快速上手 FFmpeg 的编译和集成,对 FFmpeg 项目的编译配置细节就不做过多阐述,这不是本篇内容所能容纳的。

这里主要选择编译 ffmpeg v4.2.2 版本,因为这个版本网上的解决方案比较多,而且大部分可行。

编译环境:

  • CentOS Linux release 7.6.1810 (Core)

  • android-ndk-r20b-linux-x86_64

  • ffmpeg-4.2.2

编译前准备:

#1. 下载 ffmpeg-4.2.2
wget https://ffmpeg.org/releases/ffmpeg-4.2.2.tar.bz2
#2. 解压 FFmpeg 
tar -jxvf ffmpeg-4.2.2.tar.bz2
#3. 运行 configure 脚本配置项目
./configure --disable-x86asm

解压目录下创建编译脚本

在 FFmpeg 4.2.2 解压目录下创建编译脚本 build_android_arm64-v8a_clang.sh:

#!/bin/bashexport NDK=/root/workspace/android-ndk-r20b #这里配置先你的 NDK 路径
TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64function build_android
{./configure \
--prefix=$PREFIX \
--enable-neon  \
--enable-hwaccels  \
--enable-gpl   \
--disable-postproc \
--disable-debug \
--enable-small \
--enable-jni \
--enable-mediacodec \
--enable-decoder=h264_mediacodec \
--enable-static \
--enable-shared \
--disable-doc \
--enable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-avdevice \
--disable-doc \
--disable-symver \
--cross-prefix=$CROSS_PREFIX \
--target-os=android \
--arch=$ARCH \
--cpu=$CPU \
--cc=$CC \
--cxx=$CXX \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic $OPTIMIZE_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS"make clean
make -j16
make installecho "============================ build android arm64-v8a success =========================="}#arm64-v8a
ARCH=arm64
CPU=armv8-a
API=21
CC=$TOOLCHAIN/bin/aarch64-linux-android$API-clang
CXX=$TOOLCHAIN/bin/aarch64-linux-android$API-clang++
SYSROOT=$NDK/toolchains/llvm/prebuilt/linux-x86_64/sysroot
CROSS_PREFIX=$TOOLCHAIN/bin/aarch64-linux-android-
PREFIX=$(pwd)/android/$CPU
OPTIMIZE_CFLAGS="-march=$CPU"build_android

编译 FFmpeg Android 平台的 64 位动态库和静态库:

# 修改 build_android_arm64-v8a_clang.sh 可执行权限
chmod +x build_android_arm64-v8a_clang.sh
# 运行编译脚本
./build_android_arm64-v8a_clang.sh

编译成功

编译成功后会在 android 目录下生成对应六个模块的静态库和动态库。

另外,若要编译成 32 位的库,则需修改对应的编译脚本:

#armv7-a
ARCH=arm
CPU=armv7-a
API=21
CC=$TOOLCHAIN/bin/armv7a-linux-androideabi$API-clang
CXX=$TOOLCHAIN/bin/armv7a-linux-androideabi$API-clang++
SYSROOT=$NDK/toolchains/llvm/prebuilt/linux-x86_64/sysroot
CROSS_PREFIX=$TOOLCHAIN/bin/arm-linux-androideabi-
PREFIX=$(pwd)/android/$CPU
OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfp -marm -march=$CPU "

FFmpeg 集成

基于上节编译好的 FFmpeg 静态库,我们在 Android Studio 上进行简单的集成测试。

将 FFmpeg 各个模块的静态库和头文件放置到指定目录下

我们可以按照上图所示,将 FFmpeg 各个模块的静态库和头文件放置到指定目录下,实现一个获取各个模块版本信息的 jni 。

#include <cstdio>
#include <cstring>
#include "util/LogUtil.h"
#include "jni.h"//由于 FFmpeg 库是 C 语言实现的,告诉编译器按照 C 的规则进行编译
extern "C" {
#include <libavcodec/version.h>
#include <libavcodec/avcodec.h>
#include <libavformat/version.h>
#include <libavutil/version.h>
#include <libavfilter/version.h>
#include <libswresample/version.h>
#include <libswscale/version.h>
};#ifdef __cplusplus
extern "C" {
#endif
/** Class:     com_byteflow_learnffmpeg_media_FFMediaPlayer* Method:    native_GetFFmpegVersion* Signature: ()Ljava/lang/String;*/
JNIEXPORT jstring JNICALL Java_com_byteflow_learnffmpeg_media_FFMediaPlayer_native_1GetFFmpegVersion(JNIEnv *env, jclass cls)
{char strBuffer[1024 * 4] = {0};strcat(strBuffer, "libavcodec : ");strcat(strBuffer, AV_STRINGIFY(LIBAVCODEC_VERSION));strcat(strBuffer, "\nlibavformat : ");strcat(strBuffer, AV_STRINGIFY(LIBAVFORMAT_VERSION));strcat(strBuffer, "\nlibavutil : ");strcat(strBuffer, AV_STRINGIFY(LIBAVUTIL_VERSION));strcat(strBuffer, "\nlibavfilter : ");strcat(strBuffer, AV_STRINGIFY(LIBAVFILTER_VERSION));strcat(strBuffer, "\nlibswresample : ");strcat(strBuffer, AV_STRINGIFY(LIBSWRESAMPLE_VERSION));strcat(strBuffer, "\nlibswscale : ");strcat(strBuffer, AV_STRINGIFY(LIBSWSCALE_VERSION));strcat(strBuffer, "\navcodec_configure : \n");strcat(strBuffer, avcodec_configuration());strcat(strBuffer, "\navcodec_license : ");strcat(strBuffer, avcodec_license());LOGCATE("GetFFmpegVersion\n%s", strBuffer);return env->NewStringUTF(strBuffer);
}#ifdef __cplusplus
}
#endif

Java 层的调用逻辑:

package com.byteflow.learnffmpeg.media;public class FFMediaPlayer {static {System.loadLibrary("learn-ffmpeg");}public static String GetFFmpegVersion() {return native_GetFFmpegVersion();}private static native String native_GetFFmpegVersion();
}
//===================  main activity  ===========================
public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);((TextView)findViewById(R.id.text_view)).setText(FFMediaPlayer.GetFFmpegVersion());}
}

CMakeLists.txt 构建脚本:

# Sets the minimum version of CMake required to build the native library.
cmake_minimum_required(VERSION 3.4.1)set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11")set(jnilibs ${CMAKE_SOURCE_DIR}/../jniLibs)
set(libname learn-ffmpeg)include_directories(include${CMAKE_SOURCE_DIR}/util
)link_directories(${jnilibs}/${ANDROID_ABI})file(GLOB src-files${CMAKE_SOURCE_DIR}/*.cpp)add_library( # Sets the name of the library.${libname}# Sets the library as a shared library.SHARED# Provides a relative path to your source file(s).${src-files})set(third-party-libsavformatavcodecavfilterswresampleswscaleavutil)set(native-libsandroidEGLGLESv3OpenSLESlogmz)target_link_libraries( # Specifies the target library.${libname}# Links the target library to the log library# included in the NDK.${log-lib}${third-party-libs}${native-libs})

编译完成后,运行 App 获取 FFmpeg 各个模块版本和编译配置信息。

编译好的FFmpeg下载地址

FFmpeg_4.3.2支持Android的音视频处理库-Android文档类资源-CSDN文库

http://www.yidumall.com/news/107646.html

相关文章:

  • 网站建设 南京qq群排名优化
  • 做网站主图多少钱seo高端培训
  • 网站开发兼容极速字体颜色推荐淘宝运营团队怎么找
  • 网站权重高+做别的关键词销售网站怎么做
  • 打开这个网站网络营销试卷
  • 那个网站做车险分期百度下载安装免费下载
  • 网站建设教程金旭亮公司网络营销实施计划
  • 企业查询经营异常是怎么回事福州短视频seo平台
  • wap端是电脑还是手机无锡seo优化
  • 莆田外贸网站建设推广app赚佣金接单平台
  • 做淘客网站注意事项排名优化软件点击
  • 电脑做h5比较好的网站谷粉搜索谷歌搜索
  • 驻马店河南网站建设电子报刊的传播媒体是什么
  • 网站建设功能套餐表百度资源搜索资源平台
  • 网站建设服务哪家好上海网优化seo公司
  • 遵义网站建设有限公司廊坊百度关键词优化
  • 梧州网站建设制作网站设计模板网站
  • 做app的模板下载网站有哪些内容今日头条淄博新闻
  • 北京网站建设手机app电子商务引流推广公司
  • 安装不了wordpress北京seo经理
  • 进网站后台显示空白爱站网 关键词挖掘
  • 网站制作技术seo网站关键词优化软件
  • 济南网站建设百度seo点击工具
  • 和男人人做的网站找片子有什么好的关键词
  • 赣州黑页设计公司seo外包靠谱
  • 黑色时尚橱柜网站源码长尾关键词排名系统
  • 做网站友汇网网络营销工作内容是什么
  • 开发一个网站要多久站长工具权重查询
  • 删除WordPress底部网站seo专员
  • 上海中小企业服务中心百度seo工作室