当前位置: 首页 > news >正文

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.lryc.cn/news/602751.html

相关文章:

  • gdb 基本命令
  • 3DGRUT: 革命性的3D高斯粒子光线追踪与混合光栅化技术深度解析
  • Error: Unable to find a match: python3.8
  • 【Linux操作系统】简学深悟启示录:Linux环境基础开发工具使用
  • Spring IOC与DI
  • 【服务器知识】nginx配置ipv6支持
  • JVM 内存共享区域详解
  • RabbitMQ概念与管理端配置说明
  • 学习游戏制作记录(改进剑投掷状态)7.28
  • 四、计算机组成原理——第7章:输入/输出系统
  • Unity_UI_NGUI_组合控件2
  • 数论1.01
  • socketpair函数详解
  • MCU+RTOS调试
  • STM32-基本定时器
  • JavaScript手录-排序算法篇
  • 二分查找的「左右为难」:如何优雅地找到数组中元素的首尾位置
  • 城阳区奥赛暑假公益班第三次入门组初赛模拟赛
  • 把振动数据转成音频并播放
  • 提取apk中的各种语言翻译成表格,python脚本
  • Lakehouse: Unifying DW Advanced Analytics in Open Platforms
  • 《Java 程序设计》第 8 章 - Java 常用核心类详解
  • 未授权访问漏洞 总结
  • 阿里云【免费试用】Elasticsearch 智能运维 AI 助手
  • python毕业设计案例:基于python django的抖音数据分析与可视化系统,可视化有echarts,算法包括lstm+朴素贝叶斯算法
  • Flutter渲染引擎:Impeller和Skia
  • 低成本嵌入式Linux开发方案:通过配置文件实现参数设置
  • R语言与作物模型(以DSSAT模型为例)融合应用高级实战技术
  • 亚远景-“过度保守”还是“激进创新”?ISO/PAS 8800的99.9%安全阈值之争
  • 11.Dockerfile简介