最近因为一些需求,开始学习 ffmgeg 在android 上使用.

使用的环境:

1,VMware V8 虚似机 安装的 FedoraV18 系统.(下载地址,请baidu),虚似机,最好有20-30G的空间,ndk解压占用,1.5G android-ndk-r10b

2,android-ndk32-r10b-linux-x86.tar.tar 下载地址(目前 天C 的力量,所以 http://developer.android.com/sdk/index.html 无法打开 ):

http://wear.techbrood.com/tools/sdk/ndk/index.html(据说 sdk是同步的.)

3,ffmpeg-2.6.tar.bz2

下载地址:http://ffmpeg.org/download.html#releases

4,rockplayer_ffmpeg_git_20100418.zip

rockplayer 是什么?

  

Rockplayer受益于开源项目,也回报开源社区。

    • 1.7.0开始使用的FFmpeg库

      包含了取自git master repository的FFmpeg源码、RockPlayer使用的脚本。脚本内含详细的文档。

    • 1.7.0之前使用的FFmpeg库

      包含了FFmpeg源码,NDK需要的android.mk。请根据需要注释或放出所需要的变量组,更多说明见zip包里的readme.rockplayer。

    • ...

下载地址:http://www.rockplayer.com/download/rockplayer_ffmpeg_git_20100418.zip

  

  5,SSH Secure Shell Client 连接linux .(baidu SSH Secure Shell Client 下载).

感谢:

褐色狸花猫 的文章 <FFmpeg在Android上的移植之第一步>:http://blog.sina.com.cn/s/blog_69a04cf40100x1fr.html

ROMAN10 的文章 <How to Build FFmpeg for Android> :http://www.roman10.net/how-to-build-ffmpeg-for-android/

http://stackoverflow.com/questions/24853599/compiling-ffmpeg-2-3-with-android-ndk-r10

  http://www.roman10.net/how-to-build-android-applications-based-on-ffmpeg-by-an-example/

开始:

  1,解压 ndk.使用 tar 命令解压 android-ndk32-r10b-linux-x86.tar.tar 包 (tar --help 查看帮助) 解压到指定位置,\

  本例中是:/home/android-ndk-r10b   .

  2,解压 ffmpge,或 rockplayer . (unzip --help)

  本例中是:/home/test

  

  3,build ffmpeg 或rockplayer .

  3.1 ffmpeg 的 build_andriod_ffmpeg_right.sh 是:

正确sh

#!/bin/bash

######################################################
# FFmpeg builds script for Android+ARM platform
#
# This script is released under term of
# CDDL (http://www.opensource.org/licenses/cddl1)
# Wrote by pinxue (~@gmail.com) from RockPlayer.com
# 2010-8 ~ 2011-4
###################################################### ######################################################
# Usage:
# put this script in top of FFmpeg source tree
# ./build_android
#
# It generates binary for following architectures:
# ARMv6
# ARMv6+VFP
# ARMv7+VFPv3-d16 (Tegra2)
# ARMv7+Neon (Cortex-A8)
#
# Customizing:
# 1. Feel free to change ./configure parameters for more features
# 2. To adapt other ARM variants
# set $CPU and $OPTIMIZE_CFLAGS
# call build_one
###################################################### NDK=/home/android-ndk-r10b
PLATFORM=$NDK/platforms/android-18/arch-arm/
PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86 function build_one
{
./configure --target-os=linux \
--prefix=$PREFIX \
--enable-cross-compile \
--extra-libs="-lgcc" \
--arch=arm \
--cc=$PREBUILT/bin/arm-linux-androideabi-gcc \
--cross-prefix=$PREBUILT/bin/arm-linux-androideabi- \
--nm=$PREBUILT/bin/arm-linux-androideabi-nm \
--sysroot=$PLATFORM \
--extra-cflags=" -O3 -fpic -DANDROID -DHAVE_SYS_UIO_H=1 -Dipv6mr_interface=ipv6mr_ifindex -fasm -Wno-psabi -fno-short-enums -fno-strict-aliasing -finline-limit=300 $OPTIMIZE_CFLAGS " \
--disable-shared \
--enable-static \
--extra-ldflags="-Wl,-rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -nostdlib -lc -lm -ldl -llog" \
--disable-everything \
--enable-demuxer=mov \
--enable-demuxer=h264 \
--disable-ffplay \
--enable-protocol=file \
--enable-avformat \
--enable-avcodec \
--enable-decoder=rawvideo \
--enable-decoder=mjpeg \
--enable-decoder=h263 \
--enable-decoder=mpeg4 \
--enable-decoder=h264 \
--enable-parser=h264 \
--disable-network \
--enable-zlib \
--disable-avfilter \
--disable-avdevice \
$ADDITIONAL_CONFIGURE_FLAG make clean
make -j4 install
$PREBUILT/bin/arm-linux-androideabi-ar d libavcodec/libavcodec.a inverse.o
$PREBUILT/bin/arm-linux-androideabi-ld -rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -soname libffmpeg.so -shared -nostdlib -z noexecstack -Bsymbolic --whole-archive --no-undefined -o $PREFIX/libffmpeg.so libavcodec/libavcodec.a libavformat/libavformat.a libavutil/libavutil.a libswscale/libswscale.a -lc -lm -lz -ldl -llog --warn-common --dynamic-linker=/system/bin/linker $PREBUILT/lib/gcc/arm-linux-androideabi/4.8/libgcc.a
} # arm v6
CPU=armv6
OPTIMIZE_CFLAGS="-marm -march=$CPU"
PREFIX=./android/$CPU
ADDITIONAL_CONFIGURE_FLAG=
build_one #arm v7vfpv3
CPU=armv7-a
OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfpv3-d16 -marm -march=$CPU "
PREFIX=./android/$CPU
ADDITIONAL_CONFIGURE_FLAG=
build_one #arm v7vfp
CPU=armv7-a
OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfp -marm -march=$CPU "
PREFIX=./android/$CPU-vfp
ADDITIONAL_CONFIGURE_FLAG=
build_one #arm v7n
CPU=armv7-a
OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=neon -marm -march=$CPU -mtune=cortex-a8"
PREFIX=./android/$CPU-v7n
ADDITIONAL_CONFIGURE_FLAG=--enable-neon
build_one #arm v6+vfp
CPU=armv6
OPTIMIZE_CFLAGS="-DCMP_HAVE_VFP -mfloat-abi=softfp -mfpu=vfp -marm -march=$CPU"
PREFIX=./android/${CPU}_vfp
ADDITIONAL_CONFIGURE_FLAG=
build_one

rockplayer 的 build_andriod_rockplayer_right.sh 是:

正确sh

#!/bin/bash

######################################################
# FFmpeg builds script for Android+ARM platform
#
# This script is released under term of
# CDDL (http://www.opensource.org/licenses/cddl1)
# Wrote by pinxue (~@gmail.com) from RockPlayer.com
# 2010-8 ~ 2011-4
###################################################### ######################################################
# Usage:
# put this script in top of FFmpeg source tree
# ./build_android
#
# It generates binary for following architectures:
# ARMv6
# ARMv6+VFP
# ARMv7+VFPv3-d16 (Tegra2)
# ARMv7+Neon (Cortex-A8)
#
# Customizing:
# 1. Feel free to change ./configure parameters for more features
# 2. To adapt other ARM variants
# set $CPU and $OPTIMIZE_CFLAGS
# call build_one
###################################################### NDK=/home/android-ndk-r10b
PLATFORM=$NDK/platforms/android-18/arch-arm/
PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86 function build_one_r6
{
./configure \
--disable-shared \
--enable-static \
--enable-gpl \
--enable-version3 \
--enable-nonfree \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--disable-ffserver \
--disable-avdevice \
--disable-avfilter \
--disable-postproc \
--enable-small \
--cross-prefix=$PREBUILT/bin/arm-linux-androideabi- \
--enable-cross-compile \
--target-os=linux \
--extra-cflags="-I$PLATFORM/usr/include" \
--extra-ldflags="-L$PLATFORM/usr/lib -nostdlib" \
--arch=arm \
--disable-symver \
--disable-debug \
--disable-stripping \
$ADDITIONAL_CONFIGURE_FLAG
sed -i 's/HAVE_LRINT 0/HAVE_LRINT 1/g' config.h
sed -i 's/HAVE_LRINTF 0/HAVE_LRINTF 1/g' config.h
sed -i 's/HAVE_ROUND 0/HAVE_ROUND 1/g' config.h
sed -i 's/HAVE_ROUNDF 0/HAVE_ROUNDF 1/g' config.h
sed -i 's/HAVE_TRUNC 0/HAVE_TRUNC 1/g' config.h
sed -i 's/HAVE_TRUNCF 0/HAVE_TRUNCF 1/g' config.h
make clean
make -j4 install
$PREBUILT/bin/arm-linux-androideabi-ar d libavcodec/libavcodec.a inverse.o
$PREBUILT/bin/arm-linux-androideabi-ld -rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -soname libffmpeg.so -shared -nostdlib -z noexecstack -Bsymbolic --whole-archive --no-undefined -o $PREFIX/libffmpeg.so libavcodec/libavcodec.a libavformat/libavformat.a libavutil/libavutil.a libswscale/libswscale.a -lc -lm -lz -ldl -llog --warn-common --dynamic-linker=/system/bin/linker $PREBUILT/lib/gcc/arm-linux-androideabi/4.8/libgcc.a
}
function build_one_r6_2
{
$PREBUILT/bin/arm-linux-androideabi-ar d libavcodec/libavcodec.a inverse.o
$PREBUILT/bin/arm-linux-androideabi-ld -rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -soname libffmpeg.so -shared -nostdlib -z noexecstack -Bsymbolic --whole-archive --no-undefined -o $PREFIX/libffmpeg.so libavcodec/libavcodec.a libavformat/libavformat.a libavutil/libavutil.a libswscale/libswscale.a -lc -lm -lz -ldl -llog --warn-common --dynamic-linker=/system/bin/linker $PREBUILT/lib/gcc/arm-linux-androideabi/4.8/libgcc.a
} #arm armv6
CPU=armv6-a
OPTIMIZE_CFLAGS="-marm -march=$CPU"
PREFIX=./android/$CPU
ADDITIONAL_CONFIGURE_FLAG=
build_one_r6 #arm v7vfpv3
CPU=armv7-a
OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfpv3-d16 -marm -march=$CPU "
PREFIX=./android/$CPU-vfpv3
ADDITIONAL_CONFIGURE_FLAG=
build_one_r6 #arm v7vfp
CPU=armv7-a
OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfp -marm -march=$CPU "
PREFIX=./android/$CPU-vfp
ADDITIONAL_CONFIGURE_FLAG=
build_one_r6 #arm v7n
CPU=armv7-a
OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=neon -marm -march=$CPU -mtune=cortex-a8"
PREFIX=./android/$CPU
ADDITIONAL_CONFIGURE_FLAG=--enable-neon
build_one_r6 #arm v6+vfp
CPU=armv6
OPTIMIZE_CFLAGS="-DCMP_HAVE_VFP -mfloat-abi=softfp -mfpu=vfp -marm -march=$CPU"
PREFIX=./android/${CPU}_vfp
ADDITIONAL_CONFIGURE_FLAG=
build_one_r6 #arm v7vfp
#CPU=armv7-a
#OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfp -marm -march=$CPU "
#PREFIX=./android/$CPU-vfp
#ADDITIONAL_CONFIGURE_FLAG=
#build_one
#arm v7n
#CPU=armv7-a
#OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=neon -marm -march=$CPU -mtune=cortex-a8"
#PREFIX=./android/$CPU
#ADDITIONAL_CONFIGURE_FLAG=--enable-neon
#build_one
#arm v6+vfp
#CPU=armv6
#OPTIMIZE_CFLAGS="-DCMP_HAVE_VFP -mfloat-abi=softfp -mfpu=vfp -marm -march=$CPU"
#PREFIX=./android/${CPU}_vfp
#ADDITIONAL_CONFIGURE_FLAG=
#build_one

  将 build_andriod_rockplayer_right.sh 放入 /home/test/rockplayer 目录下.

  将 build_andriod_ffmpeg_right.sh 放入 /home/test/ffmpeg-2.6 目录下.

  

  //给执行的权限

[root@localhost ffmpeg-2.6]# chmod 777 build_andriod_ffmpeg_right.sh

//执行

[root@localhost ffmpeg-2.6]# ./build_andriod_ffmpeg_right.sh

经过等待就可以见结果了.

INSTALL libavutil/libavutil.a
INSTALL doc/ffprobe.1
INSTALL doc/ffprobe-all.1
INSTALL doc/ffmpeg-utils.1
INSTALL doc/ffmpeg-scaler.1
INSTALL doc/ffmpeg-resampler.1
INSTALL doc/ffmpeg-codecs.1
INSTALL doc/ffmpeg-bitstream-filters.1
INSTALL doc/ffmpeg-formats.1
INSTALL doc/ffmpeg-protocols.1
INSTALL doc/libavutil.3
INSTALL doc/libswscale.3
INSTALL doc/libswresample.3
INSTALL doc/libavcodec.3
INSTALL doc/libavformat.3
INSTALL doc/ffprobe.1
INSTALL doc/ffprobe-all.1
INSTALL doc/ffmpeg-utils.1
INSTALL doc/ffmpeg-scaler.1
INSTALL doc/ffmpeg-resampler.1
INSTALL doc/ffmpeg-codecs.1
INSTALL doc/ffmpeg-bitstream-filters.1
INSTALL doc/ffmpeg-formats.1
INSTALL doc/ffmpeg-protocols.1
INSTALL doc/libavutil.3
INSTALL doc/libswscale.3
INSTALL doc/libswresample.3
INSTALL doc/libavcodec.3
INSTALL doc/libavformat.3
CP ffprobe
STRIP ffprobe
INSTALL install-progs-yes
INSTALL ffprobe
[root@localhost ffmpeg-2.6]#

编译结果:

  在这个目录中"PREFIX=./android/$CPU ".

  

  

rockplayer 的so文件,比ffmpeg的so文件小了一半.

  可以开始在android 中开整了.....-_-......

说明可能出现的错误:

Q1:PLATFORM=$NDK/platforms/android-18/arch-arm/

选择不同android对应的平台:

Q2:PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86

选择可执行的文件:

arm-linux-androideabi-4.8 这个版本要与

function build_one 中或 function build_one_r6 中

最后:

make clean
make -j4 install
$PREBUILT/bin/arm-linux-androideabi-ar d libavcodec/libavcodec.a inverse.o
$PREBUILT/bin/arm-linux-androideabi-ld -rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -soname libffmpeg.so -shared -nostdlib -z noexecstack -Bsymbolic --whole-archive --no-undefined -o $PREFIX/libffmpeg.so libavcodec/libavcodec.a libavformat/libavformat.a libavutil/libavutil.a libswscale/libswscale.a -lc -lm -lz -ldl -llog --warn-common --dynamic-linker=/system/bin/linker $PREBUILT/lib/gcc/arm-linux-androideabi/4.8/libgcc.a
}

这个版本相对应.

不然会报

/home/android-ndk-r10b/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86/bin/arm-linux-androideabi-ld: error: cannot open /home/android-ndk-r10b/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86/lib/gcc/arm-linux-androideabi/4.1/libgcc.a: No such file or directory
/home/android-ndk-r10b/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86/bin/arm-linux-androideabi-ld: error: cannot open /home/android-ndk-r10b/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86/lib/gcc/arm-linux-androideabi/4.1/libgcc.a: No such file or directory
libavcodec/error_resilience.c:725: error: undefined reference to '__aeabi_idivmod'
libavcodec/error_resilience.c:1177: error: undefined reference to '__aeabi_idiv'
libavcodec/error_resilience.c:1178: error: undefined reference to '__aeabi_idiv'
libavcodec/error_resilience.c:1179: error: undefined reference to '__aeabi_idiv'
libavcodec/error_resilience.c:1180: error: undefined reference to '__aeabi_idiv'
libavcodec/error_resilience.c:403: error: undefined reference to '__aeabi_idivmod'
./libavutil/mem.h:95: error: undefined reference to '__aeabi_uidiv'
./libavutil/mem.h:95: error: undefined reference to '__aeabi_uidiv'
libavcodec/error_resilience.c:220: error: undefined reference to '__aeabi_uidiv'
libavcodec/error_resilience.c:224: error: undefined reference to '__aeabi_ldivmod'
libavcodec/h263dec.c:634: error: undefined reference to '__aeabi_idivmod'
libavcodec/h264.c:466: error: undefined reference to '__aeabi_idivmod'
libavcodec/h264_ps.c:495: error: undefined reference to '__aeabi_uidiv'
libavcodec/h264_slice.c:1754: error: undefined reference to '__aeabi_uidivmod'
libavcodec/mpeg4videodec.c:2320: error: undefined reference to '__aeabi_ldivmod'
libavcodec/mpeg4videodec.c:2307: error: undefined reference to '__aeabi_ldivmod'
libavcodec/mpeg4videodec.c:2308: error: undefined reference to '__aeabi_ldivmod'
libavformat/dump.c:121: error: undefined reference to '__aeabi_uldivmod'
libavformat/dump.c:123: error: undefined reference to '__aeabi_uldivmod'
libavformat/dump.c:121: error: undefined reference to '__aeabi_uldivmod'
libavformat/dump.c:123: error: undefined reference to '__aeabi_uldivmod'
libavformat/dump.c:93: error: undefined reference to '__aeabi_l2d'
libavformat/dump.c:99: error: undefined reference to '__aeabi_l2d'
libavformat/dump.c:93: error: undefined reference to '__aeabi_l2d'
libavformat/dump.c:99: error: undefined reference to '__aeabi_l2d'
libavformat/mov.c:2517: error: undefined reference to '__aeabi_uidivmod'
libavformat/mov.c:2517: error: undefined reference to '__aeabi_uidivmod'
libavformat/utils.c:2282: error: undefined reference to '__aeabi_l2f'
libavutil/camellia.c:139: error: undefined reference to '__aeabi_llsl'
libavutil/camellia.c:139: error: undefined reference to '__aeabi_llsr'
libavutil/camellia.c:140: error: undefined reference to '__aeabi_llsl'
libavutil/camellia.c:140: error: undefined reference to '__aeabi_llsr'
libavutil/eval.c:211: error: undefined reference to '__aeabi_d2ulz'
libavutil/eval.c:211: error: undefined reference to '__aeabi_ul2d'
libavutil/eval.c:287: error: undefined reference to '__aeabi_d2lz'
libavutil/eval.c:287: error: undefined reference to '__aeabi_d2lz'
libavutil/eval.c:211: error: undefined reference to '__aeabi_d2ulz'
libavutil/eval.c:211: error: undefined reference to '__aeabi_ul2d'
libavutil/eval.c:287: error: undefined reference to '__aeabi_d2lz'
libavutil/eval.c:287: error: undefined reference to '__aeabi_d2lz'
libavutil/timecode.c:64: error: undefined reference to '__aeabi_uidivmod'
libswscale/utils.c:299: error: undefined reference to '__aeabi_llsl'

Q3:gcc is unable to create an executable file.
If gcc is a cross-compiler, use the --enable-cross-compile option.
Only do this if you know what cross compiling means.
C compiler test failed.

sh 中 gcc的路径配置出错.

"--cc=$PREBUILT/bin/arm-linux-androideabi-gcc \"

arm-linux-androideabi-gcc 是 gcc for android apk 里的一个linux可执行文件

winhex  arm-linux-androideabi-gcc 这个文件可见:

可参考: hhhbbb 的文章<elf格式分析> :http://blog.csdn.net/hhhbbb/article/details/6855004

Q4:错误error: undefined reference to 'atexit'    ,noexecstack: unknown -z option,

  unknown  --warn-once

$PREBUILT/bin/arm-eabi-ld -rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -soname libffmpeg.so -shared -nostdlib -z,noexecstack -Bsymbolic --whole-archive --no-undefined -o $PREFIX/libffmpeg.so libavcodec/libavcodec.a libavformat/libavformat.a libavutil/libavutil.a -lc -lm -lz -ldl -llog --warn-once --dynamic-linker=/system/bin/linker $PREBUILT/lib/gcc/arm-eabi/4.4.0/libgcc.a

"-z,noexecstack" 语法错误

通过 arm-eabi-ld  --help可知(可能不同的版本,命令参数不同.)

应是  -z noexecstack

--warn-once  改为 --warn-common

有问题的sh文件:

http://roman10.net/src/build_android_r6.txt

Q5:其它错误信息,怎么查看:

  详细的错误信息: ffmpeg/config.log 可以查看

ffmpeg(2.6) rockplayer android 下编译 小记.的更多相关文章

  1. 【转】Android下编译jni库的二种方法(含示例)

    原文网址:http://blog.sina.com.cn/s/blog_3e3fcadd01011384.html 总结如下:两种方法是:1)使用Android源码中的Make系统2)使用NDK(从N ...

  2. 【转】Android下编译jni库的二种方法(含示例) -- 不错

    原文网址:http://blog.sina.com.cn/s/blog_3e3fcadd01011384.html 总结如下:两种方法是:1)使用Android源码中的Make系统2)使用NDK(从N ...

  3. 【记录一个问题】libtask无法在android下编译通过

    源码来自:https://github.com/msteinert/libtask 首先是asm.S无法编译通过. 其次,编译context.c出现这些错误: .//context.c:124:19: ...

  4. linux下编译ffmpeg 引入外部库x264

    Found no assembler Minimum version is nasm-2.13 If you really want to compile without asm, configure ...

  5. Android 环境下编译FFmpeg

    Android 环境下编译FFmpeg 开发环境:Ubuntu 12.04.2 LTS , android-sdk-linux, android-ndk-r8e 一 .X264 编译 1.    X2 ...

  6. 编译Android下可用的FFmpeg+x264

    编译Android下可用的FFmpeg+x264 编译x264: 下载最新版的x264 ftp://ftp.videolan.org/pub/videolan/x264/snapshots/ 1.解压 ...

  7. [原]如何用Android NDK编译FFmpeg

    我们知道在Ubuntu下直接编译FFmpeg是很简单的,主要是先执行./configure,接着执行make命令来编译,完了紧接着执行make install执行安装.那么如何使用Android的ND ...

  8. 手把手图文并茂教你用Android Studio编译FFmpeg库并移植

    转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/52661331 之前曾写过一篇&l ...

  9. 一步步实现windows版ijkplayer系列文章之四——windows下编译ijkplyer版ffmpeg

    一步步实现windows版ijkplayer系列文章之一--Windows10平台编译ffmpeg 4.0.2,生成ffplay 一步步实现windows版ijkplayer系列文章之二--Ijkpl ...

随机推荐

  1. print、sp_helptext的限制与扩展

    在SQL中,使用动态SQL是很常见的.有些复杂的计算,或是存储过程,代码很长,中间可能有多次执行SQL语句.而调试拼串的SQL语句却是件痛苦的事,很难看出来运行的语句是什么.所以我会经常使用print ...

  2. 墙裂推荐一本案例驱动的PhoneGap入门书,早看早收货

    清华大学出版社推出的<构建跨平台APP:PhoneGap移动应用实战> 零门槛学APP开发 从无到有 循序渐进 20余个示例APP 3个项目APP 全平台à跨终端à移动开发 完美生命周期: ...

  3. Qml 写的弹出层控件

    QML弹出窗口组件,灯箱效果.动画效果,可拖拽 核心思路:一个mask层,一个最顶层,都用rectangle,禁止事件穿透 使用 Popup { id: popup width: 200; heigh ...

  4. opencv二值化处理

    #include "stdafx.h"//对一张图片进行二值化处理 IplImage *pSrclmg =NULL;//载入的图片IplImage *pDeclmg =NULL;/ ...

  5. C段渗透+cain嗅探

    其实吧这篇文件也是一个大概的了解和思路篇...没什么技术含量,但是你可以你可以从思路中来获得;其他的技术都是靠自己去摸索,我说了半天还是别人的,不如自己直接试试,这样效果比我直接告诉你的更加的深刻.. ...

  6. 简单介绍一下python Queue中常用的方法

    Queue.qsize() 返回队列的大小 Queue.empty() 如果队列为空,返回True,反之False Queue.full() 如果队列满了,返回True,反之FalseQueue.fu ...

  7. shutil复制粘贴和压缩

    shutil复制粘贴和压缩 shutil 高级的文件.文件夹.压缩包处理模块 @1).将文件内容拷贝到另一个文件中 import shutil shutil.copyfileobj(open(&quo ...

  8. ListView加checkBox可以实现全选等功能

    1.效果图 2.LIteView_item布局 <?xml version="1.0" encoding="utf-8"?> <Relativ ...

  9. 【Network】UDP 大包怎么发? MTU怎么设置?

    这里主要用UDP来发送视频,当发送的数据大于1500时分包发送,保证每包小于1500.发送好办,分割后循环发就可以了,关键是接收时的处理.先做一下处理的方法 :发送时每包上面加上标识,比如RTP的做法 ...

  10. MySQL学习笔记(2/2)

    SQL种类 DDL/DML/DQL/DCL 中括号[]里面的表示可选,大括号{}里面的表示必须从里面选一个,FEILED表示字段. 数据定义语言(DDL):CREATE.DROP.ALTER 用于定义 ...