iOS 中集成 FFmpeg

2023-11-03

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。它提供了录制、转换以及流化音视频的完整解决方案

ffmpeg的代码是包括两部分的,一部分是library,一部分是tool。api都是在library里面,如果直接调api来操作视频的话,就需要写c或者c++了。另一部分是tool,使用的是命令行,则不需要自己去编码来实现视频操作的流程。

从编译FFmpeg ——> 到使用FFmpeg ——> 注意事项

1、编译FFmpeg

  1. 编译FFmpeg所需的脚本文件gas-preprocessor

  • 下载之后,将 gas-preprocessor.pl 文件复制到 /usr/sbin/ 目录下,如果该目录无法修改,那么可将文件复制到 /usr/local/bin/ 目录下。

  • 为 gas-preprocessor.pl 文件开启可执行权限,在终端中进行如下命令:

chmod 777 /usr/sbin/gas-preprocessor.pl
或者
chmod 777 /usr/local/bin/gas-preprocessor.pl
  1. yasm 1.2.0 yasm 是一个完全重写的 NASM 汇编。它支持x86和AMD64指令集。 可以使用homebrew来安装,如果没有install yasm,在执行./build-ffmpeg.sh命令的时候,会自动检测并安装。

brew install yasm
  1. 编译脚本

    FFmpeg-iOS-build-script

    在这个文件中,我们可以对要进行编译的FFmpeg进行一系列的设置。

    FFmpeg-iOS-build-script

  • 设置FFmpeg的版本

FF_VERSION="4.0.3"
  • 设置所要支持的架构

ARCHS="arm64 armv7 x86_64 i386"
  • 设置所需要的FFmpeg功能配置

禁用一些不必要的功能,可以有效地减小最终库文件的大小
CONFIGURE_FLAGS="--enable-cross-compile --disable-debug --disable-programs \
                 --disable-doc --enable-pic"
其中 --disable-cross-compile 禁止交叉编译
其中 --enable-cross-compile 支持交叉编译
  • 进入脚本所在文件夹目录,执行脚本

./build-ffmpeg.sh

执行结果

执行结果

2、将FFmpeg导入到项目中

将FFmpeg-iOS添加到项目中

FFmpeg-iOS lib文件

  • 添加依赖库

libz.tbd libbz2.tbd libiconv.tbd AudioToolbox.framework CoreMedia.framework VideoToolbox.framework

【学习地址】:FFmpeg/WebRTC/RTMP/NDK/Android音视频流媒体高级开发

【文章福利】:免费领取更多音视频学习资料包、大厂面试题、技术视频和学习路线图,资料包括(C/C++,Linux,FFmpeg webRTC rtmp hls rtsp ffplay srs 等等)有需要的可以点击1079654574加群领取哦~

3、FFmpeg命令行功能

*相关的命令行网络比较多,这里搜集整理了一些,整理备用,同时感谢共享*

3.1 ffmpeg 命令集举例

1.获取视频的信息

ffmpeg -i video.avi 

2.将图片序列合成视频

ffmpeg -f image2 -i image%d.jpg video.mpg 

上面的命令会把当前目录下的图片(名字如:image1.jpg. image2.jpg. 等…)合并成video.mpg

3.将视频分解成图片序列

ffmpeg -i video.mpg image%d.jpg 

上面的命令会生成image1.jpg. image2.jpg. … 支持的图片格式有:PGM. PPM. PAM. PGMYUV. JPEG. GIF. PNG. TIFF. SGI

4.为视频重新编码以适合在iPod/iPhone上播放

ffmpeg -i source_video.avi input -acodec aac -ab 128kb -vcodec mpeg4 -b 1200kb -mbd 2 -flags +4mv+trell -aic 2 -cmp 2 -subcmp 2 -s 320x180 -title X final_video.mp4 

说明:

  • 源视频:source_video.avi

  • 音频编码:aac

  • 音频位率:128kb/s

  • 视频编码:mpeg4

  • 视频位率:1200kb/s

  • 视频尺寸:320 X 180

  • 生成的视频:final_video.mp4

5.为视频重新编码以适合在PSP上播放

ffmpeg -i source_video.avi -b 300 -s 320x240 -vcodec xvid -ab 32 -ar 24000 -acodec aac final_video.mp4 

说明:

  • 源视频:source_video.avi

  • 音频编码:aac

  • 音频位率:32kb/s

  • 视频编码:xvid

  • 视频位率:1200kb/s

  • 视频尺寸:320 X 180

  • 生成的视频:final_video.mp4

6.从视频抽出声音.并存为Mp3

ffmpeg -i source_video.avi -vn -ar 44100 -ac 2 -ab 192 -f mp3 sound.mp3 

说明:

  • 源视频:source_video.avi

  • 音频位率:192kb/s

  • 输出格式:mp3

  • 生成的声音:sound.mp3

7.将wav文件转成Mp3

ffmpeg -i son_origine.avi -vn -ar 44100 -ac 2 -ab 192 -f mp3 son_final.mp3 

8.将.avi视频转成.mpg

ffmpeg -i video_origine.avi video_finale.mpg 

9.将.mpg转成.avi

ffmpeg -i video_origine.mpg video_finale.avi 

10.将.avi转成gif动画(未压缩)

ffmpeg -i video_origine.avi gif_anime.gif 

11.合成视频和音频

ffmpeg -i son.wav -i video_origine.avi video_finale.mpg 

12.将.avi转成.flv

ffmpeg -i video_origine.avi -ab 56 -ar 44100 -b 200 -r 15 -s 320x240 -f flv video_finale.flv 

13.将.avi转成dv

ffmpeg -i video_origine.avi -s pal -r pal -aspect 4:3 -ar 48000 -ac 2 video_finale.dv 

或者:

ffmpeg -i video_origine.avi -target pal-dv video_finale.dv 

14.将.avi压缩成divx

ffmpeg -i video_origine.avi -s 320x240 -vcodec msmpeg4v2 video_finale.avi 

15.将Ogg Theora压缩成Mpeg dvd

ffmpeg -i film_sortie_cinelerra.ogm -s 720x576 -vcodec mpeg2video -acodec mp3 film_terminate.mpg 

16.将.avi压缩成SVCD mpeg2 NTSC格式:

ffmpeg -i video_origine.avi -target ntsc-svcd video_finale.mpg 

PAL格式:

ffmpeg -i video_origine.avi -target pal-svcd video_finale.mpg 

17.将.avi压缩成VCD mpeg2 NTSC格式:

ffmpeg -i video_origine.avi -target ntsc-vcd video_finale.mpg 

PAL格式:

ffmpeg -i video_origine.avi -target pal-vcd video_finale.mpg 

18.多通道编码

ffmpeg -i fichierentree -pass 2 -passlogfile ffmpeg2pass fichiersortie-2 

19.从flv提取mp3

ffmpeg -i source.flv -ab 128k dest.mp3

3.2 常用点:

对视频进行调速

ffmpeg -t 3.0 -i /Users/mdm/Desktop/water.mp4 -an -r 25 -filter:v setpts=0.5*PTS -t 6.0 -b:v 1024k -y /Users/mdm/Desktop/newWater.mp4
  • 注意: 该方法中,假设调为x倍速,则setpts=1.0 / x*PTS。 该调速方法,最多支持在[0.25, 4]区间内调整。

其中,一些常见的参数配置如下:

-f 强制指定编码格式
​
-i 输出源
​
-t 指定输入输出时长
​
-r 指定帧率,即1S内的帧数
​
-threads 指定线程数
​
-c:v 指定视频的编码格式
​
-ss 指定持续时长
​
-b:v 指定比特率
​
-s 指定分辨率
​
-y 覆盖输出
​
-filter 指定过滤器
​
-vf 指定视频过滤器
​
-an 指定去除对音频的影响

4、FFmpeg在iOS开发上的使用

  1. 将Appdelegate.m后缀改为.mm,开启混编模式。 command+B,如果没有报错,则表明编译成功。

  2. 要对视频进行操作,还是需要手动写很多代码去调用api,工作量较大,自然不如直接写命令行方便。这时候就要添加源码中的添加源码中的tools: *在iOS上集成FFmpeg的命令行工具fftools是个繁琐的过程,各个版本之间还有差异,需要导入的文件不一样.*

  • 从 ffmpeg-4.0.3 中找到以下文件:

    fftools文件

  • 从 scratch 文件夹中找到

config.h
  • 修改以下文件:

cmdutils.c 文件中,注释
#include "compat/va_copy.h"
#include "libavdevice/avdevice.h"
#include "libavresample/avresample.h"
#include "libpostproc/postprocess.h"
#include "libavutil/libm.h"
​
PRINT_LIB_INFO(avdevice,   AVDEVICE,   flags, level);
PRINT_LIB_INFO(avresample, AVRESAMPLE, flags, level);
PRINT_LIB_INFO(postproc,   POSTPROC,   flags, level);
ffmpeg_filter.c 文件中,注释
#include "libavresample/avresample.h"
ffmpeg.c 文件中,注释
#include "libavdevice/avdevice.h"
#include "libavutil/internal.h"
#include "libavutil/libm.h"
#include "libavformat/os_support.h"
​
ff_dlog(NULL, "force_key_frame: n:%f n_forced:%f prev_forced_n:%f t:%f prev_forced_t:%f -> res:%f\n",
                    ost->forced_keyframes_expr_const_values[FKF_N],
                    ost->forced_keyframes_expr_const_values[FKF_N_FORCED],
                    ost->forced_keyframes_expr_const_values[FKF_PREV_FORCED_N],
                    ost->forced_keyframes_expr_const_values[FKF_T],
                    ost->forced_keyframes_expr_const_values[FKF_PREV_FORCED_T],
                    res);
ffmpeg_opt.c 文件中,注释
{ "videotoolbox_pixfmt", HAS_ARG | OPT_STRING | OPT_EXPERT, { &videotoolbox_pixfmt}, "" },

为了避免两个main函数问题:

ffmpeg.h 文件下增加函数声明:
int ffmpeg_main(int argc, char **argv);
ffmpeg.c 文件中:
main函数修改为ffmpeg_main;主要是为了避免两个main函数存在

修改执行一次 ffmpeg_main 方法后 App 退出问题:

cmdutils.h 中,将void exit_program(int ret) av_noreturn;改为void exit_program(int ret);
cmdutils.c 中,
int exit_program(int ret)
{
    if (program_exit)
        program_exit(ret);
​
//    exit(ret);
    return ret;
}

修改多次调用 ffmpeg_main 时,访问空指针的问题:

ffmpeg.c 中
在 ffmpeg_cleanup 方法中
term_exit();
改为:
nb_filtergraphs = 0;
nb_output_files = 0;
nb_output_streams = 0;
nb_input_files = 0;
nb_input_streams = 0;
term_exit();

然后剩下的缺什么.h文件,就在 ffmpeg-4.0.3找到什么文件,然后加到include文件夹下对应的路径 command+B,编译成功!

3.iOS调用命令行将视频转换为一组图片 添加头文件:#import "ffmpeg.h" 调用命令行

- (IBAction)converterBtnAction:(id)sender {
    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        NSString *moviePath = [[NSBundle mainBundle] pathForResource:@"movie" ofType:@"mp4"];
        NSString *imageName = @"image%d.jpg";
        NSString *imagesPath = [NSString stringWithFormat:@"%@/%@", [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject], imageName];
        
        int numberOfArgs = 6;
        char** arguments = calloc(numberOfArgs, sizeof(char*));
        
        arguments[0] = "ffmpeg";
        arguments[1] = "-i";
        arguments[2] = (char *)[moviePath UTF8String];
        arguments[3] = "-r";
        arguments[4] = "20";
        arguments[5] = (char *)[imagesPath UTF8String];
        
        int result = ffmpeg_main(numberOfArgs, arguments);
        NSLog(@"----------- %d", result);
        dispatch_async(dispatch_get_main_queue(), ^{
            [self presentViewController:[[ResultViewController alloc] init] animated:YES completion:^{
                
            }];
        });
        
    });
    
}

4.运行效果

2019-01-14 13_38_42.gif

运行效果

5.编译报错(过程中遇到的两个报错的地方,及解决办法)

'libavcodec/avcodec.h' file not found

解决办法

添加header search paths

屏幕快照 2019-01-11 下午5.05.33.png

加入ffmpeg_hw.c文件!

5、注意事项

  1. ffmpeg 是需要对实体文件进行处理的,所以无论是输入源还是输出源,都必须对应实体文件,同时在 ffmpeg 的命令中,需指定路径。对于输出源来说,如果不指定 -y,即覆盖输出,那么如果输出源文件已经存在,ffmpeg 命令会执行失败。

  2. ffmpeg 命令需要阻塞线程来处理,所以为了避免主线程的阻塞,建议放入子线程进行处理。

  3. ffmpeg 的输入和输出需要知道明确的编码格式:输入编码可以通过解码来获取到,但是输入编码如果指定的话,就必须与实体文件编码一致,否则解码会出错;输出源同样需要指定编码格式,如果没有明确指定输出的编码格式,那么需要在输出路径中指定后缀,否则会出现编码出错。

  4. 如果需要对 GIF 进行调速的话,直接通过指定 GIF 的 -r 来生成新的 GIF 是不合适的,因为 GIF 的帧间隔可以不一致,而通过设置 -r,就将所有帧间隔设置为一致,这样生成的效果与理想效果不一致。可通过将 GIF 转为视频,然后调整视频的速度生成新的视频,进而再生成新 GIF 来达到目的。

  5. 由于 ffmpeg 的命令行工具中,有许多参数为全局变量,所以为了保证使用的正确,我们需要保证在一个时间点,只有一次 ffmpeg_main() 方法的调用。

  6. 在使用全局调色板的时候,需要注意与水印的搭配处理。如果全局调色板是在添加水印之前就已经生成,那么添加水印之后,使用该全局调色板生成 GIF,水印会被全局调色板校正,从而在 GIF 上显示不出来。

6、各模块的功能

libavformat:用于各种音视频封装格式的生成和解析;

libavcodec:用于各种类型声音、图像编解码;

libavutil:包含一些公共的工具函数;

libswscale:用于视频场景比例缩放、色彩映射转换;

libpostproc:用于后期效果处理;

ffmpeg:该项目提供的一个工具,可用于格式转换、解码或电视卡即时编码等;

ffsever:一个 HTTP 多媒体即时广播串流服务器;

ffplay:是一个简单的播放器,使用ffmpeg 库解析和解码,通过SDL显示;

7、相关链接

iOS开发中集成FFmpeg以及相关注意事项 IOS FFMPEG的使用

原文链接:iOS 中集成 FFmpeg - 简书

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iOS 中集成 FFmpeg 的相关文章

  • iOS 7 上 Safari 浏览器的用户代理

    我只想在带有 Safari 浏览器的 iPhone 和 iPod 中打开我的网站 对于 Chrome Dolphin 等任何其他浏览器 它不应该打开 但目前我从几乎所有设备获得相同的用户代理 对于Safari User Agent Stri
  • TableViewController 的 viewDidLoad 未触发

    我一直在关注这个tutorial http www appcoda com ios programming sidebar navigation menu 有一个滑出式菜单 我添加了一个 TableViewController 它将显示文章
  • 在实例化对象之前是否可以检查故事板中是否存在标识符?

    在我的代码中我有这一行 但我想知道是否有办法检查是否 一些控制器 在我将它与 一起使用之前就存在实例化ViewControllerWithIdentifier 方法 如果标识符不存在 则应用程序崩溃 如果没有好的方法 这并不是一个大问题 我
  • 使用 MapKit 的地形和卫星视图

    我是 Mapkit View 的新手 当我给出没有目的地的纬度和经度时 我想显示 MapKit中是否可以通过地形 卫星视图来显示地图 有教程链接吗 我看过一些访问 Google 地图 API html 文件 的示例 有必要吗 或者您可以通过
  • UIView 圆角 - Swift 2.0?

    我会尝试将一些项目更新到 Swift 2 0 我有一个视图 左上角有一个圆角 在 Swift 没有警告 没有错误 只是没有圆角 这就是它在 Swift let maskPath UIBezierPath roundedRect conten
  • 如何在 Swift 中“生成”闭包类型别名?

    为了使我的代码更易于阅读 我在 Swift 中对各种类型的闭包使用类型别名 我有以下基本的闭包集 public typealias FailureClosure error NSError gt Void public typealias
  • 修改 SCNParticleEventBlock 中的 SCNParticleSystem 颜色不起作用

    鉴于提供的示例代码handle forProperties handler https developer apple com documentation scenekit scnparticlesystem 1523251 handle
  • Swift - 我可能已经删除了 Apple Swift Packages 集合

    我对 swift 和 XCode 很陌生 昨天我正在开发一个项目 想尝试一下某人制作的自定义日期选择器 所以我转到 添加包 并粘贴 GitHub 链接并添加它 我已经在我的项目中添加了一个名为 KeychainAccess 的不同包 方式
  • iOS 9.3 中的 KVO 被破坏

    这可能是 iOS 9 3 发行版 中的一个可怕的错误 添加单个观察者时 NSUserDefaults standardUserDefaults 我注意到响应方法 observeValueForKeyPath ofObject change
  • CSS 安全区域属性在 iPhone X 上不起作用

    就我而言 我正在 iPhone X 上运行一个 Web 应用程序 我尝试在顶部添加一个填充 以使用 Webkit 的安全区域 css 属性将我的身体推到安全区域padding top constant safe area inset top
  • iOS9 Sprite 套件问题

    一切都很顺利 直到我升级到 xCode 7 和 iOS 9 我当前的项目是一个 2D 平台游戏 自从升级以来 我就陷入了我们许多人似乎都面临的精灵套件错误 错误的困扰 我的问题是 每次游戏在模拟器或设备上运行时 所有精灵的 zPositio
  • 如何在 Alamofire 中使用“responseDecodable”方法?

    I have been trying to use responseDecodable method from Alamofire but I m getting Generic parameter T could not be infer
  • 核心数据executeFetchRequest消耗大量内存

    我正在核心数据数据库中插入 cca 100 000 条记录 数据库包含 3 个实体 球员 俱乐部 球员俱乐部 实体之间存在关系 玩家 gt 玩家俱乐部俱乐部 在 PlayerClub 中插入时 我注意到插入大约 50 000 条记录后会消耗
  • 使用 HTTP NSURL 创建 AVAsset

    我正在尝试合并两个NSURLs包含视频参考 其中一个 URL 指向 AWS 上的视频 另一个 URL 指向本地存储的视频 我的导出代码有效 因为我已经尝试使用两个本地视频 但每当我尝试合并 HTTP url 和本地 url 时 我都会收到此
  • 如何在禁用状态下更改 UIButton 图像 alpha?

    我有一个带有图像的 UIButton 在其禁用状态下 该图像应具有 0 3 alpha UIButton button UIButton buttonWithType UIButtonTypeCustom UIImage arrowImag
  • 如何将 RGB 值转换为十六进制字符串 iOS swift

    我想将 RGB 值转换为十六进制字符串 我将十六进制转换为 RGB 如下所示 但反之亦然 func hexStringToRGB hexString String gt red CGFloat green CGFloat blue CGFl
  • Swift 字典映射 - 闭包中的 init

    我有 Swift 字典 private var params String AnyObject 这包含查询项目 例如 lat 40 lon 100 我想将这本词典映射到NSURLQueryItem大批 我想让它 迅速 params map
  • FIRApp 链接器错误 [“_OBJC_CLASS_$_FIRApp”]

    我已经搜索过 SO 和 Google 但找不到有效的答案 我已经在多个项目中使用了新的 Firebase Cocoapod 但是现在 当将其添加到不同的项目时 我收到以下错误 我正在使用 Xcode 7 3 1 和 cocoapods 1
  • 辅助功能标识符在 iOS 模拟器的辅助功能检查器中不可见

    我想使用辅助功能检查器来验证在模拟器 iOS 9 2 中运行的应用程序中的所有辅助功能标识符 辅助功能检查器能够返回多个辅助功能字段 但不能返回标识符 知道为什么以及如何我能看到它们吗 实际上有一种方法 克里斯 普林斯 Chris Prin
  • 初始化Object中的空字符串?

    有人使用以下方法来初始化 NSstring NSString astring NSString alloc init 我想知道为什么不直接使用 NSString atring nil or NSString astring 没有semant

随机推荐

  • spark题目整理

    1 driver的功能是什么 1 一个Spark作业运行时包括一个Driver进程 也是作业的主进程 具有main函数和SparkContext的实例 是程序的人口点 2 功能 负责向集群申请资源 向master注册信息 负责了作业的调度
  • Gamemaker studio2经验(3)——昼夜更替效果实现

    问题概述 在一些知名引擎 如unity godot cocos等 中 天空盒概念的引入使得场景中的天空丰富多彩 但是gm就吃了这个大亏 由于动态天空制作麻烦 没有对口的天空盒系统 导致很少有开发者在gm中制作昼夜交替效果 昨天因为被千字大论
  • 新唐NUC980使用记录:U-Boot & Linux 编译与烧录(基于SD1位置SD卡)

    文章目录 目的 SD卡分区 U Boot编译 U Boot环境变量 Linux编译 默认设置 使用SD卡剩余分区 使用SD卡分区存放rootfs 制作系统镜像 总结 目的 这篇文章中将测试在 NUC980 中运行Linux系统 基于SD1位
  • 20230504 - 二叉树3

    1 104 二叉树的最大深度 class solution 递归法 public int maxDepth TreeNode root if root null return 0 int leftDepth maxDepth root le
  • 查看当前用户名称:whoami命令

    没什么可讲的 就是显示当前用户名称 效果同 id un 命令 转载于 https www cnblogs com Stong p 6812866 html
  • 医学图像格式转换 -- .dcm转为.nii.gz

    注 代码主要根据 dcm2nii 多张dcm 文件转换成nii等其他格式的存储 进行函数整合 感谢原作者 coding utf 8 import SimpleITK as sitk def dcm2nii dcms path nii pat
  • oracle改表结构非空字段类型,Oracle修改表结构语句

    1 修改表的字段 修改一个列的数据类型 一般限于修改长度 修改为一个不同类型时有诸多限制 语法 ALTER TABLE 表名 MODIFY 列名 数据类型 eg1 alter table skate test modify author n
  • 解决“'export' is only available in ES6 (use 'esversion: 6')”问题

    问题 export is only available in ES6 use esversion 6 截图 把鼠标移上去就会有这个提示 解决方法 在顶部加入这句话 jshint esversion 6 如图所示 没有红色下滑线啦 完美解决
  • Discuz!教程之后台隔段时间需要重新登录的解决方法

    用Discuz 的站长们都有一个很苦恼的问题 就是后台登录页面过一段时间再去操作就要重新登录 非常不方便 为了减少站长们的工作量 本文给站长们介绍放宽disduz后台登录默认限制方法 一 取消检测管理员ip 1 用ftp工具连接您的虚拟主机
  • 一个简单通用的logback配置文件

    首先pom依赖于ch qos logback基于slf4j
  • Spark SQL架构工作原理及流程解析

    前言 Spark SQL架构工作原理及流程解析 spark sql从shark发展而来 Shark为了实现Hive兼容 在HQL方面重用了Hive中HQL的解析 逻辑执行计划翻译 执行计划优化等逻辑 Spark SQL兼容Hive 因为Sp
  • DFRobot离线语音识别模块真实测评

    春节前在DF商城到上架两款新品 分别是离线语音识别模块 离线语音合成模块 它们和二哈识图一起组成了 人工智能三剑客 其中语音识别模块有现货 语音合成模块接受预定 心痒痒想在春节尝鲜 看商城公告春节发货截止日期2月7日 于是6日上午匆匆下单
  • 学习笔记(一):Java中Stream的基本用法和相关API详解

    目录 引言 一 什么是Stream 二 Stream有什么用 三 Stream的分类 四 常用的Stream创建方法 1 Stream of 方法 2 Arrays stream 3 集合对象中的stream 方法 五 Stream的常见操
  • opencv缩小图片的方法

    scaling factor 0 4 img scaled cv2 resize img None fx scaling factor fy scaling factor interpolation cv2 INTER LINEAR 双线性
  • 带你了解『百度智能云发布云智一体的AI开发全栈模式』

    在 云智一体 的独家优势下 百度智能云为企业的 AI 开发打开了更多可能 3月27日 百度智能云2021云智技术论坛首场活动在京举行 重磅发布 云智一体的 AI 开发全栈模式 基于百度全球领先的 AI 技术和生态优势 AI 原生的云基础设施
  • 如何判断一个以太坊地址是不是合约地址?

    转载自https blog csdn net shebao3333 article details 80043317 使用web3 js web3 eth getCode 方法返回指定地址上代码的16进制字符串 由于普通账户地址处没有代码
  • osgcuda

    osgcuda 转 原文 http blog sina com cn s blog df1b276a0101inbi html osgCompute是对代码的并行流处理器执行的抽象基库 库连接到OSG的 OSG 因此它可以被包括在场景图 它
  • ReadTimeoutError: HTTPSConnectionPool(host=‘cdn-lfs.huggingface.co‘, port=443)

    问题 最近遇到需要从hugging face下载并导入预训练模型SimCSE 然后进行计算文本相似度 代码如下 from transformers import AutoModel AutoTokenizer import os os en
  • python爬取京东商品评论(可实现翻页)

    上一篇文章 我们已经实现抓取商品第一页的功能 下面来实现翻页的功能 首先通过类定义三个方法 初始化方法 解析一页的方法 翻页爬取 class jd comment object def init self pass def page sel
  • iOS 中集成 FFmpeg

    FFmpeg是一套可以用来记录 转换数字音频 视频 并能将其转化为流的开源计算机程序 它提供了录制 转换以及流化音视频的完整解决方案 ffmpeg的代码是包括两部分的 一部分是library 一部分是tool api都是在library里面