[linux]视频实时推流项目

Makefile文件:

cpp 复制代码
# --- ROV 视频推流项目 Makefile ---

# 1. 指定交叉编译器 (你在 Ubuntu 上使用的编译器)
CC = aarch64-linux-gnu-gcc

# 2. 最终生成的执行文件名字
TARGET = rov_streamer

# 3. 你的 C 源代码文件 (如果有多个文件,用空格隔开,例如 a.c b.c)
SRCS = rov_streamer.c

# 4. 编译选项 (CFLAGS): 告诉编译器去哪里找 GStreamer 的头文件 (.h)
# 加入 -Wall 可以开启所有常见的编译警告,帮你写出更规范的代码
CFLAGS = -Wall \
         -I/usr/include/gstreamer-1.0 \
         -I/usr/include/glib-2.0 \
         -I/usr/lib/x86_64-linux-gnu/glib-2.0/include


# 5. 链接选项 (LDFLAGS): 告诉编译器链接哪些 GStreamer 的动态库 (.so)
LDFLAGS = -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0

# --- 下面是编译规则 ---

# 默认目标,当你只敲 `make` 时执行
all: $(TARGET)

# 如何生成目标文件
$(TARGET): $(SRCS)
        @echo "开始编译 $(TARGET) ..."
        $(CC) $(SRCS) -o $(TARGET) $(CFLAGS) $(LDFLAGS)
        @echo "编译成功!生成文件: $(TARGET)"

# 清理生成的中间文件和执行文件,当你敲 `make clean` 时执行
clean:
        @echo "清理项目..."
        rm -f $(TARGET)
        @echo "清理完成!"

文件send到板子

使用scp

Mob上面Serial敲入:

root@topeet:/# /etc/init.d/S50sshd start

Starting sshd: OK

用于启动ssh

Buildroot软件包配置:

rov_streamer.c代码:

cpp 复制代码
#include <gst/gst.h>
#include <stdio.h>

int main(int argc, char *argv[]) {
    GstElement *pipeline;
    GstBus *bus;
    GstMessage *msg;

    /* 1. 初始化 GStreamer */
    gst_init(&argc, &argv);

    /* 2. 构建推流管道字符串 (使用你测试成功的 RTP 逻辑) */
    /* 注意:代码中的双引号需要转义,末尾无需反斜杠 */
    const char *pipe_str = 
        "v4l2src device=/dev/video9 ! "
        "image/jpeg,width=640,height=480,framerate=30/1 ! "
        "jpegdec ! videoconvert ! video/x-raw,format=NV12 ! "
        "mpph264enc bps=2000000 gop=10 ! "
        "rtph264pay config-interval=1 ! "
        "udpsink host=192.168.1.89 port=5678 sync=false";

    printf("正在启动 ROV 视频流...\n");

    /* 3. 创建管道 */
    pipeline = gst_parse_launch(pipe_str, NULL);

    /* 4. 开始播放 */
    gst_element_set_state(pipeline, GST_STATE_PLAYING);

    /* 5. 等待错误或流结束 (或者你可以自己写循环控制) */
    bus = gst_element_get_bus(pipeline);
    msg = gst_bus_timed_pop_filtered(bus, GST_CLOCK_TIME_NONE,
                                     GST_MESSAGE_ERROR | GST_MESSAGE_EOS);

    /* 6. 释放资源 */
    if (msg != NULL)
        gst_message_unref(msg);
    gst_object_unref(bus);
    gst_element_set_state(pipeline, GST_STATE_NULL);
    gst_object_unref(pipeline);

    return 0;
}

视频流架构是:摄像头 -> V4L2 驱动 -> GStreamer (MPP 硬件编码) -> RTP over UDP -> Windows 以太网 -> SDP 解析 -> FFmpeg/ffplay 解码显示

相关推荐
爱写代码的森11 小时前
鸿蒙三方库 | harmony-utils之ImageUtil图片保存到本地详解
服务器·华为·harmonyos·鸿蒙·huawei
HLC++15 小时前
Linux的进程间通信
android·linux·服务器
华清远见IT开放实验室16 小时前
实验室建设案例 | 石家庄科技信息职业学院嵌入式实验室——从底层硬件到系统应用,一所应用型高校的嵌入式人才培养这样落地
linux·arm开发·stm32·嵌入式硬件·高校·实验室建设
白露与泡影17 小时前
Arthas 实战指南:从方法耗时定位到 JVM 变量热修改
服务器·jvm·c#
神奇霸王龙17 小时前
Claude Code屠榜:MiMo与Grok紧追Codex
服务器·网络·人工智能·gpt·ai·ai编程
Web极客码18 小时前
WordPress SEO优化:提升网站排名的13个关键步骤
服务器·seo·wordpress
groundhappy19 小时前
idalib安装和codex ida-mcp配置
linux·开发语言·python
沐禾安信19 小时前
AVI 视频打不开?2026 四款转 MP4 工具封神
音视频·电脑录屏
通信小小昕19 小时前
Ubuntu 26.04 中文输入法安装
linux·运维·ubuntu
张小姐的猫21 小时前
【Linux】网络编程 —— HTTP协议(上)
linux·运维·服务器·网络·http·单例模式·策略模式