哎呀小娘子你莫愁
0. 前言
关于机载计算机;
1. APSync
- 说到机载计算机Companion computer就不得不提另一个关键词APSync;
- APSync简化了机载计算机的设置,以便它可以为ArduPilot提供额外的功能,并简化与互联网服务的集成;
- 提供日志下载和视频流转发到地面站的功能;
- 机载计算机通过串口与飞控连接,将飞控的log转存到自己的文件系统中,并创建一个网络热点,用于给运行地面站的PC连接,PC连接该热点后可以:1)从机载计算机下载日志;2)查看视频流;3)连接热点后地面站可以通过UDP连接到飞控;
- http://10.0.1.128 (Configuration pages)
- http://10.0.1.128:8000 (Which shows a video streaming on/off button)
- PC连接到网络热点后(网络热点名称为ardupilot,密码也是ardupilot),地面站可通过UDP,port 14550来连接到飞控;
- 关于下载log:可以用这个脚本来下载机载计算机的日志到PC:apsync-download-logs,或者从机载计算机上拔下SD卡来读取;
- 关于视频流:视频流被发送到请求遥测数据的第一个地面站的IP地址;地面站查看视频流:右击Hub ~> Video ~> Set GSreamer Source;
- PC连接热点后可通过SSH工具来远程登录到机载计算机;
- 飞控的数据如何路由到各种程序的?
How flight controller data is routed to various programs:
https://ardupilot.org/dev/docs/apsync-intro.html#how-flight-controller-data-is-routed-to-various-programs - Installing APSync and setting the autopilot:https://ardupilot.org/dev/docs/apsync-intro.html#installing-apsync
2. 阿木实验室SpireCV-SDK
参考文献:SpireCV-SDK
2.1 简介
主要功能包括吊舱/相机控制、视频保存、推流、目标检测、识别与跟踪等。旨在为智能无人系统开发者提供高性能、高可靠、接口简洁、功能丰富的视觉处理功能。
3. SpireCV-SDK实践历程
编译源码:
cd ~/SpireCV/build
sudo make install
查看应用程序名称:
ls ~/SpireCV/build
执行应用程序:
./app-name
3.1 新增一个demo,如何修改CMakeLists.txt让编译器编译自己的demo ?
方法:在VSCode中搜索现有的demo的cpp文件名,看看在哪里使用了这些文件名,你会发现仅在同一目录的CMakeLists.txt中使用了这些cpp文件名,因此只需要修改这些CMakeLists.txt即可。
如:在/home/hyl20/SpireCV/CMakeLists.txt 中添加:
add_executable(CameraReading2 samples/demo/camera_reading2.cpp)
target_link_libraries(CameraReading2 sv_world)
其中camera_reading2.cpp
就是我新添加的demo的名称。
3.2 更改视觉源输入类型
- 以视频文件作为输入源
在当前目录下新建一个mp4文件如000.mp4,以camera_reading2.cpp为例,做以下代码修改:cap.setVideoPath("/home/hyl20/SpireCV/samples/demo/000.mp4"); cap.open(sv::CameraType::VIDEO, 0); // CameraID 0
- 以RTSP视频流作为输入源
以camera_reading2.cpp为例,做以下代码修改:
报错?如何解决?cap.setRtspUrl("rtsp://192.168.144.25:8554/main.264"); cap.setPort(8554); cap.open(sv::CameraType::RTSP, 0); // CameraID 0
修改代码:
SpireCV/video_io/sv_video_input.cpp中的else if (this->_type == CameraType::RTSP) {…}
其中cv::CAP_ANY会自动检测数据来源类型,opencv会自行调用gstreamer中合适的功能函数。//原来的代码 sprintf(pipe, "rtspsrc location=%s W=%d H=%d FPS=%d latency=100 ! \ application/x-rtp,media=video ! rtph264depay ! parsebin ! avdec_h264 ! \ videoconvert ! appsink sync=false", this->_rtsp_url.c_str(), this->_width, this->_height, this->_fps); this->_cap.open(pipe, cv::CAP_GSTREAMER); //修改后的代码: sprintf(pipe, "rtspsrc location=%s latency=100 ! \ application/x-rtp,media=video ! rtph264depay ! parsebin ! avdec_h264 ! \ videoconvert ! \ videorate ! video/x-raw,framerate=%d/1 ! \ videoscale ! video/x-raw,width=%d,height=%d ! \ appsink sync=false", this->_rtsp_url.c_str(), this->_fps, this->_width, this->_height ); this->_cap.open(pipe, cv::CAP_GSTREAMER); //或者改成: sprintf(pipe, "%s",this->_rtsp_url.c_str()); this->_cap.open(pipe, cv::CAP_ANY);
3.3 相机内参标定
- 1)采用读取视频文件的方式作为视觉输入源,修改calibrate_camera_charuco.cpp中的代码:
inputVideo.setWH(imW, imH); inputVideo.setFps(fps); inputVideo.open(c_type, camId); //修改为: inputVideo.setVideoPath("/home/hyl20/SpireCV/samples/demo/bd1.mp4"); inputVideo.setWH(imW, imH); inputVideo.setFps(fps); inputVideo.open(sv::CameraType::VIDEO, camId); // CameraID 0
- 2)打印一张标定图案(A4纸)
- 3)录制一段标定图案的视频保存为:/home/hyl20/SpireCV/samples/demo/bd1.mp4
拍摄注意事项:不同角度、不同距离拍摄;
- 4)编译代码
cd ~/SpireCV/build sudo make install
- 5)执行标定程序
./CameraCalibrarion -w=5 -h=7 -sl=0.035 -ml=0.021 -d=6 -ci=0 calib.yaml
- 注意事项
- w为标定板一行的格子数,h为标定板一列的格子数,sl为测量黑色实心方块的边长,ml为测量黑色二维码方块的边长,ci为Camera ID数;
- 标定时需要拍摄不同距离、不同像平面位置、不同倾斜角的多张图像(>5张);
- 标定完成后,标定文件保存在build目录下calib.yaml里;
3.4 二维码检测
认识Aruco二维码
二维码示例文件下载
用途:一般用于增强现实、相机姿势估计和相机校准等应用场景,具体如无人机的自主降落地标、机器人定位等。
组成:黑色宽边框 + 二进制矩阵(黑白方形阵列)
黑色边框:有助于其在图像中的快速检测;
黑白方形阵列:标识符 (ID) ,用于被识别以及错误检测和校正技术;
黑白方形的大小决定了内部矩阵的大小。例如,6×6 的Aruco码大小由 36 位组成;
6×6即长宽都是4个方形;
实践:
-
1)采用读取视频文件的方式作为视觉输入源,修改aruco_detection.cpp中的代码:
cap.open(sv::CameraType::V4L2CAM, 0); // CameraID 0 改为: cap.setVideoPath("/home/hyl20/SpireCV/samples/demo/ac2.mp4"); cap.open(sv::CameraType::VIDEO, 0); // CameraID 0
-
2)修改内参文件的路径,使用上一个实验生成的内参:
// 手动导入相机参数,如果使用Amov的G1等吊舱或相机,则可以忽略该步骤,将自动下载相机参数文件 ad.loadCameraParams(sv::get_home() + "/SpireCV/build/calib1.yaml");
-
3)录制一段aruco二维码图案视频保存为:/home/hyl20/SpireCV/samples/demo/ac2.mp4
拍摄注意事项:不同角度、不同距离拍摄。
-
4)编译
cd ~/SpireCV/build sudo make install
-
5)运行
./ArucoDetection
-
6)观察终端的打印信息
-
7)运行ros接口查看ros数据?
待续…
4. 在wsl2-ubuntu20.04上安装SpireCV
- 参考:Ubuntu20.04+CUDA11.6安装教程
- 问题:文档上提供的教程是基于ubuntu20.04 cuda11.6 ,但是本机电脑的cuda版本是12.2的,应该如何安装环境和依赖呢?请看本文的第6小节。
- 实践依据:分析SpireCV官方教程中的 ubuntu2004-cuda-cudnn-11-6.sh 脚本。
5. Ubuntu20.04安装NVIDIA显卡驱动、cuda、cuDNN、tensorRT
参考文献:
- https://blog.csdn.net/JineD/article/details/131201121
- https://blog.csdn.net/qq_43515934/article/details/123897435
6. wsl2-Ubuntu20.04安装cuda、cuDNN、tensorRT
参考资料:
6.1 一些概念
- 参考文献
https://docs.nvidia.com/cuda/wsl-user-guide/index.html
https://docs.nvidia.com/cuda/cuda-installation-guide-linux/# - WSL2支持访问GPU以实现程序从GPU加速计算中受益。
- WSL2支持的NVIDIA软件包括这些:
- NVIDIA Windows Driver x86(即windows显卡驱动)
- CUDA Toolkit and CUDA Developer Tools(即cuda SDK)
- 其他:NVIDIA Compute Software Support on WSL 2
- 只要Windows中安装好了NVIDIA显卡驱动,在wsl2中可以直接使用该驱动,最新的NVIDIA Windows GPU驱动程序将完全支持WSL2,所以不要为wsl2安装任何的NVIDIA显卡驱动,以造成覆盖问题!
- 要编译CUDA应用程序,还需要在wsl2-ubuntu中安装CUDA Toolkit、Cudnn(可选)。
- CUDA:CUDA是NVIDIA®发明的一种并行计算平台和编程模型。通过利用图形处理单元(GPU)的强大功能,它能够显著提高计算性能。
- cuDNN:是由NVIDIA开发的一个深度学习GPU加速库,用来加速深度学习框架(例如TensorFlow、PyTorch)在NVIDIA GPU上的运算。
- TensorRT:TensorRT是NVIDIA家的一款高性能深度学习推理SDK。此SDK包含深度学习推理优化器和运行环境,可为深度学习推理应用提供低延迟和高吞吐量。在推理过程中,基于TensorRT的应用程序比仅仅使用CPU作为平台的应用程序要快40倍。
- Cuda版本切换
如果机器上安装了多个版本的cuda,则会在/usr/local/中存在多个cuda-xx的文件夹,如下:
其中/usr/local/cuda文件夹是个软链接,链接到目前的cuda版本目录,所以如果要切换版本的话,只需要将原来cuda软链删除,重新建立指向另一个cuda-xx目录即可。 - 安装cuda的系统要求、硬件条件、编程语言要求、内核要求等、系统版本要求、编译器版本要求请查阅:Pre-installation Actions
- GPG、GPG public key:GPG(GNU Privacy Guard)是一个用于加密、签名和验证文件的开源加密工具。它可以帮助用户保护他们的数据免受未经授权的访问和篡改。您可以使用GPG来加密和签名电子邮件、文件和文本消息,以确保它们的安全性和完整性。
6.2 安装 CUDA Toolkit
- 0)安装前的准备工作
- 确认PC的GPU使用可以使用CUDA:lspci | grep -i nvidia(wsl中不显示?)
- 确认Ubuntu版本是否兼容CUDA
- 确认是否安装了gcc:gcc --version
- 确认系统安装了正确的Kernel Headers和开发包:uname -r
- 1)卸载WSL2中的显卡驱动
一旦在Windows 上安装了NVIDIA GPU驱动程序,CUDA就可以在WSL2中以libcuda.so的形式使用。因此,不要在WSL 2中安装任何NVIDIA显卡驱动,否则会造成驱动覆盖问题!假如安装了,要卸载掉并重启wsl2:sudo apt-get remove --purge nvidia* sudo reboot
- 2)卸载旧的 CUDA
卸载掉可能存在的旧 CUDA -Toolkit,以进行正确版本 CUDA 的安装:sudo apt-get --purge remove "*cuda*" "*cublas*" "*cufft*" "*cufile*" "*curand*" \ "*cusolver*" "*cusparse*" "*gds-tools*" "*npp*" "*nvjpeg*" "nsight*" "*nvvm*" sudo apt-get autoremove
- 3)删除旧的 GPG key,GPG 秘钥用于从CUDA仓库中下载文件的身份认证!7fa2af80是旧的key,目前CUDA repository最新的key是3bf863cc,推荐使用cuda-keyring来安装最新的key:
sudo apt-key del 7fa2af80
- 4)选择合适自己PC显卡的 CUDA 版本
最合适当前显卡的cuda版本查看方法:nvidia-smi
也可以在windows中的NVIDIA控制面板中查看!
但是这个cuda版本不一定兼容应用程序编译环境,可能与应用程序调用的其他软件包互不兼容,所以要根据具体情况来选择cuda版本,选择依据有以下几个方面:- 一,要兼容当前安装的显卡驱动,查看当前安装的显卡驱动版本:nvidia-smi
- 二,当前安装的显卡驱动支持哪些版本的cuda?
查看方法:Table 2 CUDA Toolkit and Minimum Required Driver Version for CUDA Minor Version Compatibility.
注意:CUDA驱动程序是向后兼容的,例如:CUDA 11.6.x 要求显卡驱动版本 >= 450.80.02,假如你的显卡驱动版本是 536.67的话,那么你的显卡驱动同样可以兼容 CUDA 11.6.x. - 三,要选择与其他软件包互相兼容的cuda版本。
例如:你的程序使用了TensorRT包,那么在选择CUDA 版本时要考虑与TensorRT的相互兼容,或在选择TensorRT版本时要考虑与CUDA 版本的相互兼容!
- 一,要兼容当前安装的显卡驱动,查看当前安装的显卡驱动版本:nvidia-smi
- 5)在 WSL-Ubuntu 中安装 CUDA-Toolkit
安装Linux默认的CUDA-Toolkit时总是附带安装一个显卡驱动,因此不能使用这种方式给WSL2-Ubuntu安装CUDA-Toolkit。为了避免显卡驱动覆盖问题,应该使用下面的方式为WSL2-Ubuntu安装CUDA-Toolkit:- 5.1)从CUDA Toolkit Archive中选择一个合适的cuda版本,以cuda11.6为例:
- 5.2)安装类型选择 wsl-ubuntu :
- 5.3)在bash中执行安装命令(任选一种安装方式,推荐使用Network方式):
# Network 方式安装: wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin sudo mv cuda-wsl-ubuntu.pin /etc/apt/preferences.d/cuda-repository-pin-600 sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/7fa2af80.pub sudo add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/ /" sudo apt-get update sudo apt-get -y install cuda # Local方式安装: wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin sudo mv cuda-wsl-ubuntu.pin /etc/apt/preferences.d/cuda-repository-pin-600 wget https://developer.download.nvidia.com/compute/cuda/11.6.0/local_installers/cuda-repo-wsl-ubuntu-11-6-local_11.6.0-1_amd64.deb sudo dpkg -i cuda-repo-wsl-ubuntu-11-6-local_11.6.0-1_amd64.deb sudo apt-key add /var/cuda-repo-wsl-ubuntu-11-6-local/7fa2af80.pub sudo apt-get update sudo apt-get -y install cuda
- 5.1)从CUDA Toolkit Archive中选择一个合适的cuda版本,以cuda11.6为例:
- 6)查看是否安装成功
最好先重启一下wsl。dpkg -l cuda #或 nvcc --version
- 7)安装完成可以删除掉.deb文件以释放存储空间
sudo rm cuda-repo-wsl-ubuntu-11-6-local_11.6.0-1_amd64.deb
- CUDA默认安装路径为 /usr/local/cuda/
6.3 安装 cuDNN
-
0)准备工作
- 安装显卡驱动:在wsl2中不需要这步;
- 安装CUDA Toolkit:在上一节中已安装;
- 安装Zlib
sudo apt-get install zlib1g
-
1)下载和已安装的cuda相兼容的cuDNN安装文件:cuDNN Archive.
-
2)选择一个符合您环境的安装方法:tar文件安装适用于所有Linux平台;Deb文件安装适用于Debian 11、Ubuntu 18.04、Ubuntu 20.04和22.04;RPM文件安装适用于RHEL7、RHEL8和RHEL9;包管理工具(如apt)安装方式,适合联网条件下安装。
-
3)以apt-get安装方式为例,为wsl2-Ubuntu安装 cuDNN v8.4.1:
sudo apt-get install libcudnn8=8.4.1.*-1+cuda11.6
sudo apt-get install libcudnn8-dev=8.4.1.*-1+cuda11.6
sudo apt-get install libcudnn8-samples=8.4.1.*-1+cuda11.6 -
4)验证安装是否成功
查看cudnn_version.h或cudnn.h
如果出现版本号则安装成功cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2 或者: cat /usr/include/cudnn_version.h | grep CUDNN_MAJOR -A 如果cudnn_version.h文件不存在就搜索一下,安装路径可能有出入 sudo find / -name 'cudnn_version.h' 或查找文件cudnn.h
-
参考文献
官网:cuDNN installation Guide on Linux
博客:https://blog.csdn.net/qq_43515934/article/details/123897435
6.4 安装TensorRT
- 1)下载
查看与已安装的CUDA Toolkit、cuDNN版本相互兼容的TensorRT版本,并下载安装文件,以deb安装方式为例。 - 2)安装tensorrt,以TensorRT 8.4 EA、cuda11.6.0、cuDNN8.4.1为例
sudo dpkg -i nv-tensorrt-repo-ubuntu2004-cuda11.6-trt8.4.0.6-ea-20220212_1-1_amd64.deb
- 3)添加第三方仓库秘钥
sudo apt-key add /var/nv-tensorrt-repo-ubuntu2004-cuda11.6-trt8.4.0.6-ea-20220212/*.pub #或: sudo cp /var/nv-tensorrt-repo-ubuntu2004-cuda11.6-trt8.4.0.6-ea-20220212/*.gpg /usr/share/keyrings/
- 4)更新软件源,要保证运行后无错误提示
sudo apt-get update
- 5)安装tensorrt的依赖
TensorRT 提供三种安装模式:完整安装、lean runtime 安装、dispatch runtime安装,根据具体需要来进行安装!了解更多请参考:TensorRT Documentation。
以完整安装为例:sudo apt-get install tensorrt -y python3 -m pip install numpy sudo apt-get install python3-libnvinfer-dev
- 6)验证是否安装成功
显示如 tensorrt 8.6.1.x-1+cuda12.0 则表明安装成功!dpkg-query -W tensorrt
- 7)安装完毕后可以删除安装文件 *.deb 以释放空间。
- 参考文献
NVIDIA Deep Learning TensorRT Documentation
阿木实验室SpireCV安装脚本
6.5 卸载
- 卸载CUDA
# To remove CUDA Toolkit: sudo apt-get --purge remove "*cuda*" "*cublas*" "*cufft*" "*cufile*" "*curand*" \ "*cusolver*" "*cusparse*" "*gds-tools*" "*npp*" "*nvjpeg*" "nsight*" "*nvvm*" # To remove NVIDIA Drivers: sudo apt-get --purge remove "*nvidia*" "libxnvctrl*" # To clean up the uninstall: sudo apt-get autoremove
- 卸载cuDNN
sudo apt-get --purge remove "*cuDNN*" sudo apt-get autoremove
- 卸载TensorRT
Uninstalling TensorRT
6.6 Troubleshooting
-
1)
the public key is not available: NO_PUBKEY F60F4B3D7FA2AF80 Hit:4 https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64 InRelease
原因:key不正确!!
解决办法:找到该源,为它重新配置一个正确的key(无效的源就删掉!)
-
2)
W: GPG error: https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64 InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY A4B469963BF863CC
E: The repository 'https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64 InRelease' is not signed.
原因:缺少公钥
解决办法:https://blog.csdn.net/A15130402745/article/details/131643433
https://keyserver.ubuntu.com/ -
3)
Version '8.4.1-1+cuda11.6' for 'libcudnn8' was not found
解决办法:sudo apt-get install libcudnn8=8.4.1.*-1+cuda11.6 -
4)安装libcudnn8-samples出现:
Version '8.4.1.*-1+cuda11.6' for 'libcudnn8-samples' was not found
解决办法:sudo apt-get install libcudnn8-samples -
5)
Processing triggers for libc-bin (2.31-0ubuntu9.14) ... /sbin/ldconfig.real: /usr/lib/wsl/lib/libcuda.so.1 is not a symbolic link
在安装完cuda或tensorRT后出现该问题。
解决办法:重新建立软连接,它们正确的关系应该是:libcuda.so -> libcuda.so.1 -> libcuda.so.1.1。步骤:
在windows Powershell中:cd C:\Windows\System32\lxss\lib rm libcuda.so rm libcuda.so.1
在wsl中:
cd /usr/lib/wsl/lib/ ln -s libcuda.so.1.1 libcuda.so.1 ln -s libcuda.so.1.1 libcuda.so
-
6)
export: bad variable name
待解决…
7. nvidia 官网使用指南
-
文档中心:https://docs.nvidia.cn/
如何找到NVIDIA TensorRT、NVIDIA CUDA、NVIDIA Jetson的文档所在?
1)手动:https://docs.nvidia.com ~> Products 或 All Documents ~> NVIDIA TensorRT.
2)通过搜索框搜索。
-
下载中心:https://developer.nvidia.cn/downloads
英文版网页:https://developer.nvidia.com/downloads
8. Gstreamer
官方文档:GStreamer: a flexible, fast and multiplatform multimedia framework
8.1 在Ubuntu上安装gstreamer
apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-qt5 gstreamer1.0-pulseaudio
8.2 一些概念
- 什么是视频流Stream
Playing media straight from the Internet without storing it locally is known as Streaming - GStreamer是一个用于处理多媒体流的框架。媒体从“source”元素(媒体数据来源)传播到“sink”元素(媒体数据使用者),通过一系列执行各种任务的中间元素element。所有相互连接的元素的集合被称为“管道”pipeline。除了source元素和sink元素,其他元素统称为 filter 元素。
- playbin是一个特殊的element
playbin它既是source元素,又是sink元素,是一个完整的管道。在内部,它会自动创建并连接了播放媒体所需的所有元素,因此您手动配置element。 - bin是一个容器元素。你可以将多个元素添加到bin中。由于bin本身就是一个元素,所以可以像处理其他元素一样处理bin,Bin允许您将一组已链接好的elements组合为一个logical element,这样你可以不再处理单个元素,只处理一个元素,即bin。我们将看到,当你要构建复杂的管道时,这是非常强大的,因为它可以将管道分解成更小的块。
8.3 解析
-
gst-launch-1.0是调试工具,一般在shell中使用;构建程序时候一般使用gst_parse_launch()函数;
-
一个特殊的element:playbin
playbin它既是source元素,又是sink元素,是一个完整的管道。在内部,它会自动创建并连接了播放媒体所需的所有元素,因此您手动配置element。playbin支持所有可以的媒体数据来源,包括本地文件file、http、https、rtsp流等等。例如: -
自动配置一个完整的pipeline就使用playbin元素,那么如何手动配置一个完整的pipeline呢?
通过实例化每个元素并将它们全部链接在一起,手动构建一个管道。
通过这个过程可以了解以下知识点:- 什么是GStreamer element以及如何创建它。
- 如何将element相互连接(link)。
- 如何自定义element的行为。
-
如何监视管道的错误情况并从GStreamer消息中提取信息。
-
pipeline的基本结构
example:
-
创建一个元素,如:
source = gst_element_factory_make (“videotestsrc”, “source”);
sink = gst_element_factory_make (“autovideosink”, “sink”);
第一个参数是 element 的类型,
一些常用的element类型:basic-tutorial-14-handy-elements
所有可用的element:plugins
第二个参数是element实例的名称; -
pipeline是一个特殊的bin,所有适用于bin的用法都适用于pipeline
-
向pipeline添加element
逐个添加:gst_bin_add()
添加多个:gst_bin_add_many() -
将pipeline中的所有element一次连接起来:gst_element_link()
-
element本质上是一个GObject(C++对象?),具有属性property;
对于可写属性,可以自定义这些property的值;对于可读属性可以读取:
g_object_set() 如:g_object_set (source, “pattern”, 0, NULL);
g_object_get()
查看某元素的所有属性名称和值,可以使用调试工具:gst-inspect-1.0
或者在element的所属文档介绍中查看,如videotestsrc元素的文档doc_videotestsrc就可以查看它所有的属性。 -
bus、pad、capabilities、Buffers、Events
参考:Building an Application -
元素支持哪些媒体格式?元素的Pad Capabilities有什么作用?
Pad Capabilities简称pad caps;
简而言之:pad caps 是决定了哪些格式的媒体数据可以流经某element
pads 是根据Pad templates创建的,Pad templates有助于创建几个类似的pad,由相同Pad templates创建的两个pad才可以链接起来,不然后链接失败。
Capabilities examples:
-
如何将应用程序的数据注入管道?如何将数据从管道中提取回应用程序?
注入:appsrc
提取:appsink -
GStreamer工具
GStreamer提供了一套工具,方便且绝对必要。- 创建、调试管道:
gst-launch-1.0 - 查看元素、pad、caps:
gst-inspect1.0 - 查看某个文件、rtsp视频流、http文件包含哪些媒体类型,需要哪些元素,了解哪些容器和编解码器被用于制作媒体,以及需要在管道中放入哪些元素才能播放媒体:
gst-discoverer-1.0
discoverer tool
- 创建、调试管道:
-
常用的element
handy-elements
待续…