首页 > 其他分享 >【Web】emscripten编译ffmpeg

【Web】emscripten编译ffmpeg

时间:2023-02-09 23:13:50浏览次数:31  
标签:Web enable emscripten ffmpeg -- emcc disable include

编译命令:
emconfigure ./configure --cc="emcc" --cxx="em++" --ar="emar" --ranlib=emranlib --prefix=$(pwd)/dist --enable-cross-compile --target-os=none --arch=x86_64 --cpu=generic --disable-ffplay --disable-ffprobe --disable-asm --disable-doc --disable-devices --disable-indevs --disable-outdevs --disable-network --disable-w32threads --disable-pthreads --enable-ffmpeg --enable-static --disable-shared --enable-decoder=pcm_mulaw --enable-decoder=pcm_alaw --enable-decoder=adpcm_ima_smjpeg --enable-decoder=aac --enable-decoder=hevc --enable-decoder=h264 --enable-protocol=file --disable-stripping
测试CM艾克Lists.txt
# CMakeList.txt: EmccVideo 的 CMake 项目,在此处包括源代码并定义
# 项目特定的逻辑。
#
cmake_minimum_required (VERSION 3.8)

set(ProgramName "EmccVideo.js")
project (${ProgramName})


# 指定使用的编译器
 set(CMAKE_C_COMPILER "/home/ubuntu/Downloads/emsdk/upstream/emscripten/emcc")
 set(CMAKE_CXX_COMPILER "/home/ubuntu/Downloads/emsdk/upstream/emscripten/emcc")


 set(ffmpeg_dir "/home/ubuntu/emcc_ffmpeg_2")

include_directories(${ffmpeg_dir}/include)
link_directories(${ffmpeg_dir}/lib) 

link_libraries(libavcodec.a libavutil.a libswresample.a libswscale.a)

# 将源代码添加到此项目的可执行文件。
add_executable (${ProgramName}  "emcc/emcc_define.h" "test/test1.cpp" "main.cpp" "video/real_video/real_video.cpp" "ffmpeg/FFMPEG_Common.h" "h264/h264decoder.h" "h264/h264decoder.cpp")


if (CMAKE_HOST_UNIX)
	message("current platform: Linux")
elseif (CMAKE_HOST_WIN32)
	message("current platform: Windows")
else()
	message("current platform: unknown")
endif()


if (CMAKE_VERSION VERSION_GREATER 3.12)
  set_property(TARGET EmccVideo PROPERTY CXX_STANDARD 20)
endif()

# TODO: 如有需要,请添加测试并安装目标。

测试的html
<!doctype html>

<html>
<head>
    <meta charset="utf-8">
    <title>Emscripten:Export1</title>
</head>
<body>
    <script>
        Module = {};
        Module.onRuntimeInitialized = function() {
        console.log(Module._show_me_the_answer());
        console.log(Module._add(12, 1.0));
        Module._print_ffmpeg_avcodec_configuration();
        }
    </script>
    <script src="./build/EmccVideo.js"></script>
</body>
</html>

测试文件
  1. emcc_define.h
#ifndef  EMCC_DEFINE_H

#ifndef EM_PORT_API

#	if defined(__EMSCRIPTEN__)
#		include <emscripten.h>
#		if defined(__cplusplus)
#			define EM_PORT_API(rettype) extern "C" rettype EMSCRIPTEN_KEEPALIVE
#		else
#			define EM_PORT_API(rettype) rettype EMSCRIPTEN_KEEPALIVE
#		endif
#	else
#		if defined(__cplusplus)
#			define EM_PORT_API(rettype) extern "C" rettype
#		else
#			define EM_PORT_API(rettype) rettype
#		endif
#	endif
#endif

#endif // ! EMCC_DEFINE_H
  1. FFMPEG_Common.h
extern "C" {
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
#include <libavformat/version.h>
#include <libavutil/avutil.h>
#include <libavutil/frame.h>
#include <libavutil/imgutils.h>
#include <libswscale/swscale.h>
}

#endif // FFMPEG_COMMON_H
  1. test.cpp
#include "../../emcc/emcc_define.h"
#include "FFMPEG_Common.h"
#include <stdio.h>

EM_PORT_API(int)
print_ffmpeg_avcodec_configuration()
{
	printf(avcodec_configuration());
	return 0;
}
注意事项
  1. 加载ffmpeg的头文件时,需要添加如下标识,否则链接库时找不到对应符号。
extern "C"
{}

标签:Web,enable,emscripten,ffmpeg,--,emcc,disable,include
From: https://www.cnblogs.com/ganshang/p/17107442.html

相关文章

  • 解决PyQtWebEngine安装缓慢的问题
    在使用PyQtWebEngine时候,发现pyqt5由于版本高而没有PyQtWebEngine。于是安装但是在使用清华源的时候,发现下载非常慢。我通过各种方式进行测试均需要9小时才能下载。原因未......
  • web.xml文件简述
    tomcat的conf中:是全局配置,配置公共信息。Web项目中:是局部配置,只针对本项目有效。加载顺序:ServletContext->context-param->listener->filter->se......
  • python bottle实现web服务
    server:当调用http://xxx.xxx.xxx.xxx:4500/push时就会触发get_push函数frombottleimportrun,route,requestimportloggingimporttimeimportosfilename=s......
  • 用变量生成数据库web sql database 及操作需要JSON.stringfy/parse来操作
    用变量生成数据库web sql database 及操作需要JSON.stringfy/parse来操作:var newstr = 'checkbox0,input1,textarea2,option3,date4,flag'var newdatastr = ......
  • celery僵死导致jumpserver提示 连接WebSocket失败
    celery僵死导致jumpserver提示连接WebSocket失败Celery的任务监控位于堡垒机”作业中心“下的”任务监控“中,点击打开新的页面如下图所示刷新页面这里的status状态一......
  • flask web 项目7 web基本配置
    #配置文件config.py#扩展文件 目的是为了解决循环引用exts.pyfromflask_sqlalchemyimportSQLAlchemydb=SQLAlchemy()#在models.py中fromextsimportdbcla......
  • Web3.0 - 以太坊
    1.比特币和以太坊比特币和以太坊(准确说是以太币)是两种最主要的加密货币。比特币的最小计量单位是聪(Satoshi)【中本聪SatoshiNakamoto】以太币的最小单位是Wei,这个单......
  • webview2
    webview2简介MicrosoftEdgeWebView2简介搭建开发环境webview2支持的平台还是比较多的,本文对wpf框架进行说明。简单来说:安装Edge浏览器安装webview2(win11都默认......
  • webpack(性能优化三)
    如何做bable缓存和文件资源缓存(一)bable缓存答:因为bable要对我们写的js代码做编译处理,编译成一种浏览器能识别的语法,即所谓的js兼容性处理。在编译过程中,假设有100个js模......
  • EAS_web中js里常用功能
    1.获取前页面要提交或保存的对象vareditModel=waf.toJSONString(_self.getCurrentModel());2.获取当前操作行的rowidvarrowid=waf("#entries").wafGrid('getSel......