Django4.1 Web项目开发,simpleui 后台主题框架安装以及使用

1. 简介 simpleui 是使用Element-UI + Vue实现的,基于django后台管理的主题 漂亮、简洁增强django内置的后台管理界面 内置多种主题可以选择 pip 快速安装,配置简单 多标签页面,使用更方便 2. 创建项目环境 # 创建python虚拟环境 $ python -m venv photoenv # 进入虚拟环境 $ source photoenv/bin/activate # 安装 Django4 $ pip install django # 安装 simpleui $ pip install django-simpleui 3. 创建项目 # 创建项目 $ django-admin startproject AIPhoto # 创建子应用 $ django-admin startapp AIPhotoApp # 测试网站运行 $ cd AIPhoto $ python manage.py runserver 用浏览器打开 http://127.0.0.1:8000/ 可以看到Django的页面 4. 项目配置 simpleui 4.1 使用编辑器编辑 settings.

ffmpeg 视频合成,字幕合成等常规功能介绍

视频增加多个字幕 ffmpeg -i "input.mp4" -i zhcn.srt -i eng.srt -map 0:v -map 0:a -map 0:s -map 1:s -c:v copy -c:a copy -c:s copy -metadata:s:s:0 language=chn -metadata:s:s:1 language=eng "output.mp4" 其中,input.mp4是输入视频,zhcn.srt是中文字幕srt文件,eng.srt是英文字幕srt文件,output.mp4是输出视频。 解释: -i 是输入文件。三个文件都是用-i 输入的。 -map是轨道参数,如果只有一个字幕,就不需要这个参数 -map 0:v 表示第一个文件输入视频轨道 -map 0:a 表示第二个轨道是第一个文件输入的音频轨道 -map 0:s 建立第三个轨道 -map 1:s 建立第四个轨道 -c:v copy 表示复制视频流,不需要重新编码,速度更快。 -c:a copy 复制音频流,不需要重新编码,速度更快 -c:s copy 复制字幕 -c:s mov_text 字幕轨道采用mov_text的格式。这种格式是直接将srt或者vtt文件添加到视频文件中,但是不是直接渲染到视频中。这样的好处是添加速度快,缺点是如果播放器不支持就不会显示字幕(手机上qq自带的和windows player之类的都不能正确显示),但是一般的PC播放器、手机上的mplayer、vlc、potplayer之类的主流播放器都可以显示。如果要做到视频里面去就要用其他参数,还要设置好字体、字号、颜色等等。 metadata:s:s:0 language=chn 这是设置第一条字幕的参数,如设置语言为中文。请注意,这个语言不能写错或自定义,只能设置成固定的缩写。如将这个写成zh-CN显示成 数字1之类的。 -metadata:s:s:1 language=eng 第二条字幕的语言设置为英文

常用的通配符与字符类

本文就介绍一些常用的通配符与字符类 一:常用通配符 先介绍几个常用的通配符模式 通配符也叫做文件名替换,允许用户根据字符模式选择文件名 常用通配符 模式 匹配项 * 匹配任意多个字符,包含0个和1个 ? 匹配任意单个字符,不包含0个 [chareacters] 匹配任意一个属于字符集中的字符 [!chareacters] 匹配任意一个不属于字符集中的字符 [:class:] 匹配任意一个属于指定字符类中的字符 常用字符类 模式 匹配项 [:alnum:] 匹配任意一个字母或数字 [:alpha:] 匹配任意一个字母 [:digit:] 匹配任意一个数字 [:lower:] 匹配任意一个小写字母 [:upper:] 匹配任意一个大写字母 示例: 模式 匹配项 * 所有文件 g* 以g开头的任意文件 b*.txt 以b开头,中间任意多字符,以.txt结尾的任意文件 Data??? 以Data开头,后面跟3个字符的任意文件 [abc]* 以a,b,c中任意一个字母开头的任意文件 BACKUP.[0-9][0-9][0-9] 以BACKUP.开头,后面紧跟3个数字的任意文件 [:upper:]* 以大写字母开头的任意文件 [![:digit:]]* 不以数字开头的任意文件 *[[:lower:]123] 以小写字母和数字1,2,3中的任意一个数字结尾的任意文件

Centos8 更换国内阿里源

使用 centos-vault 作为停止支持的 CentOS8 的 yum源, 国内有其他的 centos 镜像站点, 如: 阿里源,清华源、中科大等, 这里使用阿里源 更换源 cd /etc/yum.repos.d # 先进行备份: mv CentOS-Base.repo CentOS-Base.repo.bak 更换 CentOS-Base.repo 为 阿里云的 CentOS-Base.repo wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo 更新yum缓存 yum clean all yum makecache

Linux常用命令之文件查看

在类UNIX系统中,有个普遍的观念是"所有的东西都是一个文件"。 作为Linux初学者,查看文件的内容,类型是很常用的操作。 本文就介绍几个常用的命令。 一:file命令确定文件类型 file命令会打印出文件内容的简短说明。 [root@localhost Downloads]# file test.jpg test.jpg: JPEG image data, JFIF standard 1.01 二:less命令查看文件内容 less命令是一种可以查看文本文件的内容的程序。 [root@localhost Downloads]# less test.txt 执行后会在终端显示文件内容。 如果文件不只一页,可以上下滚动文件, q 键可以退出less程序

Zabbix 安装部署

zabbix-web 配置 server { listen 8051; server_name 127.0.0.1; ssl on; ssl_certificate /etc/nginx/ssl/3151xxx.pem; ssl_certificate_key /etc/nginx/ssl/3151xxx.key; ssl_prefer_server_ciphers on; if ($http_user_agent ~* "(Googlebot|Baiduspider|Sosospider)" ) { return 403; } root /usr/share/zabbix; index index.php; location ~ ".(js|ico|gif|jpg|png|css)$" { expires 1w; } location / { fastcgi_ignore_client_abort on; fastcgi_pass php-fpm; fastcgi_index index.php; include fastcgi.conf; index index.php; if (!-e $request_filename) { rewrite . /index.php last; break; } } }

阿里云盘命令行工具,用 Python开发下载资源的脚本

命令行下载阿里云盘资源的 Python 脚本程序 当有大量的文件需要从阿里云盘下载到Linux服务器上面的时候,用客户端不是很方便,可以使用脚本来放在服务器上面下载资源 运行环境 python3.9 Macos/linux/windows 安装依赖的库 [user@serv]$ python3.9 -m pip install aligo 查看命令使用帮助 [user@serv]$ ./aliyun.py -h usage: aliyun.py [-h] [--download] [--file_type FILE_TYPE] [--file_path FILE_PATH] [--download_folder DOWNLOAD_FOLDER] [--depth DEPTH] optional arguments: -h, --help show this help message and exit --download, -d --file_type FILE_TYPE, -t FILE_TYPE --file_path FILE_PATH, -f FILE_PATH --download_folder DOWNLOAD_FOLDER, -p DOWNLOAD_FOLDER --depth DEPTH 参数说明: download: 是下载文件目录,还是遍历查看资源 file_type: 文件还是目录,模式是下载文件,如果下载目录传递参数 -t=“folder” file_path: 阿里云盘上面的资源路径名称 download_folder: 下载到本地的目录 depth: 进行目录递归遍历的深度 下载文件 [user@serv]$ python3.

mysql 定时备份脚本

数据库定时备份脚本 备份数据库到单个文件 备份数据库, 按照数据库名称备份到过个文件 #!/usr/bin/env bash # 参数配置 SERVHOST='10.1.1.64' SERVPORT='3306' MYSQL_USER="myuser" MYSQL=/usr/bin/mysql MYSQL_PASSWORD="helloPasswd" MYSQLDUMP=/usr/bin/mysqldump # 全库备份 BAK_PATH=/data/bak_db/online_db_all/`date '+%Y%m'`/`date '+%Y%m%d'` mkdir -pv ${BAK_PATH} # 备份完整数据库到一个文件 $MYSQLDUMP -h $SERVHOST -u $MYSQL_USER -P$SERVPORT -p$MYSQL_PASSWORD --all-databases | zip ${BAK_PATH}/`date "+%Y%m%d-%H%M%S"`.all.sql.zip - # 分文件备份数据库,方便还原单个数据库的数据 databases=`$MYSQL -h $SERVHOST -u $MYSQL_USER -P$SERVPORT -p$MYSQL_PASSWORD -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|performance_schema)"` for db in $databases; do BACK_FILENAME=${BAK_PATH}/`date "+%Y%m%d-%H%M%S"`.$db.sql.zip echo "["`date`"] " "备份:" $db " 开始" $MYSQLDUMP --force --opt -h $SERVHOST -u $MYSQL_USER -P$SERVPORT -p$MYSQL_PASSWORD --databases $db | zip ${BACK_FILENAME} - echo "备份路径: " $BACK_FILENAME echo "["`date`"] " "备份:" $db " 结束" echo "" done

JavaScript 的对象复制

简介 我们知道,赋值运算符不会创建对象的副本,只会分配对它的引用,请看以下代码: let obj = { a: 1, b: 2, }; let copy = obj; obj.a = 5; console.log(copy.a); // Result // a = 5; obj变量是初始化的新对象的容器。copy变量指向同一个对象,并且是该对象的引用。所以基本上这个{ a: 1, b: 2, }对象是在说现在有两种方法可以访问我:通过obj变量或copy变量以任何一种方式传递给我,并且你通过这些方式对我所做的任何操作都会影响我。 此方法消除了任何形式的不变性,如果原始对象被代码的另一部分使用,可能会导致bug。 复制对象的简单方法 复制对象的简单方法是遍历原始对象并一个接一个地复制每个属性。让我们看一下这段代码: function copy(mainObj) { let objCopy = {}; // objCopy will store a copy of the mainObj let key; for (key in mainObj) { objCopy[key] = mainObj[key]; // copies each property to the objCopy object } return objCopy; } const mainObj = { a: 2, b: 5, c: { x: 7, y: 4, }, } console.

谈谈 JavaScript 的对象复制

对象是JavaScript的基本块。对象是属性的集合,属性是键(或名称)和值之间的关联。JavaScript中几乎所有的对象都是位于原型链顶部的Object的实例。 简介 我们知道,赋值运算符不会创建对象的副本,只会分配对它的引用,请看以下代码: let obj = { a: 1, b: 2,};let copy = obj;obj.a = 5;console.log(copy.a);// Result // a = 5; obj变量是初始化的新对象的容器。copy变量指向同一个对象,并且是该对象的引用。所以基本上这个{ a: 1, b: 2, }对象是在说现在有两种方法可以访问我:通过obj变量或copy变量以任何一种方式传递给我,并且你通过这些方式对我所做的任何操作都会影响我。 此方法消除了任何形式的不变性,如果原始对象被代码的另一部分使用,可能会导致bug。 复制对象的简单方法 复制对象的简单方法是遍历原始对象并一个接一个地复制每个属性。让我们看一下这段代码: function copy(mainObj) { let objCopy = {}; // objCopy will store a copy of the mainObj let key; for (key in mainObj) { objCopy[key] = mainObj[key]; // copies each property to the objCopy object } return objCopy;}const mainObj = { a: 2, b: 5, c: { x: 7, y: 4, },}console.

Cargo 安装、配置国内清华源

Cargo 是 Rust 的构建系统和包管理器 可以用来安装管理 Rust 开发的软件 用 Cargo 来管理 Rust 开发依赖的第三方库 安装 Cargo curl https://sh.rustup.rs -sSf | sh 配置国内清华镜像源 编辑配置文件 vim .cargo/config 加入国内源配置 [source.crates-io] replace-with = 'tuna' [source.tuna] registry = "https://mirrors.tuna.tsinghua.edu.cn/git/crates.io-index.git"

go 常用开源库汇总

go 常用开源库列表 选择的项目都是知名的有大量开发者使用的,满足以下条件 500 星以上,fork 百次以上 长期更新这个列表的项目情况,方便查找 项目名 简介 文档地址 项目地址 Star Fork gorm orm 数据库访问 文档 https://github.com/go-gorm/gorm 28.9k 3.2k gin golang 开发的高性能 web 框架 文档 https://github.com/gin-gonic/gin 61k 6.8k lo 处理数组、map等集合数据的算法库 文档 https://github.com/samber/lo 6.8k 263 viper 配置文件处理的库, 支持各种格式、远程本地的配置文件 文档 https://github.com/spf13/viper 19.9k 1.7k Loki 轻量级日志收集系统,替换ELK 文档 https://github.com/grafana/loki 16.5k 2.1k Prometheus Prometheus 是一款基于时序数据库的开源系统 文档 https://github.com/prometheus/prometheus 43.4k 7.3k swaggo Swagger 自动生成api接口文档 文档 https://github.com/swaggo/swag 6.4k 864 jaeper uber 开源的分布式链路追踪系统的 golang 客户端 文档 https://github.com/jaegertracing/jaeger-client-go 1.3k 280 lumberjack lumberjack是一个日志滚动记录器 文档 https://github.

Web前端的发展史

Web前端技术的发展历史大体上可以分成以下几个主要阶段。 1.蛮荒时代 20世纪90年代,Web前端的主要工作就是在浏览器上展示一些文字和图片, 以及提供一些 注册表单。那时的网站以浏览为主,使用HTML的标签元素来显示网页内容,CSS以元素的行内 样式现,少量的JavaSerip代码起客户端验证、表单验证的作用。 2.进化时代 Ajax的出现是Web前端的第一次大型进化,以Gmail为代表的一系列规模更大,效果更好的 Web程序的出现,促使网页中的JavaScript比例越来越大。 随着JavaScript代码量的上涨,促进了JavaScript库概念的出现,当时最有名的就是 prototype、motools等 JavaScript库,这两个库都是基于面向对象的方式组织,并整合 了大量的业务代码,如枚举、数组、字符串、DOM ( Document Object Model,文档对象 模型),BOM ( Browser Object Model,浏览器对象模型)、表单、Ajax等,这些整合好 的方法库减少了前端工程师的开发难度。 这个时代最耀眼的明星就是jQuery, jQuery的重点放在了DOM操作上,极大地简化了页 面元素操作的难度,链式调用的出现也减少了前端工程师需要编写的代码量。 3.革命时代 Flash的没落和HTML 5技术的崛起,使Web前端的业务内容短时间爆发了,在线游戏、在线应 用、动态网站等新兴业务极大地拓展了前端的技术边界。 Web前端工程师们开始考虑这样一些问题: 如何更好地模块化开发、业务数据如何组织、界面 和业务数据之间通过任何方式进行交互。 在这种背景下,出现了一些前端MVC、MVP、MVVM框架,把这些框架统称为MV*框架这些框架 主要是为了解决上面这些问题,具体的实现思路各有不同,主流的有Vue、AngularJS和React等。 在进化时代和革命时代出现的两个代表技术一个叫作库, 而另个叫作框架。 (1)库(插件):是一-种封装好的特定方法集合,对项目的侵入性较小,提供给开发者使用,控制权 在使用者手中,如果某个库无法完成某些需求,则可以很容易切换到其他库实现需求。 (2)框架: 是一套架构,会基于自身特点向用户提供套相当完整的解决方案,而且控制权在框架 本身;对项目的侵入性较大使用者要按照框架所规定的某种特定规范进行开发,项目如果需要更换 框架则需要重构整个项目。 其实无论是什么框架采用的是哪种MV*模式,其内部的代码都是由原身的JavaScript,CSS等构成。

golang 开发的电商平台 - 天阶海豚电商平台

golang 开发的天阶海豚电商平台 功能介绍 商城前端、管理平台前端,使用 vue 开发 后台 API 使用 golang 开发 支付网关服务使用 golang 开发(支持微信支付) 目前已经为合作客户提供电商服务,百万级月GMV,稳定运行 合作客户 程序员,自己可以使用项目进行部署、或进行二次开发 合作方公司有自己的研发人员,可以部署和使用项目 与我们公司合作,我们协助来部署和使用项目 价格 4个项目完整源代码,低价 可以购买在项目中使用,只占用一点项目成本 具体加微信沟通 具体业务合作请加微信沟通 平台界面截图 1. 天阶海豚商城:Web网站商城、H5 商城 商品销售 用户注册登录 购物车 线上支付 用户信息管理 订单管理 1.2 H5商城界面图 2. 海豚电商管理后台 商品上架 商品分类管理 订单管理 配送管理 支付管理 退货管理 用户信息管理 2.1 天阶海豚电商平台管理后台 3 服务端 API 代码目录结构 . ├── README.md ├── api │ ├── v1 │ │ ├── account │ │ │ ├── account.go │ │ │ ├── buRouter.

test

测试文章测试文章测试文章测试文章测试文章测试文章

Rust 知名的开源项目

可扩展 支持 windows、linux、macos 多平台 现代化高性能的终端模拟器 starship - 小巧快速的Shell提示工具,支持各种Shell 速度快: 它的速度真的非常非常快 ? 可配置: 可以配置提示符 广泛适用: 支持各种Shell,多种操作系统 智能: 快速显示相关信息 简单: 快速安装 Tauri - 更快、更安全的多平台桌面应用 兼容所有的前端框架意味着您不需要更改您的技术栈 构建支持所有主流桌面平台(移动端和 WASM 即将推出)的二进制打包文件 性能及安全至上的 Rust 是次时代应用开发首选 使用系统自带的网页渲染器,Tauri 应用的大小可打包到 600 KB 以下!

golang 开发的高性能电商平台

项目介绍 golang 开发的服务端api、独立的支付中心服务,支持高并发、分布式服务 前端使用vue,小程序等开发技术 B2B小程序商城、B2C小程序商城、国际版海外电商商城 高级版提供多仓库、多公司的全国连锁使用管理模式 项目部署快速,1周内快速部署 客户使用情况 目前合作的客户每个月gmv超过100万 服务运行稳定、高效 提供服务 直接代运维,提供整套软硬件环境,快速上线使用 可以协助客户部署,客户独立运维使用 可以通过源代码二次开发的形式,与客户深度合作 团队介绍 专业的技术团队,来自BAT等一线互联网公司的资深架构师和程序员 专业的产品设计团队,全程协助客户整理项目功能,完成客户期望的产品 有多年为创业公司开发第一代产品的经验,已经帮助客户上线产品,并协助客户组建研发团队,承接后继产品的迭代开发工作 公司官网 有意向的客户可以 “扫码” 联系

Mac 使用国内源快速安装 Homebrew, brew

1. 使用国内源安装 Homebrew 安装的时候可以选择中科大的源、清华的源,速度非常快 bash -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" 2. 替换Homebrew国内源 cd "$(brew --repo)" git remote set-url origin https://mirrors.ustc.edu.cn/brew.git cd "$(brew --repo)/Library/Taps/homebrew/homebrew-core" git remote set-url origin https://mirrors.ustc.edu.cn/homebrew-core.git brew update

mysql 日志

mysql 中日志文件类型如下: 错误日志 error log 查看错误日志目录方式: show VARIABLES LIKE ‘log_error’\G; 各种数据库错误,以及需要优化的提示,可以查看错误日志文件。 二进制日志 binlog 慢查询日志 slow query log show VARIABLES LIKE ‘long_query_time’\G; 慢查询日志可以帮助定位可能存在问题的sql语句,从而进行sql 语句优化,可以在mysql 启动时设置一个阈值,将运行时间超过该值的所有sql语句记录到慢查询日志文件中。 在默认情况下数据库不启动慢查询日志,用户需要手工将这个参数设置为ON。(直接修改配置文件添加如下配置,重启mysql) slow_query_log = ON slow_query_log_file = /var/log/mysql/slow_query.log long_query_time = 5 如果希望得到执行时间最长的10条sql语句: mysqldumpslow -s al -n 10 slow.log // 直接在命令行执行,不是在sql 环境 在5.1 以后版本中,慢查询日志可以存放在一张表中mysql.slow_log 中。默认是存放在文件中,可以通过设置参数把慢查询日志放到表中。 show VARIABLES LIKE ‘log_output’\G; // 查询慢日志存放方式 set GLOBAL log_output=’TABLE’ // 设置慢日志存放到表中 ‘FILE’是存放到文件 log_queries_not_using_indexes = ON // 如果语句没有使用索引,则会记录到慢查询日志中 5.6.6 版本新增 log_throttle_queries_not_using_indexes,用来标示每分钟允许记录到slow log 的且未使用索引的sql语句次数。(避免大量sql语句记录到日志中,DBA 可调整该参数)

golang map

映射是一种数据结构,用于存储一系列无序的键值对。映射里基于键值来存储。映射强大的地方是,能够基于键快速检索数据。就像索引一样,指向与键关联的值。 简单描述散列函数如何工作的: Go 中有多种方法可以创建并初始化映射,可以使用内置的make 函数,也可以使用映射字面量。(映射使用前必须初始化) dict := make(map[string]int,16) // 说明这个map 容量为 16,当记录数量大于16时候需要扩容 dict1 := map[string]int{“red”:1001,”orange”:1002} for key,_ := range dict1 { delete(dict1,key) } // 通过这个便利可以删除所有的 元素 len(dict1) // map 长度 切片,函数以及包含切片的结构类型这些类型由于具有引用语义,不能作为映射的键。

下单操作流程

具体内容,首先添加商品倒购物车,然后进行结算,确认商品无误后提交订单,提交并生成订单后进行支付。然后等到收到货物之后确认收货。从而完成整个流程。

go get 私有仓库包拉取报错 unknown revision go: error loading module requi

在使用go get 拉取私有仓库时, 会报 如下错误 go: github.com/xxxx/aprivate@v0.0.3: unknown revision v0.0.3 go: error loading module requirements 网上统一都是 git 版本问题, 要升级git 或者执行 git config --global url.ssh://git@github.com/.insteadOf http://github.com/ 但我执行了以上命令, git 是最新版本(git 2.18.2) 仍然报错, 且提示信息一点参考价值也没有 通过strace go get xxxx 命令, 看到一个错误提示 futex(0xe8d930, FUTEX_WAKE_PRIVATE, 1) = 1 read(9, "fatal: could not read Username f"..., 512) = 83 read(9, 0xc0003f2053, 1453) = -1 EAGAIN (资源暂时不可用) 关键字: fatal: could not read Username f 查询后发现, 改错误信息完整如下 fatal: could not read Username for 'https://github.

韩国VPS推荐 - Kdatacenter

Kdatacenter 拥有大陆直连线路,延迟低,适合游戏用户,拥有1000M的带宽,速度是非常快的。 Kdatacenter 支持Windows VPS 和 Linux VPS,基本能满足所有用户的需求。 最低配置1G内存的价格是19.00美元/月,支持支付宝购买,国内用户使用也非常的方便 有以下特点 速度超级快、延迟超级低、 价格略贵、流量略少 G口、SSD硬盘、VPS性能非常的好,网速非常的稳定 起步价:新用户19美金/月,老用户15.2美金/月,500G流量 晚高峰电信实测延迟 42ms,可以用来打游戏! 适合个人自用或者少数人用,流量少不适合流量型的人用,开网站也合适 实测:In或者Out流量超过115%就会被停机

kubernetes 系统命令

kubectl get endpoints kube-controller-manager -n kube-system -o yaml ansible myhosts -m shell -a ‘systemctl status kube-controller-manager’ | grep -B 4 ago kubectl describe endpoints -n kube-system kubectl get csr | sed 1d | awk ‘{print }’ | xargs -i kubectl certificate approve {} kubectl create clusterrolebinding kubelet-bootstrap –clusterrole=system:node-bootstrapper –user=kubelet-bootstrap kubectl describe clusterrole system:controller:deployment-controller kubectl get clusterrole|grep controller

ffmpeg 视频解码播放,视频预览图片截取

视频解码相关概念 首先简单介绍以下视频文件的相关知识。我们平时看到的视频文件有许多格式,比如 avi, mkv, rmvb, mov, mp4等等,这些被称为容器(Container), 不同的容器格式规定了其中音视频数据的组织方式(也包括其他数据,比如字幕等)。容器中一般会封装有视频和音频轨,也称为视频流(stream)和音频 流,播放视频文件的第一步就是根据视频文件的格式,解析(demux)出其中封装的视频流、音频流以及字幕(如果有的话),解析的数据读到包 (packet)中,每个包里保存的是视频帧(frame)或音频帧,然后分别对视频帧和音频帧调用相应的解码器(decoder)进行解码,比如使用 H.264编码的视频和MP3编码的音频,会相应的调用H.264解码器和MP3解码器,解码之后得到的就是原始的图像(YUV or RGB)和声音(PCM)数据,然后根据同步好的时间将图像显示到屏幕上,将声音输出到声卡,最终就是我们看到的视频。 FFmpeg的API就是根据这个过程设计的,因此使用FFmpeg来处理视频文件的方法非常直观简单。下面就一步一步介绍从视频文件中解码出图片的过程 数据结构介绍 1. AVFormatContext:保存需要读入的文件的格式信息,比如流的个数以及流数据等 2. AVCodecCotext:保存了相应流的详细编码信息,比如视频的宽、高,编码类型等。 3. pCodec:真正的编解码器,其中有编解码需要调用的函数 4. AVFrame:用于保存数据帧的数据结构,这里的两个帧分别是保存颜色转换前后的两帧图像 5. AVPacket:解析文件时会将音/视频帧读入到packet中 ffmpeg 视频解码播放 ios 实例代码 - (void) decodeVideo:(NSURL*)url { AVFormatContext *pFormatCtx; int i, videoindex; AVCodecContext *pCodecCtx; AVCodec *pCodec; AVFrame *pFrame,*pFrameYUV; uint8_t* out_buffer; AVPacket *packet; int y_size; int ret; struct SwsContext *img_convert_ctx; FILE *fp_yuv; int frame_cnt; clock_t time_start, time_finish; double time_duration = 0.0; char input_str_full[512] = {0}; char output_str_full[512] = {0}; char err[512] = {0}; char info[1024] = {0}; NSString *output_str= [NSString stringWithFormat:@"resource/%@.

mac上编译一些iOS最新版本第三方库的脚本--ffmpeg, fdk-aac, x264, libcurl, opessl

1. 编译 ffmpeg 相关库脚本 没有用到脚本内自动下载 ffmpeg 源代码,自己下载的最近的 4.1 版本代码 把脚本放在源代码目录下编译,最后生成的 FFmpeg-iOS 目录放在ios项目目录下 在项目中添加头文件查找路径,增加编译库 注意依赖关系,先编译 x264,fdk-acc(如果使用的话), 最后编译 ffmpeg,根据实际情况修改 ffmpeg 编译脚本中的路径 1.1 fdk-acc 库 版本 fdk-aac-2.0.0 #!/bin/sh CONFIGURE_FLAGS="--enable-static --with-pic=yes --disable-shared --disable-debug" ARCHS="x86_64 armv7 armv7s arm64" # 源文件名 SOURCE="fdk-aac-2.0.0" FAT="fdk-aac-ios" SCRATCH="scratch" # thin当前脚本下的自定义文件,用于接收编译后的头文件和静态库 THIN=`pwd`/"thin" COMPILE="y" LIPO="y" if [ "$*" ] then if [ "$*" = "lipo" ] then # skip compile COMPILE= else ARCHS="$*" if [ $# -eq 1 ] then # skip lipo LIPO= fi fi fi if [ "$COMPILE" ] then CWD=`pwd` for ARCH in $ARCHS do echo "building $ARCH.

iOS 沙盒和 bundle,以及软件包内资源获取机制

1. 沙盒机制 iOS 中的沙盒机制是一种安全体系。每个iOS程序都有一个独立的文件系统(存储空间),而且只能在对应的文件系统中进行操作,此区域被称为沙盒。应用必须待在自己的沙盒里,其他应用不能访问该沙盒。所有的非代码文件都要保存在此,例如属性文件plist、文本文件、图像、图标、媒体资源等。沙盒是用来存入缓冲区的,APP关掉,缓存被自动清理。 沙盒路径:NSLog(@"%@",NSHomeDirectory()); 1.2 沙盒目录结构 1. /AppName.app 应用程序的程序包目录,包含应用程序的本身。由于应用程序必须经过签名,所以不能在运行时对这个目录中的内容进行修改,否则会导致应用程序无法启动。 2. /Documents/ 保存应用程序的重要数据文件和用户数据文件等。用户数据基本上都放在这个位置(例如从网上下载的图片或音乐文件),该文件夹在应用程序更新时会自动备份,在连接iTunes时也可以自动同步备份其中的数据 3. /Library 目录:这个目录下有两个子目录:可创建子文件夹。可以用来放置您希望被备份但不希望被用户看到的数据。该路径下的文件夹,除Caches以外,都会被iTunes备份 /Library/Caches(缓存) 保存应用程序使用时产生的支持文件和缓存文件(保存应用程序再次启动过程中需要的信息),还有日志文件最好也放在这个目录。 iTunes 同步时不会备份该目录并且可能被其他工具清理掉其中的数据。 /Library/Preferences (偏好)保存应用程序的偏好设置文件(使用 NSUserDefaults( 这个就是放这) 类设置时创建,不应该手动创建;连iTunes可备份, 在应用程序更新时会自动备份;plist文件就放在此处)。 4. /tmp/ 保存应用运行时所需要的临时数据,该路径下的文件不会被iTunes备份。iphone 重启时,会自动清除该目录下所有文件;例如录制视频完成后是放在/temp/; 所以应该将视频文件从该文件夹转移到相册中,否则视频文件就会被系统清理掉 1.2 访问沙盒路径的方法 // 获取沙盒根目录路径 NSString*homeDir = NSHomeDirectory(); // 获取Documents目录路径 NSString*docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES) firstObject]; // 获取Library的目录路径 NSString*libDir = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory,NSUserDomainMask,YES) lastObject]; // 获取cache目录路径 NSString*cachesDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES) firstObject]; // 获取tmp目录路径 NSString*tmpDir =NSTemporaryDirectory(); // 获取应用程序程序包中资源文件路径的方法: NSLog(@"%@",[[NSBundlemainBundle] bundlePath]); NSString*imagePath = [[NSBundlemainBundle] pathForResource:@"test"ofType:@"png"]; UIImage* testImage = [[UIImagealloc] initWithContentsOfFile:imagePath]; 2.

squid 代理配置配置

squid 配置 http_port 8080 access_log /var/log/squid/access.log squid auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/passwd acl password proxy_auth REQUIRED http_access allow password “#acl all src all “#http_access allow all coredump_dir /var/spool/squid “#header_access Via deny all “#header_access X-Forwarded-For deny all #产生密码 htpasswd -c /etc/squid/passwd password ov 服务端配置 client dev tun proto tcp remote “你的域名或者ip” “你的端口” “#reneg-sec 432000 resolv-retry infinite ca ca.crt key client1.key cert client1.crt comp-lzo verb 3 auth-nocache tls-auth ta.key 1 nobind auth-user-pass remote-cert-tls server ns-cert-type server auth-user-pass auth.

vps 推荐介绍 & 问题处理

瓦搬工 高性价比 vps 购买地址 管理面板,通过上面主地址点击跳转过去,可以自动登录 block ip 检测替换 linode 比较贵,服务质量好 购买地址