CODE 备忘

C++

//dll导入导出定义
extern "C" __declspec(dllexport)
extern "C" __declspec(dllimport)
#define DLLEXPORT __declspec(dllexport)
#define del(o) if(o){delete o;o=NULL;}
 
//callback 回调函数声名
BOOL __stdcall MyFunction(int value,void (__stdcall* MyCallBack)(int value));
typedef void(__stdcall *MyCallBack)(int iLevel);
DLLEXPORT void __stdcall MyFunction(int value);

C#

//c#调用win32 dll#
[DllImport("win32.dll",EntryPoint = "dll_functionname",CharSet = CharSet.Ansi,CallingConvention = CallingConvention.StdCall)]
public static extern int dll_functionname(string str); 

//c#定义回调
[UnmanagedFunctionPointer(CallingConvention.StdCall)]
public delegate void T_CB_OnMessage(UInt32 msg, UInt32 wparam, UInt32 lparam);

//c#与win32 dll对应的结构体定义
[StructLayout(LayoutKind.Sequential)]
public class Data
{
    public Int32 m_iSize;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 40)]
    public Byte[] m_bytes;
}

//win32 dll传出地址转c# 结构体
Data data = new Data();
Marshal.PtrToStructure(ptr, data);

各厂摄像头的rtsp url

海康:
rtsp://[username]:[password]@[ip]:[port]/[codec]/[channel]/[subtype]/av_stream
说明:
username: 用户名。例如admin。
password: 密码。例如12345。
ip: 为设备IP。例如 192.0.0.64。
port: 端口号默认为554,若为默认可不填写。
codec:有h264、MPEG-4、mpeg4这几种。
channel: 通道号,起始为1。例如通道1,则为ch1。
subtype: 码流类型,主码流为main,辅码流为sub。


例如,请求海康摄像机通道1的主码流,Url如下
主码流:
rtsp://admin:12345@192.0.0.64:554/h264/ch1/main/av_stream
rtsp://admin:12345@192.0.0.64:554/MPEG-4/ch1/main/av_stream


子码流:
rtsp://admin:12345@192.0.0.64/mpeg4/ch1/sub/av_stream
rtsp://admin:12345@192.0.0.64/h264/ch1/sub/av_stream


大华:
rtsp://username:password@ip:port/cam/realmonitor?channel=1&subtype=0
说明:
username: 用户名。例如admin。
password: 密码。例如admin。
ip: 为设备IP。例如 10.7.8.122。
port: 端口号默认为554,若为默认可不填写。
channel: 通道号,起始为1。例如通道2,则为channel=2。
subtype: 码流类型,主码流为0(即subtype=0),辅码流为1(即subtype=1)。


例如,请求某设备的通道2的辅码流,Url如下
rtsp://admin:admin@10.12.4.84:554/cam/realmonitor?channel=2&subtype=1

QT

QT 资源文件生成二进制文件,防止qrc资源文件生成过大(out of memory allocating)。
rcc -binary .\res.qrc -o newres.rcc

成员函数生成代码
alt+enter

windeployqt 依赖 windeployqt xxxx.exe

Linux

ubuntu 创建快捷方式 点击链接
ubuntu FTP GUI 安装命令:sudo apt-get install filezilla
导出函数命令:nm -D xxxx.so > xxxx.txt
执行文件elf信息: file xxxxx
查看依赖的库:objdump -x xxx.so | grep NEEDED
查看可执行程序依赖的库:objdump -x 可执行程序名 | grep NEEDED
查看缺少的库:ldd xxx.so,如果某个依赖的库不存在,会打印类似“xxx.so not found”的提示
在所有目录中查找xxx文件:find / -name xxx

Linux 批处理命令

将扩展名为lib的所有文件保存至txt
dir /b *.lib *>0.txt
按名字查找进程:ps -e | grep xxxx
进程完整信息:ps aux
系统启动项文件:/etc/rc.local
文件信息显示日期:ls -lh

Linux 守护进程

test.sh

#!/bin/bash
bin=/home/ros/test.out
while true;
do
        server=`ps aux | grep $bin | grep -v grep`
        if [ ! "$server" ]; then
           nohup $bin &
        fi
        sleep 5
done
  
exit 0

deamon.sh

#!/bin/bash
nohup /home/ros/test.sh &

Linux 编译

linux so动态库的编译,声名时只需要用extern “C”{}把函数括起来
点击链接

ffmpeg android 平台编译

说明:
ffmpeg的编译可由gcc、clang两个编译器编译。clang较新,本文使用gcc进行编译。
编译环境:
ubuntu16.04
android-ndk-r16b ndk下载地址
ffmpeg 4.1.3 ffmpeg下载地址
从上面下载好需要的包,右键解压到对应目录
ndk目录例如:/home/cn/ffmpeg/android-ndk-r16b
ffmpeg目录例如:/home/cn/ffmpeg/ffmpeg
按上面环境路径,开始按下面的步骤执行

1、ndk的环境配置Linux Path路径,这一步很重要,gcc的编译在此生效

 sudo gedit ~/.bashrc
 最后加入一行 export PATH=$PATH:/home/cn/ffmpeg/android-ndk-r16b
 ctrl+s 保存退出

2、进入ffmepg目录,将configure文件的以下内容

SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR)$(SLIBNAME)'

替换成

SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
SLIB_INSTALL_LINKS='$(SLIBNAME)'

3、创建脚本,下面包含各平台的路径
终端至ffmepg源码目录
sudo gedit ./build_android.sh

make clean

NDK=/home/cn/ffmpeg/android-ndk-r16b
ARCH=arm
CPU=armv7-a
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
SYSROOT=$NDK/platforms/android-16/arch-$ARCH/
CROSS_PREFIX=$TOOLCHAIN/bin/arm-linux-androideabi-
PREFIX=$(pwd)/android/$CPU
OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfp -marm -march=$CPU "


echo "Compiling FFmpeg for $CPU"
./configure \
--prefix=$PREFIX \
--enable-neon \
--enable-hwaccels \
--enable-gpl \
--enable-postproc \
--enable-shared \
--enable-jni \
--disable-x86asm \
--enable-mediacodec \
--enable-decoder=h264_mediacodec \
--enable-hwaccel=h264_mediacodec \
--enable-decoder=hevc_mediacodec \
--enable-decoder=mpeg4_mediacodec \
--enable-decoder=vp8_mediacodec \
--enable-decoder=vp9_mediacodec \
--disable-static \
--disable-doc \
--enable-ffmpeg \
--disable-ffplay \
--disable-ffprobe \
--enable-avdevice \
--disable-doc \
--disable-symver \
--cross-prefix=$CROSS_PREFIX \
--target-os=android \
--arch=$ARCH \
--cpu=$CPU \
--enable-cross-compile \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic $ADDI_CFLAGS -I$NDK/sysroot/usr/include -I$NDK/sysroot/usr/include/arm-linux-androideabi -D__ANDROID_API__=16 -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -mthumb -Wa,--noexecstack -Wformat -Werror=format-security -U_FILE_OFFSET_BITS" \
--extra-ldflags="$ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG
echo "The Compilation of FFmpeg for $CPU is completed"

make 
make install
=========================================ARCH CPU配置===================================
#armv8-a
ARCH=arm64
CPU=armv8-a
TOOLCHAIN=$NDK/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64
SYSROOT=$NDK/platforms/android-21/arch-$ARCH/
CROSS_PREFIX=$TOOLCHAIN/bin/aarch64-linux-android-
PREFIX=$(pwd)/android/$CPU
OPTIMIZE_CFLAGS="-march=$CPU"
build_android

#armv7-a
ARCH=arm
CPU=armv7-a
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
SYSROOT=$NDK/platforms/android-21/arch-$ARCH/
CROSS_PREFIX=$TOOLCHAIN/bin/arm-linux-androideabi-
PREFIX=$(pwd)/android/$CPU
OPTIMIZE_CFLAGS="-mfloat-abi=softfp -mfpu=vfp -marm -march=$CPU "
build_android

#x86
ARCH=x86
CPU=x86
TOOLCHAIN=$NDK/toolchains/x86-4.9/prebuilt/linux-x86_64
SYSROOT=$NDK/platforms/android-21/arch-$ARCH/
CROSS_PREFIX=$TOOLCHAIN/bin/i686-linux-android-
PREFIX=$(pwd)/android/$CPU
OPTIMIZE_CFLAGS="-march=i686 -mtune=intel -mssse3 -mfpmath=sse -m32"
build_android

#x86_64
ARCH=x86_64
CPU=x86-64
TOOLCHAIN=$NDK/toolchains/x86_64-4.9/prebuilt/linux-x86_64
SYSROOT=$NDK/platforms/android-21/arch-$ARCH/
CROSS_PREFIX=$TOOLCHAIN/bin/x86_64-linux-android-
PREFIX=$(pwd)/android/$CPU
OPTIMIZE_CFLAGS="-march=$CPU -msse4.2 -mpopcnt -m64 -mtune=intel"
build_android

4、./configure执行

x86 执行 ./configure
arm 执行 ./configure --disable-x86asm 预生成config.mak文件否则./configure生成的是x86版本的so,

5、执行脚本

sudo ./build_android.sh

编译过程中出现的错误处理

编译过程中的错误代码 点击链接

6、ndk-build命令

ndk-build NDK_PROJECT_PATH=. NDK_APPLICATION_MK=Application.mk APP_BUILD_SCRIPT=Android.mk

ffmpeg图像反转180度,图像颠倒的处理,加到avcodec_decode_video2之后

ret = avcodec_decode_video2(pCodecCtx, pFrame, &got_picture, (AVPacket *)packet);	
					pFrame->data[0] += pFrame->linesize[0] * (pCodecCtx->height - 1);
					pFrame->linesize[0] *= -1;
					pFrame->data[1] += pFrame->linesize[1] * (pCodecCtx->height / 2 - 1);
					pFrame->linesize[1] *= -1;
					pFrame->data[2] += pFrame->linesize[2] * (pCodecCtx->height / 2 - 1);
					pFrame->linesize[2] *= -1;

Java Android

Android Studio 创建JNI 点击链接

资源

免费Git托管

GitHub 点击链接
GitLab 点击链接
码云 点击链接
腾讯开发者平台 点击链接
阿里云Code托管平台 点击链接
百度效率云 点击链接

Linux常用软件

terminator

VSCode插件

ssh插件
在这里插入图片描述
sftp 配置 点击查看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值