Linux驱动23 --- RkMedia 使用

目录

一、上电自动挂载

二、RkMedia

2.1 认识 RkMedia

rtsp

rtmp

RTSP 和 RTMP 的选择

2.2 安装 VLC

2.2 RkMedia 例程使用


一、上电自动挂载

        cd /etc/init.d/

        vi Smyprofile.sh

        添加这个内容

                #!/bin/sh

                ifconfig eth0 192.168.66.88

                mount -t nfs 192.168.66.66:/home/lwl/share /MyProject -o nolock

        黑色加粗的部分改成自己板子的 IP

        红色的部分改成自己 Ubuntu 的 IP

        绿色的部分改成自己的 Ubuntu 共享文件夹的路径

        蓝色的部分改成板子共享文件夹的路径

        chmod 777 Smyprofile.sh

        reboot

这一段时间主要做

        音视频的获取

        获取音视频之后,需要推流,保存到本地

        最终需要合成一个 mp4 文件

        三步走

                第一步:视频的获取,视频的推流,视频的本地保存

                第二步:音频的获取,音频的推流,音频的本地保存

                第三步:音视频合成,音视频推流,音视频本地保存

二、RkMedia

2.1 认识 RkMedia

        瑞星微推出的一个闭源的音视频开发库

                对 FFMPEG 进一步的封装

        只有部分瑞芯微的芯片支持这个库

        RkMedia 官方给我们的有例程 --- 可以参考使用

/home/wifi/driver/RV1126_RV1109_LINUX_SDK_V2.2.5.1_20231011/buildroot/output/rockchip_rv1126_rv1109_spi_nand/build/rkmedia/examples

        VI(输入视频捕获) --- Video Input --- 视频输入

        VENC(H.265/H.264/JPEG/MJPEG 编码) --- Video Encodec --- 视频编码

        VDEC(H.265/H.264/JPEG、MJPEG 解码) --- Video Decodec --- 视频解码

        VO(视频输出显示) --- Video Output --- 视频输出

        RGA 视频处理(包括旋转、缩放、裁剪) --- 后续会用到

        AI(音频采集) --- Audio Input --- 音频输入

        AO(音频输出) --- Audio Output --- 音频输出

        AENC(音频编码) --- Audio Encodec --- 音频编码

        ADEC(音频解码) --- Audio Decodec --- 音频解码

        MD(移动侦测)

        OD(遮挡侦测)

        VMIX(视频合成)

        MUXER(视频封装)

        VP(视频一入四出)

rtsp

        流媒体服务器

        用来传输音视频数据流的服务器解决方案

        实时流传输协议(Real Time Streaming Protocol,RTSP),RFC2326(中文版),是 TCP/IP 协议体系中的一个应用层协议,由哥伦比亚大学、网景和RealNetworks 公司提交的 IETF RFC 标准。该协议定义了一对多应用程序如何有效地通过 IP 网络传送多媒体数据。RTSP 在体系结构上位于 RTP 和 RTCP 之上,它使用 TCP或 UDP 完成数据传输属于一个应用层协议,它的传输层协议可以是 TCP,也可以是 UDP

rtmp

        实时消息协议(英语:Real-Time Messaging Protocol,缩写 RTMP)也称实时消息传输协议。它是最初由 Macromedia 为通过互联网在 Flash 播放器与一个服务器之间传输流媒体音频、视频和数据而开发的一个专有协议。Macromedia 后被 Adobe Systems 收购,该协议也已发布了不完整的规范供公众使用。

RTSP 和 RTMP 的选择

        百度以下两者的区别

                RkMedia 中默认支持 RTSP 服务器端

                        RTSP 和 RTMP 都会分为服务器和客户端

                        不同的端使用的 API 是不同的,依赖的库也略有区别

                        如果要使用客户端的 API,需要自己移植相关的库

        推流

                客户端将数据流发送给服务器:客户端 → 服务器

        拉流

                客户端从服务器获取视频流:服务器 → 客户端

2.2 安装 VLC

        在 ubuntu 下安装,需要切换一下网络

        在 Windows 下安装,需要把网卡 IP 换成静态 IP

        可能影响到后续网口的使用

2.2 RkMedia 例程使用

        ./rkmedia_vi_venc_rtsp_test -a

        出现下图类似内容,即算成功

        如果出现卡在

        就执行:./rkmedia_vi_venc_rtsp_test

        如果加上-a,卡在这里不动,就把-a 给去掉

        拉流地址

                rtsp://192.168.66.88/live/main_stream

                加粗部分换成自己的板子 IP

        当前的过程

        目前的目标:根据官方的例程,去完善自己的程序

//用来设置摄像头参数的 --- 必要的
rk_aiq_working_mode_t hdr_mode = RK_AIQ_WORKING_MODE_NORMAL;int fps = 30;SAMPLE_COMM_ISP_Init(s32CamId, hdr_mode, bMultictx, pIqfilesPath);SAMPLE_COMM_ISP_Run(s32CamId);SAMPLE_COMM_ISP_SetFrameRate(s32CamId, fps);
g_rtsplive = create_rtsp_demo(554);
g_rtsp_session = rtsp_new_session(g_rtsplive, "/live/main_stream");
rtsp_set_video(g_rtsp_session, RTSP_CODEC_ID_VIDEO_H264, NULL, 0);
rtsp_sync_video_ts(g_rtsp_session, rtsp_get_reltime(), rtsp_get_ntptime());
RK_MPI_SYS_Init();
RK_MPI_VI_SetChnAttr(s32CamId, 0, &vi_chn_attr);
RK_MPI_VI_EnableChn(s32CamId, 0);
RK_MPI_VENC_CreateChn(0, &venc_chn_attr);
RK_MPI_SYS_RegisterOutCb(&stEncChn, video_packet_cb);
RK_MPI_SYS_Bind(&stSrcChn, &stDestChn);
rtsp_del_demo(g_rtsplive);
RK_MPI_SYS_UnBind(&stSrcChn, &stDestChn);
RK_MPI_VENC_DestroyChn(0);
RK_MPI_VI_DisableChn(s32CamId, 0);
SAMPLE_COMM_ISP_Stop(s32CamId);

        当前这个程序的功能只有推流,但是想让他既可以推流又可以保存在本地

        保存在本地

                g_output_file = fopen(pOutPath, "w");

        和录制 PCM 音频一样

                fwrite(RK_MPI_MB_GetPtr(mb), 1, RK_MPI_MB_GetSize(mb), g_output_file);

                fclose(g_output_file);

        工程的配置

        配置工程的目的在于让它有代码提示

        依赖的头文件 

#include <assert.h>
#include <fcntl.h>
#include <getopt.h>
#include <signal.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <time.h>
#include <unistd.h>
#include "common/sample_common.h"
#include "librtsp/rtsp_demo.h"
#include "rkmedia_api.h"
#include "rkmedia_venc.h"

 

主要讲的是 RkMedia 的使用

在 RkMedia 生成的可执行程序路径之下

        找到相关的可执行程序

将可执行程序复制到共享文件夹

        在板子运行可执行程序

        ./rkmedia_vi_venc_rtsp_test -a

可执行程序的源码

        rkmedia_vi_venc_rtsp_test.c

        主要过程

        ISP 初始化 --- 配置摄像头参数

        rtsp 初始化 --- 推流的程序

        rtsp 的服务端

        RK_MPI_SYS_Init --- RkMedia 系统初始化

        RK_MPI_VI_SetChnAttr --- 设置输入通道属性

        RK_MPI_VI_EnableChn --- 使能输入通道

        RK_MPI_VENC_CreateChn --- 创建编码器通道

        RK_MPI_SYS_RegisterOutCb --- 创建输出回调

        RK_MPI_SYS_Bind --- 绑定通道

        释放一系列资源

        既可以推流 --- 推流的过程就是上述过程

        又可以本地保存 --- 实现原理 --- fopen 和 fwrite 和 fclose 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/90908.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/90908.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux:线程同步与线程互斥

线程互斥竞态条件当多个线程&#xff08;或进程&#xff09;并发访问和操作同一个共享资源&#xff08;如变量、文件、数据库记录等&#xff09;时&#xff0c;最终的结果依赖于这些线程执行的相对时序&#xff08;即谁在什么时候执行了哪条指令&#xff09;。 由于操作系统调度…

HTML 常用标签速查表

HTML 常用标签速查表 &#x1f9f1; 结构类标签 标签含义用途说明<html>HTML文档根元素所有HTML内容的根节点<head>头部信息放置元信息&#xff0c;如标题、引入CSS/JS等<body>页面内容主体所有可视内容的容器&#x1f4dd; 文本与标题标签 标签含义用途说…

1.gradle安装(mac)

1.下载二进制包 官网下载&#xff1a;Gradle Releases 国内镜像&#xff08;腾讯云&#xff09;&#xff1a;https://mirrors.cloud.tencent.com/gradle/ 2.解压并配置环境变量 解压到指定目录&#xff08;示例&#xff1a;/opt/gradle&#xff09; sudo mkdir -p /opt/gr…

Rust赋能土木工程数字化

基于Rust语言在数字化领域应用 基于Rust语言在土木工程数字 以下是基于Rust语言在土木工程数字化领域的30个实用案例,涵盖结构分析、BIM、GIS、传感器数据处理等方向。案例均采用Rust高性能、安全并发的特性实现,部分结合开源库或算法。 结构分析与计算 有限元分析框架 使…

KTH5791——3D 霍尔位置传感器--鼠标滚轮专用芯片

1 产品概述 KTH5791是一款基于3D霍尔磁感应原理的鼠标滚轮专用芯片&#xff0c;主要面向鼠标滚轮的旋转的应用场景。两个 专用的正交输出使该产品可直接替代机械和光学旋转编码器的输出方式&#xff0c;使得鼠标磁滚轮的应用开发工作极简 化即兼容目前所有鼠标的滚轮输出方式。…

决策树(Decision Tree)完整解析:原理 + 数学推导 + 剪枝 + 实战

1️⃣ 什么是决策树&#xff1f;决策树&#xff08;Decision Tree&#xff09;是一种常见的监督学习方法&#xff0c;可用于分类和回归。 其基本思想是&#xff1a;通过特征条件的逐层划分&#xff0c;将数据集分割成越来越“纯净”的子集&#xff0c;直到子集中的样本几乎属于…

C语言:20250728学习(指针)

回顾/*************************************************************************> File Name: demo01.c> Author: 阮> Description: > Created Time: 2025年07月28日 星期一 09时07分52秒**********************************************************…

esp32s3文心一言/豆包(即火山引擎)大模型实现智能语音对话--流式语音识别

一、引言 在之前的帖子《Esp32S3通过文心一言大模型实现智能语音对话》中&#xff0c;我们介绍了如何使用Esp32S3微控制器与文心一言大模型实现基本的智能语音对话功能&#xff0c;但受限于语音识别技术&#xff0c;只能处理2-3秒的音频数据。为了提升用户体验&#xff0c;满足…

面试150 最长递增子序列

思路 定义 dp[i] 表示以第 i 个元素结尾的最长递增子序列的长度&#xff0c;初始时每个位置的最长子序列长度为 1。然后通过双重循环遍历每一对元素 j < i&#xff0c;如果 nums[i] > nums[j]&#xff0c;说明 nums[i] 可以接在 nums[j] 的递增序列之后&#xff0c;更新 …

TCP 套接字--服务器相关

1.创建 TCP 套接字int server_sockfd socket(AF_INET,SOCK_STREAM, 0);函数原型&#xff1a;#include <sys/socket.h>int socket(int domain, int type, int protocol);domain协议族&#xff08;地址族&#xff09;AF_INET&#xff08;IPv4&#xff09;type套接字类型SO…

六、搭建springCloudAlibaba2021.1版本分布式微服务-admin监控中心

前言Spring Boot Actuator 是 spring-boot 自带监控功能 &#xff0c;可以帮助实现对程序内部运行情况监控&#xff0c;比如监控状况、Bean 加载情况、环境变量、日志信息、线程信息等。 Spring Boot Admin是一个针对 spring-boot 的 actuator 接口进行 UI 美化封装的监控工具。…

轻量级远程开发利器:Code Server与cpolar协同实现安全云端编码

前言&#xff1a;作为一款专为Web环境设计的VS Code托管方案&#xff0c;Code Server通过精简架构重新定义了远程开发体验。其核心优势在于将完整的编辑器功能封装于轻量容器中——仅需不到200MB内存即可运行基础服务&#xff0c;并支持在树莓派等低性能设备上流畅操作。系统采…

图论:最小生成树

今天要介绍两中最小生成树的算法&#xff0c;分别是prim算法和kruskal算法。 最小生成树是所有节点的最小连通子图&#xff0c;即&#xff1a;以最小的成本&#xff08;边的权值&#xff09;将图中所有节点链接到一起。 图中有n个节点&#xff0c;那么一定可以用n-1条边将所有节…

haproxy七层代理

1、负载均衡Load Balance(LB) 概念 负载均衡&#xff1a;是一种服务或基于硬件设备等实现的高可用反向代理技术&#xff0c;负载均衡将特定的业务(web服务、网络流量等)分担给指定的一个或多个后端特定的服务器或设备&#xff0c;从而提高了 公司业务的并发处理能力、保证了业务…

【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 微博文章数据可视化分析-点赞区间实现

大家好&#xff0c;我是java1234_小锋老师&#xff0c;最近写了一套【NLP舆情分析】基于python微博舆情分析可视化系统(flaskpandasecharts)视频教程&#xff0c;持续更新中&#xff0c;计划月底更新完&#xff0c;感谢支持。今天讲解微博文章数据可视化分析-点赞区间实现 视频…

Redis实战(3)-- 高级数据结构zset

有序集合&#xff08;ZSET&#xff09;&#xff1a;可以用作相关有序集合相对于哈希、列表、集合来说会有一点点陌生,但既然叫有序集合,那么它和集合必然有着联系,它保留了集合不能有重复成员的特性,但不同的是,有序集合中的元素可以排序。但是它和列表使用索引下标作为排序依据…

Mistral AI开源 Magistral-Small-2507

宣布Magistral——Mistral AI推出的首款推理模型&#xff0c;专精于垂直领域、具备透明化特性与多语言推理能力。 最优秀的人类思维并非线性——它穿梭于逻辑、洞见、不确定性与发现之间。推理型语言模型让我们得以将复杂思考和深度理解交由AI增强或代劳&#xff0c;提升了人类…

【Kotlin】如何实现静态方法?(单例类、伴生对象、@JvmStatic)

静态方法 静态方法&#xff08;类方法&#xff09;&#xff1a;不需要创建实例就可以调用&#xff08;直接通过类名调用&#xff09;的方法 Java 中的静态方法&#xff08;static&#xff09; public class Util {public static void doAction() {//...} }调用&#xff1a;Util…

SQL Schema 和Pandas Schema什么意思

在数据处理和分析领域&#xff0c;SQL Schema 和 Pandas Schema 分别指的是在不同数据处理环境中数据的结构定义&#xff0c;以下为你详细介绍&#xff1a;SQL Schema含义SQL Schema&#xff08;模式&#xff09;是数据库对象的一个逻辑容器&#xff0c;它定义了数据库中表、视…

机器学习(一)KNN,K近邻算法(K-Nearest Neighbors)

&#x1f4a1; 建议初学者掌握KNN作为理解其他复杂算法&#xff08;如SVM、决策树、神经网络&#xff09;的基石。K近邻算法&#xff08;K-Nearest Neighbors, KNN&#xff09;详解&#xff1a;原理、实践与优化K近邻算法&#xff08;K-Nearest NeighboKrs&#xff0c;简称KNN&…