旅游网站管理系统源码,做门户网站可以用的字体,企业速成网站,物流网站如何设计概述
本教程使用vscode和Docker搭建Gstreamer2.24的开发环境#xff0c;可以用于开发调试Gstreamer程序或者自定义插件开发。
1. vscode依赖插件
C/C Extension Pack#xff08;ms-vscode.cpptools-extension-pack#xff09;#xff1a;该插件包包含一组用于 Visual St…概述
本教程使用vscode和Docker搭建Gstreamer2.24的开发环境可以用于开发调试Gstreamer程序或者自定义插件开发。
1. vscode依赖插件
C/C Extension Packms-vscode.cpptools-extension-pack该插件包包含一组用于 Visual Studio Code 中 C 开发的流行扩展主要包括对 C/C 的语言支持 C/C 扩展 UI 主题对 CMake 的支持和工具Dockerms-azuretools.vscode-docker提供对Docker的构建、管理和部署容器化应用程序Meson(mesonbuild.mesonbuild)提供对 Meson 的支持Gstreamer使用Meson进行编译。
2. 创建.devcontainer
devcontainer文件夹是 vscode 的 Docker 插件用来定义开发容器的配置文件夹。它用于配置一个隔离的开发环境使得开发者可以在容器中进行开发而无需在本地配置复杂的开发环境。 .devcontainer 文件夹通常包含以下文件
Dockerfile 自定义容器环境可以通过 Dockerfile 定义容器的构建过程。通常使用apt安装的Gstreamer版本为1.6截至2024年11月Gstreamer已经更新到了2.24多很多新的功能二次开发接口也有了不同的接口。这里使用镜像livekit/gstreamer:1.24.5-dev-amd64来构建我们的开发容器该镜像包含了Gstreamer2.24的开发环境。以下是Dockerfile的内容FROM livekit/gstreamer:1.24.5-dev-amd64# 设置环境变量避免交互式界面
ENV DEBIAN_FRONTENDnoninteractive
RUN apt-get update \ apt-get -y install --no-install-recommends build-essential meson ninja-build vim gdb cmake make valgrind \# Clean up apt-get autoremove -y \ apt-get clean -y \ rm -rf /var/lib/apt/lists/*ENV DEBIAN_FRONTENDdialogARG WORKSPACEdevcontainer.json 这是主要的配置文件定义了开发容器的构建和运行环境。以下是devcontainer.json的内容和详细注释
// See https://aka.ms/vscode-remote/devcontainer.json for format details.
{dockerFile: Dockerfile,build: {args: {WORKSPACE: ${containerWorkspaceFolder} // 代表容器工作区的路径}},remoteUser: root, // 容器内默认用户// runArgs 配置是传递给 Docker 容器的启动参数用来定制容器的行为runArgs: [--networkhost, // 让容器使用主机的网络设置这样容器内的应用可以访问主机的网络--cap-addSYS_PTRACE, // 用于调试进程--security-optseccomp:unconfined, // 禁用 Docker 容器的 seccomp 安全配置这样容器内的进程可以进行更多系统调用--security-optapparmor:unconfined, // 禁用 AppArmor 安全配置类似于 seccomp--volume/tmp/.X11-unix:/tmp/.X11-unix, // 将主机的 X11 socket 共享给容器允许容器内的图形应用访问主机的显示比如 GUI--ipchost // 使容器与主机共享 IPC进程间通信命名空间允许容器与主机共享内存和信号量等],// containerEnv 配置设置了容器内部的环境变量这些环境变量帮助容器内的应用程序访问主机的显示和音频等服务。containerEnv: {DISPLAY: ${localEnv:DISPLAY}, // 会从主机的环境变量中获取 DISPLAY 设置XDG_RUNTIME_DIR: ${localEnv:XDG_RUNTIME_DIR}, // 允许容器使用主机的 XDG_RUNTIME_DIR它通常包含用于与显示服务交互的 Unix 域套接字PULSE_SERVER: ${localEnv:PULSE_SERVER}, // 允许容器使用主机的 PulseAudio 音频服务器LIBGL_ALWAYS_SOFTWARE: 1, // 强制 OpenGL 使用软件渲染这通常用于没有硬件加速支持的环境GST_PLUGIN_PATH: /usr/local/lib/x86_64-linux-gnu/gstreamer-1.0, // 默认的gstreamer插件安装路径// HTTP_PROXY: http://127.0.0.1:7890, // 添加 HTTP 代理// HTTPS_PROXY: http://127.0.0.1:7890 // 添加 HTTPS 代理},// 定制容器内的 VS Code 环境customizations: {vscode: {extensions: [ms-vscode.cpptools-extension-pack,ms-azuretools.vscode-docker,mesonbuild.mesonbuild,]}},// 这里用来关闭 Yama 安全模块以便容器内的应用程序可以Attach调试其他进程。postCreateCommand: sudo sh -c echo 0 /proc/sys/kernel/yama/ptrace_scope
}3. 配置launch.json
由于vscode的Meson插件只负责编译没有集成Debug调试的功能因此需要自己编写launch.json配置文件实现调试Gstreamer代码的功能。launch.json 是用来配置调试环境的文件。它定义了如何启动、配置和调试你的项目允许你设置断点、运行调试器、传递参数等。这个文件位于 .vscode 文件夹中 以下是launch.json的详细内容和注释。通过配置可以实现直接对Gstreamer可执行应用、插件的直接调试也可以实现Gstreamer插件附加到运行中的进程中进行调试。
{version: 0.2.0,configurations: [{// 该配置实现把插件附加到一个已经运行的进程上进行调试name: Attach,type: cppdbg,request: attach,program: ${workspaceFolder}/gst-template/builddir/${input:exe_package}/${input:program},MIMode: gdb,setupCommands: [{description: 为 gdb 启用整齐打印,text: -enable-pretty-printing,ignoreFailures: true},{description: 将反汇编风格设置为 Intel,text: -gdb-set disassembly-flavor intel,ignoreFailures: true}]},{// 该配置实现启动一个新的进程进行调试name: GDB Launch,type: cppdbg,request: launch,program: ${workspaceFolder}/gst-template/builddir/${input:exe_package}/${input:program},args: [${workspaceFolder}/1.mp4],stopAtEntry: true,cwd: ${workspaceFolder},environment: [],externalConsole: false,MIMode: gdb,setupCommands: [{description: 为 gdb 启用整齐打印,text: -enable-pretty-printing,ignoreFailures: true},]},],inputs: [{id: exe_package,type: promptString,description: 可执行文件默认的包名,default: tests},{id: lib_package,type: promptString,description: 插件默认的包名,default: gst-plugin},{id: program,type: promptString,description: debug默认程序,default: test_plugin}]
}4. 插件开发代码创建
可以通过GStreamer官方的模板搭建插件开发基础。通过以下命令复制官方的插件开发模板
git clone https://gitlab.freedesktop.org/gstreamer/gst-template.git这样我们的文件夹结构应该如下
gst-template/
|-- .devcontainer/
| |-- devcontainer.json
| |-- Dockerfile
|-- .vscode/
| |-- launch.json
|-- builddir/
| |-- .gitignore
| |-- .hgignore
| |-- .ninja_deps
| |-- .ninja_log
| |-- build.ninja
| |-- compile_commands.json
| |-- gst-app/
| | |-- gst-app
| | |-- gst-app.p/
| |-- gst-plugin/
| |-- meson-info/
| |-- meson-logs/
| |-- meson-private/
| |-- meson-vscode.env
| |-- tests/
|-- gst-app/
| |-- meson.build
| |-- src/
|-- gst-plugin/
| |-- .gitignore
| |-- AUTHORS
| |-- ChangeLog
| |-- COPYING
| |-- meson.build
| |-- src/
| |-- tools/
|-- meson.build5. 构建容器
在vscode中按F1或者CtrlShiftP选择【开发容器: 在容器中打开文件夹Dev Containers: Open Folder in Container】然后选择确定。等待几分钟就可以在容器中开发Gstreamer了。
6. 编译
同样按F1或者CtrlShiftP输入或者直接选择【Meson: build】然后选择【Build all targets】或者直接选想编译的目标。
7. 调试
直接调试可执行文件 点击vscode左侧运行和调试然后在下拉框中选择【GDB Launch】然后按F5选择调试的包和目标开始调试。此时可以调试可执行程序也可以调试可执行程序中使用的Gstreamer插件代码。通过附加到进程调试 首先运行Gstreamer可执行程序在可执行程序中需要使用待调试的插件。 点击vscode左侧运行和调试然后在下拉框中选择【Attach】选择可执行程序的包和目标然后选择正在运行的可执行进程开始插件代码的调试。