一、x264开源包获取

x264-snapshot提供了开源x264源代码,已经在X86和ARM架构下均已实现。linux下可以使用git获得最新的代码包

git clone git://git.videolan.org/x264.git

也可以通过网页下载:

http://download.videolan.org/pub/videolan/x264/snapshots/

二、配置、安装x264-snapshot

下载到源码后,对其进行配置,以便在后续make时编译出zed上可以运行的可执行程序

1、解压源码包后,进入源码目录

./configure --host=arm-xilinx-linux-gnueabi --prefix=/opt/rcq --enable-shared --disable-asm

congfig之后,设定了host为arm-xilinx-linux-gnueabi,install路径是/opt/rcq

2、修改config.mak文件

针对zed的gcc,需要修改config.mak文件

 SRCPATH=.
prefix=/opt/rcq
exec_prefix=${prefix}
bindir=${exec_prefix}/bin
libdir=${exec_prefix}/lib
includedir=${prefix}/include
ARCH=ARM
SYS=LINUX
CC=arm-xilinx-linux-gnueabi-gcc
CFLAGS=-Wshadow -O3 -fno-fast-math -Wall -I. -I$(SRCPATH) -std=gnu99 -fPIC -fomit-frame-pointer -fno-tree-vectorize
DEPMM=-MM -g0
DEPMT=-MT
LD=arm-xilinx-linux-gnueabi-gcc -o
LDFLAGS= -lm -lpthread
LIBX264=libx264.a
AR=arm-xilinx-linux-gnueabi-ar rc
RANLIB=arm-xilinx-linux-gnueabi-ranlib
STRIP=arm-xilinx-linux-gnueabi-strip
AS=
ASFLAGS= -DHAVE_ALIGNED_STACK= -DPIC -DHIGH_BIT_DEPTH= -DBIT_DEPTH=
RC=
RCFLAGS=
EXE=
HAVE_GETOPT_LONG=
DEVNULL=/dev/null
PROF_GEN_CC=-fprofile-generate
PROF_GEN_LD=-fprofile-generate
PROF_USE_CC=-fprofile-use
PROF_USE_LD=-fprofile-use
default: cli
install: install-cli
SOSUFFIX=so
SONAME=libx264.so.
SOFLAGS=-shared -Wl,-soname,$(SONAME) -Wl,-Bsymbolic
default: lib-shared
install: install-lib-shared
LDFLAGSCLI =
CLI_LIBX264 = $(LIBX264)

其中9、13、16、17、18行为修改后的。

3、make

make install
make

完运行库的安装和成执行文件的生成

三、在zed上测试x264

将可执行x264和测试rcq.yuv文件拷贝到zed上,使用默认运行命令

./x264 rcq.yuv --input-res 640x480 -o rcq.flv

其中--input-res 640x480设定输入yuv视频帧的大小,rcq.flv是输出文件,可以设定为.mkv/.mp4/H264等。从控制台可以看到

使用的profile是最高等级High level 3.0,但是的编码速率只有1.40fps……情何以堪……

编码结束后:

生成的rcq.flv文件大小348k,相比较原来的rcq.yuv文件大小33M,压缩率在1%。

可以使用最快编码方式,命令和参数如下

./x264 rcq.yuv --input-res 640x480 -o rcq.flv --no-8x8dct --aq-mode 0 --b-adapt 0 --bframes 0 --no-cabac --no-deblock --no-mbtree --me dia --no-mixed-refs --partitions none --rc-lookahead 0 --ref 1 --scenecut 0 --subme 0 --trellis 0

编码速率能有22fps,这样还凑合。生成的rcq.flv文件大小787K,压缩率在5%。

四、x264命令和参数(fullhelp)

 Syntax: x264 [options] -o outfile infile

 Infile can be raw (in which case resolution is required),
or YUV4MPEG (*.y4m),
or Avisynth if compiled with support (no).
or libav* formats if compiled with lavf support (no) or ffms support (no).
Outfile type is selected by filename:
. -> Raw bytestream
.mkv -> Matroska
.flv -> Flash Video
.mp4 -> MP4 if compiled with GPAC support (no)
Output bit depth: (configured at compile time) Options: -h, --help List basic options
--longhelp List more options
--fullhelp List all options Example usage: Constant quality mode:
x264 --crf -o <output> <input> Two-pass with a bitrate of 1000kbps:
x264 --pass --bitrate -o <output> <input>
x264 --pass --bitrate -o <output> <input> Lossless:
x264 --qp -o <output> <input> Maximum PSNR at the cost of speed and visual quality:
x264 --preset placebo --tune psnr -o <output> <input> Constant bitrate at 1000kbps with a second-buffer:
x264 --vbv-bufsize --bitrate -o <output> <input> Presets: --profile <string> Force the limits of an H. profile
Overrides all settings.
- baseline:
--no-8x8dct --bframes --no-cabac
--cqm flat --weightp
No interlaced.
No lossless.
- main:
--no-8x8dct --cqm flat
No lossless.
- high:
No lossless.
- high10:
No lossless.
Support for bit depth -.
- high422:
No lossless.
Support for bit depth -.
Support for ::/:: chroma subsampling.
- high444:
Support for bit depth -.
Support for ::/::/:: chroma subsampling.
--preset <string> Use a preset to select encoding settings [medium]
Overridden by user settings.
- ultrafast:
--no-8x8dct --aq-mode --b-adapt
--bframes --no-cabac --no-deblock
--no-mbtree --me dia --no-mixed-refs
--partitions none --rc-lookahead --ref
--scenecut --subme --trellis
--no-weightb --weightp
- superfast:
--no-mbtree --me dia --no-mixed-refs
--partitions i8x8,i4x4 --rc-lookahead
--ref --subme --trellis --weightp
- veryfast:
--no-mixed-refs --rc-lookahead
--ref --subme --trellis --weightp
- faster:
--no-mixed-refs --rc-lookahead
--ref --subme --weightp
- fast:
--rc-lookahead --ref --subme
--weightp
- medium:
Default settings apply.
- slow:
--b-adapt --direct auto --me umh
--rc-lookahead --ref --subme
- slower:
--b-adapt --direct auto --me umh
--partitions all --rc-lookahead
--ref --subme --trellis
- veryslow:
--b-adapt --bframes --direct auto
--me umh --merange --partitions all
--ref --subme --trellis
--rc-lookahead
- placebo:
--bframes --b-adapt --direct auto
--slow-firstpass --no-fast-pskip
--me tesa --merange --partitions all
--rc-lookahead --ref --subme
--trellis
--tune <string> Tune the settings for a particular type of source
or situation
Overridden by user settings.
Multiple tunings are separated by commas.
Only one psy tuning can be used at a time.
- film (psy tuning):
--deblock -:- --psy-rd <unset>:0.15
- animation (psy tuning):
--bframes {+} --deblock :
--psy-rd 0.4:<unset> --aq-strength 0.6
--ref {Double if > else }
- grain (psy tuning):
--aq-strength 0.5 --no-dct-decimate
--deadzone-inter --deadzone-intra
--deblock -:- --ipratio 1.1
--pbratio 1.1 --psy-rd <unset>:0.25
--qcomp 0.8
- stillimage (psy tuning):
--aq-strength 1.2 --deblock -:-
--psy-rd 2.0:0.7
- psnr (psy tuning):
--aq-mode --no-psy
- ssim (psy tuning):
--aq-mode --no-psy
\ - fastdecode:
--no-cabac --no-deblock --no-weightb
--weightp
- zerolatency:
--bframes --force-cfr --no-mbtree
--sync-lookahead --sliced-threads
--rc-lookahead
--slow-firstpass Don't force these faster settings with --pass 1:
--no-8x8dct --me dia --partitions none
--ref --subme { if > else unchanged}
--trellis --fast-pskip Frame-type options: -I, --keyint <integer or "infinite"> Maximum GOP size []
-i, --min-keyint <integer> Minimum GOP size [auto]
--no-scenecut Disable adaptive I-frame decision
--scenecut <integer> How aggressively to insert extra I-frames []
--intra-refresh Use Periodic Intra Refresh instead of IDR frames
-b, --bframes <integer> Number of B-frames between I and P []
--b-adapt <integer> Adaptive B-frame decision method []
Higher values may lower threading efficiency.
- : Disabled
- : Fast
- : Optimal (slow with high --bframes)
--b-bias <integer> Influences how often B-frames are used []
--b-pyramid <string> Keep some B-frames as references [normal]
- none: Disabled
- strict: Strictly hierarchical pyramid
- normal: Non-strict (not Blu-ray compatible)
--open-gop Use recovery points to close GOPs
Only available with b-frames
--no-cabac Disable CABAC
-r, --ref <integer> Number of reference frames []
--no-deblock Disable loop filter
-f, --deblock <alpha:beta> Loop filter parameters [:]
--slices <integer> Number of slices per frame; forces rectangular
slices and is overridden by other slicing options
--slice-max-size <integer> Limit the size of each slice in bytes
--slice-max-mbs <integer> Limit the size of each slice in macroblocks
--tff Enable interlaced mode (top field first)
--bff Enable interlaced mode (bottom field first)
--constrained-intra Enable constrained intra prediction.
--pulldown <string> Use soft pulldown to change frame rate
- none, , , , double, triple, euro (requires cfr input)
--fake-interlaced Flag stream as interlaced but encode progressive.
Makes it possible to encode 25p and 30p Blu-Ray
streams. Ignored in interlaced mode.
--frame-packing <integer> For stereoscopic videos define frame arrangement
- : checkerboard - pixels are alternatively from L and R
- : column alternation - L and R are interlaced by column
- : row alternation - L and R are interlaced by row
- : side by side - L is on the left, R on the right
- : top bottom - L is on top, R on bottom
- : frame alternation - one view per frame Ratecontrol: -q, --qp <integer> Force constant QP (-, =lossless)
-B, --bitrate <integer> Set bitrate (kbit/s)
--crf <float> Quality-based VBR (-) [23.0]
--rc-lookahead <integer> Number of frames for frametype lookahead []
--vbv-maxrate <integer> Max local bitrate (kbit/s) []
--vbv-bufsize <integer> Set size of the VBV buffer (kbit) []
--vbv-init <float> Initial VBV buffer occupancy [0.9]
--crf-max <float> With CRF+VBV, limit RF to this value
May cause VBV underflows!
--qpmin <integer> Set min QP []
--qpmax <integer> Set max QP []
--qpstep <integer> Set max QP step []
--ratetol <float> Tolerance of ABR ratecontrol and VBV [1.0]
--ipratio <float> QP factor between I and P [1.40]
--pbratio <float> QP factor between P and B [1.30]
--chroma-qp-offset <integer> QP difference between chroma and luma []
--aq-mode <integer> AQ method []
- : Disabled
- : Variance AQ (complexity mask)
- : Auto-variance AQ (experimental)
--aq-strength <float> Reduces blocking and blurring in flat and
textured areas. [1.0] -p, --pass <integer> Enable multipass ratecontrol
- : First pass, creates stats file
- : Last pass, does not overwrite stats file
- : Nth pass, overwrites stats file
--stats <string> Filename for pass stats ["x264_2pass.log"]
--no-mbtree Disable mb-tree ratecontrol.
--qcomp <float> QP curve compression [0.60]
--cplxblur <float> Reduce fluctuations in QP (before curve compression) [20.0]
--qblur <float> Reduce fluctuations in QP (after curve compression) [0.5]
--zones <zone0>/<zone1>/... Tweak the bitrate of regions of the video
Each zone is of the form
<start frame>,<end frame>,<option>
where <option> is either
q=<integer> (force QP)
or b=<float> (bitrate multiplier)
--qpfile <string> Force frametypes and QPs for some or all frames
Format of each line: framenumber frametype QP
QP is optional (none lets x264 choose). Frametypes: I,i,K,P,B,b.
K=<I or i> depending on open-gop setting
QPs are restricted by qpmin/qpmax. Analysis: -A, --partitions <string> Partitions to consider ["p8x8,b8x8,i8x8,i4x4"]
- p8x8, p4x4, b8x8, i8x8, i4x4
- none, all
(p4x4 requires p8x8. i8x8 requires --8x8dct.)
--direct <string> Direct MV prediction mode ["spatial"]
- none, spatial, temporal, auto
--no-weightb Disable weighted prediction for B-frames
--weightp <integer> Weighted prediction for P-frames []
- : Disabled
- : Weighted refs
- : Weighted refs + Duplicates
--me <string> Integer pixel motion estimation method ["hex"]
- dia: diamond search, radius (fast)
- hex: hexagonal search, radius
- umh: uneven multi-hexagon search
- esa: exhaustive search
- tesa: hadamard exhaustive search (slow)
--merange <integer> Maximum motion vector search range []
--mvrange <integer> Maximum motion vector length [- (auto)]
--mvrange-thread <int> Minimum buffer between threads [- (auto)]
-m, --subme <integer> Subpixel motion estimation and mode decision []
- : fullpel only (not recommended)
- : SAD mode decision, one qpel iteration
- : SATD mode decision
- -: Progressively more qpel
- : RD mode decision for I/P-frames
- : RD mode decision for all frames
- : RD refinement for I/P-frames
- : RD refinement for all frames
- : QP-RD - requires trellis=, aq-mode>
- : Full RD: disable all early terminations
--psy-rd <float:float> Strength of psychovisual optimization ["1.0:0.0"]
#: RD (requires subme>=)
#: Trellis (requires trellis, experimental)
--no-psy Disable all visual optimizations that worsen
both PSNR and SSIM.
--no-mixed-refs Don't decide references on a per partition basis
--no-chroma-me Ignore chroma in motion estimation
--no-8x8dct Disable adaptive spatial transform size
-t, --trellis <integer> Trellis RD quantization. []
- : disabled
- : enabled only on the final encode of a MB
- : enabled on all mode decisions
--no-fast-pskip Disables early SKIP detection on P-frames
--no-dct-decimate Disables coefficient thresholding on P-frames
--nr <integer> Noise reduction [] --deadzone-inter <int> Set the size of the inter luma quantization deadzone []
--deadzone-intra <int> Set the size of the intra luma quantization deadzone []
Deadzones should be in the range - .
--cqm <string> Preset quant matrices ["flat"]
- jvt, flat
--cqmfile <string> Read custom quant matrices from a JM-compatible file
Overrides any other --cqm* options.
--cqm4 <list> Set all 4x4 quant matrices
Takes a comma-separated list of integers.
--cqm8 <list> Set all 8x8 quant matrices
Takes a comma-separated list of integers.
--cqm4i, --cqm4p, --cqm8i, --cqm8p <list>
Set both luma and chroma quant matrices
--cqm4iy, --cqm4ic, --cqm4py, --cqm4pc <list>
Set individual quant matrices Video Usability Info (Annex E):
The VUI settings are not used by the encoder but are merely suggestions to
the playback equipment. See doc/vui.txt for details. Use at your own risk. --overscan <string> Specify crop overscan setting ["undef"]
- undef, show, crop
--videoformat <string> Specify video format ["undef"]
- component, pal, ntsc, secam, mac, undef
--range <string> Specify color range ["auto"]
- auto, tv, pc
--colorprim <string> Specify color primaries ["undef"]
- undef, bt709, bt470m, bt470bg
smpte170m, smpte240m, film
--transfer <string> Specify transfer characteristics ["undef"]
- undef, bt709, bt470m, bt470bg, linear,
log100, log316, smpte170m, smpte240m
--colormatrix <string> Specify color matrix setting ["???"]
- undef, bt709, fcc, bt470bg
smpte170m, smpte240m, GBR, YCgCo
--chromaloc <integer> Specify chroma sample location ( to ) []
--nal-hrd <string> Signal HRD information (requires vbv-bufsize)
- none, vbr, cbr (cbr not allowed in .mp4)
--pic-struct Force pic_struct in Picture Timing SEI
--crop-rect <string> Add 'left,top,right,bottom' to the bitstream-level
cropping rectangle Input/Output: -o, --output <string> Specify output file
--muxer <string> Specify output container format ["auto"]
- auto, raw, mkv, flv
--demuxer <string> Specify input container format ["auto"]
- auto, raw, y4m
--input-fmt <string> Specify input file format (requires lavf support)
--input-csp <string> Specify input colorspace format for raw input
- valid csps for `raw' demuxer:
i420, yv12, nv12, i422, yv16, nv16, i444, yv24, bgr, bgra, rgb
--output-csp <string> Specify output colorspace ["i420"]
- i420, i422, i444, rgb
--input-depth <integer> Specify input bit depth for raw input
--input-range <string> Specify input color range ["auto"]
- auto, tv, pc
--input-res <intxint> Specify input resolution (width x height)
--index <string> Filename for input index file
--sar width:height Specify Sample Aspect Ratio
--fps <float|rational> Specify framerate
--seek <integer> First frame to encode
--frames <integer> Maximum number of frames to encode
--level <string> Specify level (as defined by Annex A)
--bluray-compat Enable compatibility hacks for Blu-ray support -v, --verbose Print stats for each frame
--no-progress Don't show the progress indicator while encoding
--quiet Quiet Mode
--log-level <string> Specify the maximum level of logging ["info"]
- none, error, warning, info, debug
--psnr Enable PSNR computation
--ssim Enable SSIM computation
--threads <integer> Force a specific number of threads
--lookahead-threads <integer> Force a specific number of lookahead threads
--sliced-threads Low-latency but lower-efficiency threading
--thread-input Run Avisynth in its own thread
--sync-lookahead <integer> Number of buffer frames for threaded lookahead
--non-deterministic Slightly improve quality of SMP, at the cost of repeatability
--cpu-independent Ensure exact reproducibility across different cpus,
as opposed to letting them select different algorithms
--asm <integer> Override CPU detection
--no-asm Disable all CPU optimizations
--visualize Show MB types overlayed on the encoded video
--dump-yuv <string> Save reconstructed frames
--sps-id <integer> Set SPS and PPS id numbers []
--aud Use access unit delimiters
--force-cfr Force constant framerate timestamp generation
--tcfile-in <string> Force timestamp generation with timecode file
--tcfile-out <string> Output timecode v2 file from input timestamps
--timebase <int/int> Specify timebase numerator and denominator
<integer> Specify timebase numerator for input timecode file
or specify timebase denominator for other input
--dts-compress Eliminate initial delay with container DTS hack Filtering: --vf, --video-filter <filter0>/<filter1>/... Apply video filtering to the input file Filter options may be specified in <filter>:<option>=<value> format. Available filters:
crop:left,top,right,bottom
removes pixels from the edges of the frame
select_every:step,offset1[,...]
apply a selection pattern to input frames
step: the number of frames in the pattern
offsets: the offset into the step to select a frame
see: http://avisynth.org/mediawiki/Select#SelectEvery

五、关于YUV420的格式说明

YUV格式有两大类:planar和packed。
对于planar的YUV格式,先连续存储所有像素点的Y,紧接着存储所有像素点的U,随后是所有像素点的V。
对于packed的YUV格式,每个像素点的Y,U,V是连续交*存储的。

一般的录像程序是先从摄像头得到yuv420 planar的数据,然后编码成h264格式 帧,最后存储成3gp/mpeg等格式的视频文件。

以720×488大小图象YUV420 planar为例,其存储格式是:
共大小为(720×480×3>>1)字节,分为三个部分:Y,U和V
Y分量: (720×480)个字节
U(Cb)分量:(720×480>>2)个字节
V(Cr)分量:(720×480>>2)个字节
三个部分内部均是行优先存储,三个部分之间是Y,U,V 顺序存储。
即YUV数据的0--720×480字节是Y分量值,
720×480--720×480×5/4字节是U分量
720×480×5/4 --720×480×3/2字节是V分量。

一副w*h的yuv420图像数据的大小为w*h*1.5。
:2: 2 和4:2:0 转换:

最简单的方式:
YUV4:2:2 ---> YUV4:2:0 Y不变,将U和V信号值在行(垂直方向)在进行一次隔行抽样。
YUV4:2:0 ---> YUV4:2:2 Y不变,将U和V信号值的每一行分别拷贝一份形成连续两行数据。

六、测试视频

0、x264-snapshots:http://download.videolan.org/pub/videolan/x264/snapshots/

1、zed可执行文件:https://files.cnblogs.com/files/liusiluandzhangkun/x264.rar

2、测试yuv文件:https://files.cnblogs.com/files/liusiluandzhangkun/rcq.part1.rar   https://files.cnblogs.com/files/liusiluandzhangkun/rcq.part2.rar

3、其他通用测试yuv序列:http://www.cipr.rpi.edu/resource/sequences/sif.html

18、x264编码在zedboard上的实现(软编码)的更多相关文章

  1. zedboard上移植OPENCV库

    zedboard上移植OPENCV库 之前做了很多移植OPENCV库的工作,但是需要包含的各种库,需要交叉编译,X264 ,JPGE ,FFMPGE等等 注意:在<嵌入式系统软硬件协同设计实战指 ...

  2. python基础之Day7part2 史上最清晰字符编码理解

    二.字符编码 基础知识: 文本编辑器存取文件原理与py执行原理异同: 存/写:进入文本编辑器 写内容 保存后 内存数据刷到硬盘 取/读:进入文本编辑器 找到内容 从硬盘读到内存 notepad把文件内 ...

  3. ZedBoard上运行linux系统的准备工作框架

    目标:ZedBoard上运行linux系统. 需要什么:图中上色部分. 应该做哪些工作:上色部分之前的所有步骤. 由上图得知,为了顺利在zedboard上构建嵌入式Linux操作系统,我们一般需要如下 ...

  4. OpenCV在Zedboard上的移植

    OpenCV编译 本文的前提是zynq交叉编译环境设置 下载opencv3.1.0源码,并解压 wget https://github.com/Itseez/opencv/archive/3.1.0. ...

  5. 在 Ubuntu 18.04 LTS 无头服务器上安装 Oracle VirtualBox

    作者: Sk 译者: LCTT qhwdw | 2018-10-12 01:59 本教程将指导你在 Ubuntu 18.04 LTS 无头服务器上,一步一步地安装 Oracle VirtualBox. ...

  6. [转帖]是什么阻止了在18寸(450mm)晶圆上生产芯片?

    是什么阻止了在18寸(450mm)晶圆上生产芯片? https://news.cnblogs.com/n/644247/ 投递人 itwriter 发布于 2019-10-16 14:32 评论(0) ...

  7. JAVA字符编码三:Java应用中的编码问题

    第三篇:JAVA字符编码系列三:Java应用中的编码问题 这部分采用重用机制,引用一篇文章来完整本部分目标. 来源:  Eceel东西在线 问题研究--字符集编码  地址:http://china.e ...

  8. 线上centos6出现软死锁 kernel:BUG: soft lockup

    线上centos6出现软死锁 kernel:BUG: soft lockup 今天线上一台centos6机器用xshell一直连接不上,然后在xshell上显示 Message from syslog ...

  9. Java实现将任何编码方式的txt文件以UTF-8编码方式转存

    本文利用JDK中的BufferedReader和BufferedWriter实现将任何编码方式的txt文件以UTF-8编码方式转存. UTF-8(8-bit Unicode Transformatio ...

随机推荐

  1. javafx Hanoi

    Netbean  java8    source code  :http://files.cnblogs.com/files/rojas/HNT.zip screenshot: 1  model /* ...

  2. 去除inline-block元素间距

  3. DM9000C网卡驱动

    目的:通过学习,掌握如何移植.编写DM9000C网卡驱动 一.概述: DM9000是一款高度集成低功耗快速以太网处理器,该芯片集成了MAC和PHY.DM9000可以和CPU直接连接,支持8位.16位和 ...

  4. VFS相关内容

    http://blog.csdn.net/icyfire0105/article/details/1899927 VFS是一个软件层,用来处理与Unix标准文件系统相关的所有系统调用,是用户应用程序与 ...

  5. 39.mutex 的lock_guard与unique_lock

    #include <iostream> #include <thread> #include <mutex> using namespace std; #defin ...

  6. jmeter--FTP测试

    FTP服务主要提供上传和下载功能.有时间需要我们测试服务器上传和下载的性能.在这里我通过JMeter做一个FTP测试计划的例子. 当然,JMeter官方网站的用户手册也有例子,但由于版本较早,我也算是 ...

  7. C# Find() 与 FindAll()方法的使用

    Find()   :检索与指定匹配的第一个元素 FindAll()   : 检索与指定匹配的所有元素 如:List<string> strList=new List<string&g ...

  8. DG观察日志传输

    --primary端查询v$archived_log视图,确认日志是否被应用:   set lines 300 pages 300 col name for a20 select name,dest_ ...

  9. CISP/CISA 每日一题 四

    CISA 每日一题(答) 连续在线审计技术: 1.系统控制审计检查文件和内嵌审计模型(SCARF/EAM):非常复杂,适用于正常处理不能被中断:通过在组织的主机应用系统中内嵌经特别编写的审计软件,使审 ...

  10. xml数据文件上传至数据库

    上传xml文件数据到数据库思路:首先上传需要建校验xml字段的校验文件,然后程序根据后台写好的xml数据文件路径自动读取数据文件,再上传数据文件到数据库之前先根据校验文件校验上传的数据文件的字段是否合 ...