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 配置 点击查看

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值