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
英文地址,請注明出處:http://en.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&…