在这里插入代码片//audio内存泄漏
//audio pts
//ENCInterface.h
//绿条
//没有设备时崩
//接口
//如何把硬件编码对接webrtc中
//video/audio开启或关闭
//码率分辨率帧率控制
//导播离开房间重进房间
网络中途断开socket.io重连,srs->close 重联成功srs->start
264时解码或编码器有时打不开
//第二次点击连线,退流不上去的问题
互动1080采集到是粉色,推出去也是粉色
HRD
HDR
SEI加入时间戳
加入台标
导切

//从互动切回综合audio busy
为什么从互动业务切到综合业务慢:
因为关闭socket.io是同步的,大约2s,因此delete Interface对象得等关闭完成后才能delete。webrtc的音频是独占的,因此需要delete Interface完成后才能,启用综合业务。
如果不用delete Interface,socket.io就可以使用异步模式,但这样会出现音频设备占用的问题,因此需要close内存,现在已经改了一版可以试试。第二种方法,是退出房间后delete conduct。进入房间后new,这样就释放干净了,但这样会导致进入房间比较慢。

现在测试4k-YUAN的用自带的小风扇外挂后依然发热严重,严重时无法用命令切换源。没有发现其他问题。
400-YUAN外挂后没有小风扇,发热程度不影响使用。
reset影响的问题,4k不受影响;400退出登录,拔掉拓展usb后没问题。

connect 为特殊事件,当客户端连接后自动执行
disconnect 为特殊事件,当客户端断开连接后自动执行
connect、disconnect与自定义事件处理方法的函数传入参数不同

alsa_input.usb-MACROSILICON_USB_Video-02.iec958-stereo
alsa_input.usb-MACROSILICON_USB_Video-02.2.iec958-stereo

加flush(),花屏但是不卡,不加flush(),花屏且卡。
buffer_size小了,会花屏,花屏只跟它有关。
1080p30什么都不设置CBR,7M时很稳,但稳定在8M,花屏和卡顿暂未看。11M时稳定在12.5M。0.5M小不起作用。5M和4M稳定在5.5M,4.5M。
1080p30 设置最大+500kb,CBR,7M时稳定在8M。11M稳定在12.5M,但在此之前有比较高的波动。4M时,稳定在4.5M。0.5M在2M稳定。没有卡顿花屏。

半屏幕和重影:两个同时输入,kill后启动默认1080p30,hdmi电视盒子1080p60和sdi i50输入。hdmi:半屏,sdi:重影,两者都是1280x1440p30。连续5次kill,启动后都是这个现象。
拔下sdi输入,留hdmi,连续4次正常。拔下hdmi,留sdi,连续6次hdmi:半屏,sdi:重影,两者都是1280x1440p30。
720p60和1080p30互切,有时720p60时,hdmi,udp播出1080p60,会半屏,且上半屏重影,sdi,udp播出1080p60,但正常。

关于综合业务没有声音:
在root用户下执行
usermod -a -G pulse-access root
gpasswd -a root pulse
gpasswd -a root pulse-access
nohup pulseaudio --system &
0.双空采集棒,N6000裸机
1.执行完AudioVideoStart.sh中的四句后,不带sudo -S,测试得以下2-6结论
2.video0有声音,video2没有声音
3.在root终端,ffplay播放,耳机均听不到声音,但video0有音刷,video2音刷很特别,如果不给video2接入信号,这个特别的音刷也没有。推流到管控平台,video0声音正常,video2没有声音。
4.插拔采集棒,两个都恢复正常。
5.多次测试发现video0,一直是正常的,video2有概率出问题。
6.当音频正常时,通过AudioVideo推个6017,在deviser用户下,ffplay播放6017,耳机是能听到声音的。在deviser目录下执行ffplay -f alsa sysdefault:CARD=Video_1,能正常播放,并且耳机能听到声音。

ALSA lib pcm_dsnoop.c:566:(snd_pcm_dsnoop_open) unable to open slave
[alsa @ 0x3b6a0b5d5800] cannot open audio device sysdefault:CARD=MS2109_1 (Device or resource busy)

root下执行
echo “hotdog” | sudo -S usermod -a -G pulse-access root
echo “hotdog” | sudo -S gpasswd -a root pulse
echo “hotdog” | sudo -S gpasswd -a root pulse-access
echo “hotdog” | nohup sudo -S pulseaudio --system &
这种情况下,发现video0/video2都正常音刷,但是AudioVideo不走音频编码线程。

手套样机:
开机杀死自启动AudioVideo,然后在root下执行ffplay,sdi口无音刷,hdmi有音刷。连续三次这样。
第四,五次,启动四句,但不自启动AudioVidoe也是如此,说明跟应用程序无关。
这种情况下,deviser终端下,ffplay权限不足。把自启动的pulseaudio全杀死后,两者在deviser播放都不需要权限,但还是只有hdmi有,在root下无法播放了。
将四句和AudioVideo都关闭,开机在deviser下,ffplay,hdmi有,sdi音刷。

综合业务:分辨率帧率实时改变
webrtc音频增加HDMI和耳机音频的选项 只用HDMI
优先级最高的两个:
webrtc视频增加SDI和HDMI的选项
互动业务出1080i50
点击断开连线,崩,因为index的原因
root下,ffplay有时播放出出来声音

加入睡眠后连续切换分辨率报错:
[video4linux2,v4l2 @ 0x5f80a8f6000] Some buffers are still owned by the caller on close.
[video4linux2,v4l2 @ 0x5f80a8f6000] Some buffers are still owned by the caller on close.

0080099100002146
/home/deviser/temp/DV2020T/X86/trunk/apps/src/common/WindowsCommon.cpp

房间到期断开 parse_roomstop
//账号异地登陆:
当背包先登陆正常拉远端流播放时,手机点击房间后会先提醒有同名账号,确认进入后,背包正常播放远端的流,但导播端此账号状态被刷新成未连线状态,此时手机app也处于未连线状态,导播台点击连线,手机app进入房间,此时背包依然能播放远端流,手机app点击导播流小窗口后播放导播流,此时背包停止播放远端流。
当手机正常拉远端流播放时,背包登陆后手机app正常,背包点击进入房间后,手机app退出到进入房间界面,并提示“账号异地登陆”。
当手机点击进入房间后,导播未点击连线,此时背包点击进入房间,手机app退出到进入房间界面,同时提示。此时点击导播连线,背包正常拉流。
可见同一个账号在房间里是唯一的,先入的会被后入的顶掉。
//
hw_decoder_init 在example/hw_decode.c
4路背包,实时互动,在服务器合流,mcu架构。
实时业务和综合业务都已经上传到svn,最后一天1.18号

采集两路1280x720 id:80

打包:
DV2020T/X86/trunk/install-libs/package-tools目录下:
sudo cp * /usr/local/bin/
在~/.bashrc

export PATH="$HOME/.local/bin:$PATH"
export PATH="/home/deviser/temp/Qt/5.12.0/gcc_64/bin:$PATH"
export LIB_PATH="/home/deviser/temp/Qt/5.12.0/gcc_64/lib:$LIB_PATH"
export PLUGIN_PATH="/home/deviser/temp/Qt/5.12.0/gcc_64/plugins:$PLUGIN_PATH"
export QML2_PATH="/home/deviser/temp/Qt/5.12.0/gcc_64/qml:$QML2_PATH"

source
将生成的AudioVideo 复制到/home/deviser/temp/DV2020T/release/trunk下
执行
build-upgrade-pack.sh后生成的包在upgrade-pkg中。

硬件编解码:
创建设备信息上下文
av_hwdevice_ctx_create(&device_ref, AV_HWDEVICE_TYPE_QSV,
“auto”, NULL, 0);
找到解码器:
avcodec_find_decoder_by_name(“mjpeg_qsv”);
设置解码像素格式
decodec_ctx->get_format = get_format;
申请空间,设置解码器设备信心上下文?
decodec_ctx->hw_device_ctx = av_buffer_ref(device_ref);
gpu->cpu
av_hwframe_transfer_data(sw_pframe, praw_frame, 0);

ffmpeg 5.0.2
–disable-x86asm --enable-vaapi --enable-libmfx --enable-gpl --enable-decoder=h264 --enable-shared --enable-swscale --enable-nonfree --enable-libfdk-aac --enable-libx265 --enable-libx264 --enable-libfdk-aac --enable-sdl2 --prefix=/usr/local

mediasdk:
/opt/intel/mediasdk

media-driver-intel-media-22.5.4-build:
/usr/local/include
/usr/local/lib

libva-utils-2.16.0-build:
/usr/local/bin

libva:
/usr/local/include
/usr/local/lib

gmmlib-intel-gmmlib-22.2.0:
/usr/local/include
/usr/local/lib

/sbin/ldconfig.real: /usr/local/lib/libva.so.2 不是符号链接

/sbin/ldconfig.real: /usr/local/lib/libigfxcmrt.so.7 不是符号链接

/sbin/ldconfig.real: /usr/local/lib/libva-wayland.so.2 不是符号链接

/sbin/ldconfig.real: /usr/local/lib/libva-x11.so.2 不是符号链接

/sbin/ldconfig.real: /usr/local/lib/libigdgmm.so.12 不是符号链接

sudo ln -sf /usr/local/lib/libva-drm.so.2 /usr/local/lib/libva-drm.so.2.1600.0
sudo ln -sf /usr/local/lib/libva.so.2 /usr/local/lib/libva.so.2.1600.0
sudo ln -sf /usr/local/lib/libva-x11.so.2 /usr/local/lib/libva-x11.so.2.1600.0
sudo ln -sf /usr/local/lib/libva-wayland.so.2 /usr/local/lib/libva-wayland.so.2.1600.0
sudo ln -sf /usr/local/lib/libigdgmm.so.12 /usr/local/lib/libigdgmm.so.12.2.0

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
export LD_LIBRARY_PATH=/usr/local/lib/:$LD_LIBRARY_PATH

export LIBVA_DRIVER_NAME=iHD
export LIBVA_DRIVERS_PATH=/usr/local/lib/dri

export LD_LIBRARY_PATH=/opt/intel/mediasdk/lib: L D L I B R A R Y P A T H e x p o r t M F X H O M E = / o p t / i n t e l / m e d i a s d k / l i b / p k g c o n f i g e x p o r t P K G C O N F I G P A T H = / o p t / i n t e l / m e d i a s d k / l i b / p k g c o n f i g : LD_LIBRARY_PATH export MFX_HOME=/opt/intel/mediasdk/lib/pkgconfig export PKG_CONFIG_PATH=/opt/intel/mediasdk/lib/pkgconfig: LDL​IBRARYP​ATHexportMFXH​OME=/opt/intel/mediasdk/lib/pkgconfigexportPKGC​ONFIGP​ATH=/opt/intel/mediasdk/lib/pkgconfig:PKG_CONFIG_PATH

// av_hwframe_map在ffmpeg3.3以后才有,经过测试av_hwframe_transfer_data的耗时大概是av_hwframe_map的【1.5倍】

deprecated pixel format used, make sure you did set range correctly

av_hwframe_get_buffer函数用于从硬件帧中获取缓冲区,它可以用来获取解码器输出的硬件帧的像素数据,以便进行后续的处理。它也可以用来将解码器输出的硬件帧转换为可以用于编码器的缓冲区,以便将其转换为另一种格式。
av_hwframe_get_buffer
av_hwframe_transfer_get_formats是一个用于检索设备支持的格式列表的函数,它允许用户检查设备是否支持某种特定格式,以及支持哪些参数(如宽度,高度,编码格式,帧率等)。它还可以用于检查设备是否支持某种特定的硬件加速技术,以及设备是否支持某种特定的转码方案。
BT470BG是一种色度空间,它是由YUV格式的色度空间,其中Y代表亮度,U和V分别代表色度和饱和度。在ffplay中,可以使用“-colorspace bt470bg”参数来设置色度空间。

输入yuvj422p,输出nv12,下面这个设置的意义
AV_PIX_FMT_QSV与get_format

//软编解码的像素格式
encodec_ctx->sw_pix_fmt

av_frame_get_best_effort_timestamp

hw_frames_ctx是一个结构体,它用于表示硬件帧上下文,它用于管理硬件帧的分配和释放,以及访问硬件帧的视频帧的缓冲区。它还可以用于硬件解码和编码,因为它可以提供硬件缓冲区。
encoder_ctx->hw_frames_ctx = av_buffer_ref(decoder_ctx->hw_frames_ctx);//它可以把在gpu中解码出来的frame地址给编码器,不用再中间转换到cpu。

av_hwframe_ctx_alloc()为特定的硬件编码器或解码器分配一个硬件帧上下文。它可以用于硬件帧操作,例如转换,缩放或拷贝。它还可以用于设置硬件帧参数,例如缓冲大小,色彩空间等。
avctx->hw_frames_ctx = av_hwframe_ctx_alloc(decode->hw_device_ref);

av_hwframe_ctx_init函数是FFmpeg 5.0.2中的一个新增函数,它的作用是初始化硬件帧上下文,允许用户使用硬件帧。它接受一个AVHWFramesContext结构作为参数,用户可以在其中指定硬件帧的类型、宽度、高度和格式,以及其他一些参数。它还可以用来检查硬件帧的有效性,并且可以在使用硬件帧之前设置一些参数,以确保它们的正确使用。

// 创建硬件帧缓冲区
ret = av_hwframe_ctx_create(&frames_ctx, AV_HWDEVICE_TYPE_QSV,
NULL, NULL, 0);

AVHWFramesContext是ffmpeg中定义的一个结构体,用于描述硬件帧数据的内容和格式。它是一个抽象的接口,可以用于支持多种硬件加速框架,如Intel QSV,NVIDIA CUDA,OpenCL等。

AVCodecContext *codec_ctx;
AVQSVFramesContext *frames_ctx;
// 初始化AVQSVFramesContext
frames_ctx = av_qsv_frames_alloc(codec_ctx);

// 将AVQSVFramesContext绑定到AVCodecContext
ret = av_qsv_frames_bind_context(codec_ctx, frames_ctx);

// 将输入帧放入AVQSVFramesContext
av_qsv_frames_add(frames_ctx, frame);

// 调用编码器
ret = avcodec_encode_video2(codec_ctx, &packet, frame, &got_packet);

参考vaapi_transcode.c,不排除cpu gpu拷贝消耗cpu
/* we need to ref hw_frames_ctx of decoder to initialize encoder’s codec.
Only after we get a decoded frame, can we obtain its hw_frames_ctx */
encoder_ctx->hw_frames_ctx = av_buffer_ref(decoder_ctx->hw_frames_ctx);

用于查找硬件设备的类型,通过给定的硬件设备名称,可以查找到对应的硬件设备类型。
AVHWDeviceType *type = av_hwdevice_find_type_by_name(“qsv”);
int ret = av_hwdevice_ctx_create(&hw_device_ctx, type, NULL, NULL, 0);

它的第五个参数可以直接返回编码器的类型
int av_find_best_stream(AVFormatContext *ic,
enum AVMediaType type,
int wanted_stream_nb,
int related_stream,
const AVCodec **decoder_ret,
int flags);
avcodec_get_hw_config()函数用于获取编解码器的硬件配置,第二个参数index是索引,表示要获取的硬件配置的索引。由于一个编解码器可能有多个硬件配置,因此需要循环遍历来获取所有的硬件配置。

const char *av_hwdevice_get_type_name(enum AVHWDeviceType type);
av_hwdevice_get_type_name()函数用于获取硬件设备类型的名称,它是一个宏定义,参数是AVHWDeviceType类型,返回值是一个字符串,表示对应的硬件设备类型的名称。

AVHWDeviceType av_hwdevice_iterate_types函数用于遍历可用的硬件设备类型,并返回下一个可用的硬件设备类型。它接受一个参数prev,表示上一个可用的硬件设备类型,如果prev为AV_HWDEVICE_TYPE_NONE,则返回第一个可用的硬件设备类型。

AVCodecHWConfig 结构体
pix_fmt:硬件编码器支持的像素格式。
methods:描述硬件编码器的输入和输出类型的掩码。
device_type:硬件编码器所属的类型,例如 VDPAU 或 VAAPI。
使用 AV_CODEC_HW_CONFIG_METHOD_HW_DEVICE_CTX 检查是否使用硬件设备上下文。

把硬件帧hwframe_ctx中的帧数据引用(不确定是否复制)给frame。
int av_hwframe_get_buffer(AVBufferRef *hwframe_ctx, AVFrame *frame, int flags);

AVBufferRef *av_hwframe_ctx_alloc(AVBufferRef *device_ctx);函数用于分配一个AVBufferRef,用于硬件帧的上下文。它的参数是一个指向硬件设备上下文的指针

av_hwframe_ctx_init()函数用于初始化AVBufferRef,它是FFmpeg中用于硬件加速的接口,它可以用于分配和释放硬件帧缓冲区,以及设置硬件帧上下文。

avcodec_reconfig_encoder()

sudo apt-get install libglib2.0-dev
sudo apt-get install libgl1-mesa-dev libglu1-mesa-dev
sudo apt-get install mesa-common-dev

测试N6000:
AudioVideo 1920x1080,mjpeg->qsv_264 30帧 3M id:50%
ffmpeg -re -c:v h264_qsv -i westlife_1080.mp4 -r 30 -c:v h264_qsv -b:v 3M westlife_1080_264_1.mp4 id:30%

DV2020T/X86/trunk/apps/include/common/UiParamCfgAl.h
#define ENABLE_PULL_VIDEO_STREAMS 0

5times ok 2023/3/6 综合实时切换后也没问题

三种分辨率没问题
sdi/hdmi切换没问题,还有硬件要reset。

jiemain kazhu
ALSA lib pcm_dsnoop.c:566:(snd_pcm_dsnoop_open) unable to open slave
[alsa @ 0x28f803d1d400] cannot open audio device sysdefault:CARD=MS2109_1 (Device or resource busy)
无法打开输入流audio2

从720切换到1920x1080p30时出现,视频问题,因该是分辨率问题,颜色没问题。因为拉的流是1280x1440。6015播放也是1280x1440。
切换分辨率后,推流出来的视频是没有声音的,out.es也没有声音。udp6017有声音。

发现一个音频与前一阵突增1.7s,因此视频一直往外发,这一阵音频一直等着,直到视频的pts跟上这帧音频,然后发送出去这帧音频,之后再取这帧音频的下一帧音频。

720和1080的音频+50ms,38分钟,同步,过了5分钟,再听两个分辨率下,音频都滞后。
关于字的黑点,localYUV.yuv是没有的,说明Qt渲染有问题。编码推流出去有,说明编码有问题。
关于音柱颜色,localYUV.yuv正常,说明Qt渲染有问题,编码推流出去有问题,说明编码有问题。
关于跳动,推流出去的跳动,可能是输入源和输出源帧率不同,或者输入源是i的问题。

启动后在综合业务,没有推流,内存占用从1.2g,升到2.1g,但是报错webrtc的错误。

单独运行AVencoder,发现占用内存从1.2g一直上涨,87分钟后涨到3.1g,free一直下降,当下降到150kb时,开始持续从buff/cache中释放内存,此时free维持在150kb,但AVencoder内存占用继续上涨。判定AVencoder内存泄漏导致AudioVideo 90分钟崩。但在综合业务界面发现webrtc在申请内存,猜测是上层调用问题。

4k板块,只能采集一路,如果同时采集两路会降帧率,因为nv12数据量过大。

4k采集卡,一路采集nv12硬件编264/265,id:80,gpu_id:占60

ffmpeg -video_size 3840x2160 -pix_fmt nv12 -framerate 30  -i /dev/video6 -c:v h264_qsv -f mpegts udp://127.0.0.1:6015

4k采集卡,一路渲染,id:80,gpu_id_3D:占20

ffplay -video_size 3840x2160 -pix_fmt nv12 -framerate 30 -i /dev/video4

4k采集卡,一路采集编码+一路渲染 id:80,gpu_id_3D:6 gpu_id:56
不过此时一路采集编码,采集速度只有16帧了。

ffmpeg -video_size 3840x2160 -pix_fmt nv12 -framerate 30  -i /dev/video6 -c:v h264_qsv -f mpegts udp://127.0.0.1:6015
ffplay -video_size 3840x2160 -pix_fmt nv12 -framerate 30 -i /dev/video4

DV2020T 综合相关推荐

  1. 2022-2028年中国商业综合体行业市场前瞻与投资规划分析报告

    [报告类型]产业研究 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了商业综合体行业相关概述.中国商业综合体行业运行环境.分析了中国商业综 ...

  2. 2022-2028年中国城市地下综合管廊建设深度调研及投资前景预测报告

    [报告类型]产业研究 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了城市地下综合管廊行业相关概述.中国城市地下综合管廊行业运行环境.分析 ...

  3. 2021年大数据Hive(十二):Hive综合案例!!!

    全网最详细的大数据Hive文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 前言 Hive综合案例 一.需求描述 二.项目表的字段 三.进 ...

  4. 数据库实验:数据库和表、查询、视图与安全性、存储过程及游标、触发器、综合实验-水果商店进阶

    数据库实验:数据库和表.查询.视图与安全性.存储过程及游标.触发器.综合实验-水果商店进阶 实验一.数据库和表 源码1: 源码2: 小结 实验二.查询 源码 小结 实验三.视图.安全性 源码: 小结 ...

  5. 2019 浙江大学 计算机 科目,2019考研大纲:浙江大学2019年《计算机学科专业基础综合》(单考)(科目代码907)...

    中公浙江研招网温馨提醒您关注考试大纲:[2019考研大纲:浙江大学2019年<计算机学科专业基础综合>(单考)(科目代码907)考试大纲] 2019考研报名答疑群:866383964 浙江 ...

  6. 2020版北大核心期刊目录_榜单|2020武大版核心期刊RCCSE高职高专成高院校学报类自然科学综合、社会科学综合学科权威、核心及准核心期刊目录...

    编者按 <中国学术期刊评价研究报告>(以下简称<RCCSE>)是邱均平教授团队创立的四大科教评价报告之一,于2009年3月正式推出第1版,后于2011年后连续推出了<RC ...

  7. python实训总结报告书_20172304 实验四python综合实践报告

    20172304 实验四python综合实践报告 姓名:段志轩 学号:20172304 指导教师:王志强 课程:Python程序设计 实验时间:2020年5月13日至2020年6月14日 实验分析 本 ...

  8. Android项目框架综合实例

    综合使用ViewPager.Fragment.RecycleView等,实现类似"网易新闻浏览器 "的项目综合框架,要求实现: 底部导航,分别是"首页",&qu ...

  9. Tensorflow 全网最全学习资料汇总之框架平台的综合对比【3】

    作为机器学习领域.尤其是 Python 生态圈最受欢迎的框架平台,TensorFlow 具有许多吸引开发者的优点.其中最显而易见的是谷歌的技术支持和完善的社区(庞大用户群).这些都为 TensorFl ...

最新文章

  1. CentOS7.4下DNS服务器软件BIND安装及相关的配置(一)
  2. Node.js和NoSQL开发比特币加密货币应用程序(下)
  3. python怎么变成竖行_python 处理文本 列变成行
  4. Spring Web应用程序的最大缺陷
  5. vivado 仿真_提高Vivado效率一种自研工具介绍
  6. 【强化学习】Policy Gradient原理
  7. 中国联通被指乱扣费 返还金额限制用
  8. vue组件transition的使用(demo演示) - 教程篇
  9. linux 下 eclipse 开发环境的搭建
  10. java设置按钮调用问题_按钮相关问题:尝试在空对象引用上调用虚方法
  11. flink源码分析_Flink源码分析之深度解读流式数据写入hive
  12. 计算机二级考试公共基础知识都是一样的吗,计算机二级公共基础知识全国一样吗?...
  13. mac 中的 zip 和 unzip 命令
  14. Java中数据库模糊查询写法
  15. 多线程小题 —— 设计火车票模拟程序
  16. 屏幕录像专家录制视频时不能全屏
  17. C++:重载、重写、重定义
  18. 上学的时候写的文本分割器
  19. 王洪涛:大数据技术的最终目标是应用
  20. 位数不足前面补0mysql语句_SQL语句 不足位数补0

热门文章

  1. 如何组织一场安全、可靠、高效的网络实战攻防演习?
  2. 深度盘点:一文详解数据分析中100个常用指标和术语
  3. 双11中奖名单公布啦
  4. 如何解决飞思卡尔芯片使用监控程序产生的冲突问题
  5. 智能运维探索:有一种多指标异常检测方案,你可能没用过...
  6. TikTok在国内运营一个月,20万粉丝蛮简单的,绝对避免抖音国际版零播放问题
  7. 新手入门linux必看
  8. 导数、偏导数以及梯度
  9. 自动化立体仓库使用流程!海格里斯自动化立体库流程:入库——出库——拣选
  10. 中层管理者八大绝招 —— 如何培养基层管理者?