自学内容网 自学内容网

RKmedia的音视频合成器和wifi和Sd卡

RKmedia的音视频合成器和wifi和Sd卡

目录

RKmedia的音视频合成器和wifi和Sd卡

回顾

RKMedia 的音视频合成器

1、合成器的介绍

2、合成器 Muxer 的 API 详解(RK_MPI_MUXER_EnableChn)

将音视频合成mp4,一边推流,一边保存到本地mp4

WIFI 和 SD 卡

1、SD 卡插入挂载的文件夹

2、如何查看 SD 卡的容量

3、通过代码查看SD卡是否存在?

4、USB 的 WIFI 介绍

5、怎么移植 WIFI 的驱动的

6、怎么开启 WIFI 和关闭 WIFI

7、怎么配置 WIFI 的?

8、怎么获取网关 IP 的

如何强制用 WIFI 上网


回顾

-- 1、为什么你的音频编码要用 G711A,那么你能不能给我介绍一下 G711A 呢?

  • 做监控对音频的质量要求不高!
  • 官方自带的一个编码库 不支持 Mp3 ,我用的 RTSP 推流不支持 Mp2 所以我才用了低质量的 G711A。
  • G711A 早期的无线电通话编码之一,与其其名 G711U G726 等

-- 2、音频的采样率是什么?音频的格式 S16 和 S16P 的区别?

  • 采样率:每秒采样的次数,采样率越高还原度越高

  • S16P->s16 p ->平面存储

alt text

-- 3、你用的声卡的音频芯片是哪个?如果出现多声卡情况,如何选择对应声卡?

  • ES8311:中端音频芯片,最高支持采样率 96000

-- 如果你的系统有多个声卡,你是如何选择声卡的!

-- 代码中可写填设备名:

hw:0 -第一个设备
hw:1->第二个设备

  • 有一种可能:

板子上带有声卡,接的电视做广告机也带有声卡!
那么我就需要默认选则电视当作输出的声卡!

  • 查一个东西 ALSA 的默认声卡配置

Linux下使用alsamixer配置系统默认的声卡设备(默认音频输出设备、输入设备、系统音量)-腾讯云开发者社区-腾讯云

-- 4、你的声卡的芯片接口是什么?驱动是否是你做的/移植?

  • I2C + IIS(所有的声卡芯片接口都是I2c+iis)

买这个芯片厂商有样板(官板),样板就是 ES8311
所以为了不修改驱动直接能用,我们也选择 ES8311 当作声卡芯片

  • 第二种可能:

我就用的 ES8388->
需要你修改 设备树 + 底层驱动配置

-- 5、音视频推流的时候有没有遇到什么问题,你是怎么解决的!

我当时确实遇到了问题
印象非常深刻,当时我的音频无论怎么推 都是各种杂音!
最后发现,G711A 不能使用 双声道 采样率高于 8000 的情况!

RKMedia 的音视频合成器

1、合成器的介绍

现在的音频和视频都是单独录制!
音频最多保存成 Mp2 / G711A
视频最多保存成 H264/H265
不专业一看,都不知道这是啥!
正常人只认 Mp4 ->音视频合成的产物!

-- 所以我们今天用合成器将音频和视频合成mp4

2、合成器 Muxer 的 API 详解(RK_MPI_MUXER_EnableChn)

-- 函数的功能:主要是初始化使能一个 Muxer(音视频合成器)

-- 函数的原型:

RK_S32 RK_MPI_MUXER_EnableChn(MUXER_CHN VmChn, MUXER_CHN_ATTR_S *pstAttr);

-- 函数的参数:

  • VmChn:合成器通道号

  • pstAttr:合成器通道属性

typedef struct rkMUXER_CHN_ATTR_S {
  MUXER_MODE_E enMode;
  MUXER_TYPE_E enType;
  union {
    RK_CHAR *pcOutputFile;
    MUXER_SPLIT_ATTR_S stSplitAttr;
  };

  // video stream params
  MUXER_VIDEO_STREAM_PARAM_S stVideoStreamParam;
  // audio stream params
  MUXER_AUDIO_STREAM_PARAM_S stAudioStreamParam;

  // pre record params
  MUXER_PRE_RECORD_PARAM_S stPreRecordParam;

  RK_U32 u32MuxerId;
  RK_BOOL bLapseRecord;
} MUXER_CHN_ATTR_S;

  • enMode:工作模式

MUXER_MODE_SINGLE 单个文件输出模式
MUXER_MODE_AUTOSPLIT 自动分割模式

  • enType:

MUXER_TYPE_MP4 合称为 Mp4 类型
MUXER_TYPE_MPEGTS 合成的为 MPEGTS 类型->常用于直播类型
MUXER_TYPE_FLV合成的为 FLV 类型->我们选择 FLV 因为 Mp4 不 支持 G711A

  • pcOutputFile:

如果你选择的是 单个文件输出,你告诉他你输出文件的名字

  • stSplitAttr:如果你选择是 自动分割模式,这个结构体就是自动分割属性
typedef struct rkMUXER_SPLIT_ATTR_S {
MUXER_SPLIT_TYPE_E enSplitType; 自动分割类型
RK_U32 u32SizeLenByte;
RK_U32 u32TimeLenSec;
MUXER_SPLIT_NAME_TYPE_E enSplitNameType;
union {
MUXER_NAME_AUTO_S stNameAutoAttr;
MUXER_NAME_CALLBCAK_S stNameCallBackAttr;
};
} MUXER_SPLIT_ATTR_S;
  • enSplitType:自动分割的类型

MUXER_SPLIT_TYPE_TIME 以时间作为分割单位
MUXER_SPLIT_TYPE_SIZE 以大小作为分割单位

  • u32SizeLenByte:

你的自动分割类型选择是以 大小作为分割单位,此值才有效! 1024*1024 =1M 大小分割一次

  • u32TimeLenSec

你的自动分割类型选择是以 时间作为分割单位,此值才有效! 单位 S 10 、 20 ...60S,例如如果填写30,就是每隔30s分割成一个mp4文件

  • enSplitNameType:自动分割的 名字命名的模式

MUXER_SPLIT_NAME_TYPE_AUTO 自动命名
MUXER_SPLIT_NAME_TYPE_CALLBACK 回调函数命名

  • stNameAutoAttr:如果你选择的是 自动命名方式 此值有效
typedef struct rkMUXER_NAME_AUTO_S {
    RK_BOOL bTimeStampEnable;//是否在名字里面加上 当前时间
    xxxx-xx-xx xxx .mp4
    RK_U16 u16StartIdx;//起始的索引号 1    1-xxxx 年-xxx 月--
    x.mp4  2-xxxx 年-xxx 月.mp4
    RK_CHAR *pcPrefix;//你要不要加上特殊标志 "xyd " xyd-1-xxxx 年
    -xxx 月--x.mp4
    RK_CHAR *pcBaseDir;//存放的路径
} MUXER_NAME_AUTO_S;
  • stNameCallBackAttr:如果你选择是回调命名 此值有效

  • stVideoStreamParam:这是视频流的属性

  • stAudioStreamParam;这是音频流的属性

将音视频合成mp4,一边推流,一边保存到本地mp4

-- 代码思想:

  • 编码(AENC和VENC)创建两个通道,一个用来推流,一个用来与合成器绑定,用来生成本地mp4文件

alt text

alt text

-- 将合成器与AENC和VENC绑定,

alt text

-- 注意,推流最高用RTSP_CODEC_ID_AUDIO_G711A格式,其他不支持

#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 <time.h>
#include <unistd.h>
#include "rtsp_demo.h"
#include "sample_common.h"
#include "rkmedia_api.h"
#include "rkmedia_venc.h"
#include "pthread.h

原文地址:https://blog.csdn.net/m0_71813740/article/details/144383028

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!