![](https://img-blog.csdnimg.cn/20191009201755315.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
音视频应用开发
音视频应用开发相关
KayChanGeek
情愫竟短暂 犹如骚人墨客笔下的烟花 风不停留 何苦绕来摇晃灯火
展开
-
h264起始码格式转换
h264起始码h264文件的NALU的起始码可以是0x00 0x00 0x01或者0x00 0x00 0x00 0x01代码实现以下通过代码功能可以格式化h264文件为任意一种起始码类型。int h264_format_start_code(const char *dst, const char *src, int type /* 0 for 001, 1 for 0001 */)dst:输出格式化后的h264文件src:输入原始的h264文件type:0 格式化为0x0原创 2020-06-23 10:17:35 · 1478 阅读 · 0 评论 -
判断音频是否有海思头
海思SOC AENC模块音频编码出来的数据是带海思头的,使用常规的解码器是无法直接解码的,而是要去掉海思头后才是原始的音频数据,那么如何判断音频包中是否有海思头呢!海思音频数据分布[hisi header][audio data][hisi header][audio data]···[hisi header][audio data]海思音频头海思音频头有4个字节unsigned char hisi_header[4];hisi_header[0] = 0x00; // 固定为0x0原创 2020-05-13 13:29:13 · 1052 阅读 · 0 评论 -
Windows下CMake libuv
简单对比下几个常用的几个异步事件库libuv支持在Windows下支持IOCP,Linux下支持epoll,BSD系支持kqueuelibev在Linux下支持epoll,BSD系支持kqueue,但在Windows只能selectlibevent支持在Windows下支持IOCP(但是据说支持的不怎么好),Linux下支持epoll,BSD系支持kqueue下载源码https...原创 2020-04-30 17:01:14 · 1135 阅读 · 1 评论 -
nginx源码开发-在nginx.conf中添加自定义配置
《音视频应用开发系列文章目录》nginx的配置内容都在nginx.conf中,nginx已经预定义了许多的配置选项,比如worker_processes,error_log,user等等···,那么如何在nginx添加自定义的配置呢!添加自定义配置比如现在要在nginx.conf下添加rabbitmq的配置内容:配置名称 MQ-IP MQ-PORT MQ-USE...原创 2020-04-29 13:02:02 · 1465 阅读 · 0 评论 -
nginx源码分析-ngx_get_options函数及如何添加自定义option
《音视频应用开发系列文章目录》ngx_get_options函数分析static ngx_int_tngx_get_options(int argc, char *const *argv){ u_char *p; ngx_int_t i; // 循环遍历argv for (i = 1; i < argc; i++) { ...原创 2020-04-21 16:47:07 · 445 阅读 · 0 评论 -
nginx源码分析-main函数
nginx的main函数位于nginx源码目录下的src/core/nginx.c文件中int ngx_cdeclmain(int argc, char *const *argv){ ngx_buf_t *b; ngx_log_t *log; ngx_uint_t i; ngx_cycle_t *cycl...原创 2020-04-21 16:08:14 · 499 阅读 · 0 评论 -
nginx源码开发-添加三方库
生成Makefile按照此文章生成nginx源码的Makefilenginx添加三方库(以三方库rabbitmq-c为例)1.使用和编译nginx一样的编译器编译三方库rabbitmq-c2.打开并修改nginx的Makefile在ALL_INCS下面添加三方库的包含目录在build/output/nginx.exe 下添加三方库路径依赖3.进入nginx源码目...原创 2020-04-20 15:28:45 · 497 阅读 · 0 评论 -
Windows下CMake rabbitmq-c
编译openssl (如果不需要openssl,也可以跳过此步骤)https://blog.csdn.net/liang19890820/article/details/51658574 // 此大佬已经写的非常清楚完美无可挑剔以下总结该大佬快速编译需要软件:ActivePerl,Nasm,OpenSSL源码ActivePerl,Nasm下载安装完加入环境变量,打开CMD,根据需要...原创 2020-04-17 09:38:59 · 1038 阅读 · 1 评论 -
Windows下nginx-http-flv-module服务部署
《音视频应用开发系列文章目录》1.新建文件夹nginx-rtmp2.将《Windows下nginx-http-flv-module编译》生成的nginx.exe拷贝到nginx-rtmp目录下3.将nginx源码目录下的conf文件夹拷贝到nginx-rtmp目录下4.将nginx源码目录下的docs/html文件夹拷贝到nginx-rtmp目录下5.在nginx-rtmp目录...原创 2020-03-25 16:45:03 · 11629 阅读 · 10 评论 -
Windows下nginx-http-flv-module编译
准备nginx源码工具集1.mingw2.perl,安装时添加到环境变量3.nasm,安装完将nasm.exe所在的目录添加到环境变量4.sed,安装完将sed.exe所在的目录添加到环境变量三方库1.rtmp插件,nginx-rtmp-module或者nginx-http-flv-module(here use nginx-http-flv-module)2...原创 2020-03-25 15:26:45 · 12439 阅读 · 27 评论 -
Windows下RabbitMQ服务器部署及测试
系统环境win7/win10 x64下载安装erlangerlang官网下载不是一般的慢,这边提供快捷通道安装完添加环境变量:E:\install\rabbitmq\erlang\erl9.3\bin(换成实际路径/bin)测试win+r->cmd输入:erl,出现下图说明成功下载安装rabbitmq server同上和erlang打包好的下载地址安装完...原创 2020-03-23 17:18:30 · 800 阅读 · 0 评论 -
JT/T1078-车辆终端模拟器
《音视频应用开发系列文章目录》1.支持任意音视频(本地,摄像头,IPC)以JT1078协议打包发送2.音频支持G711A/G711U/G726/AAC3.视频支持H264/H2654.支持OSD编辑5.支持人脸检测合作方式:CSDN私信...原创 2020-03-15 21:43:42 · 2985 阅读 · 5 评论 -
JT/T1078-音视频转发服务器
1.支持JT1078协议音视频转RTMP推流nginx2.支持实时流,回放流,对讲高并发转发服务3.音频支持G711A/G711U/G726/AAC4.视频支持H2645.支持实时可视化终端连接状态及数据6.支持实时可视化线程池7.支持Windows/Linux部署...原创 2020-03-15 21:36:29 · 3346 阅读 · 3 评论 -
JT/T1078-RTP音视频封包
JT1078-RTP包结构JT1078-RTP音视频包定义#pragma pack(push)#pragma pack (1)typedef struct Jt1078AudioRtpPacket_T { unsigned char head[4];#if IS_JT1078RTP_BIGENDIAN // 大小端模式 unsigned char v : 2;...原创 2020-02-28 10:41:54 · 3806 阅读 · 1 评论 -
搭建RTSP服务器
《音视频应用开发系列文章目录》网上现在公网的RTSP服务地址都已经失效,无法使用,可以自己搭建RTSP服务器用于测试,这边介绍使用VLC搭建RTSP服务器。安装打开VLCRTSP媒体源选择从本地媒体文件(本地媒体文件mp4/avi等)从网络流(RTSP/RTMP/UDP/RTP等远程网络流)从捕获设备(摄像头麦克风等)开始搭建以媒体源为RTMP网...原创 2020-01-15 15:03:43 · 4340 阅读 · 0 评论 -
FFmpeg推流器
《音视频应用开发系列文章目录》推流器设计思路生产者-消费者模式。一个线程负责拉取原始音视频流然后存储在队列,一个线程负责从音视频流队列获取流然后推送,视频帧需要按照实际的帧率间隔发送,否则服务器可能会受不了设计AvPusher类AvPusher.h#ifndef _AV_PUSHER_H_#define _AV_PUSHER_H_/*****************...原创 2019-12-26 14:56:54 · 722 阅读 · 0 评论 -
FFmpeg拉流器
《音视频应用开发系列文章目录》拉流器设计思路生产者-消费者模式。一个线程负责拉取原始音视频流然后存储在队列,音频消费线程从音频队列获取原始流进行解码等其他消费,视频消费线程从视频队列获取原始流进行解码等其他消费。设计AvPuller类AvPuller.h#ifndef _AV_PULLER_H_#define _AV_PULLER_H_/**************...原创 2019-12-26 14:36:41 · 2076 阅读 · 1 评论 -
FFmpeg视频解码硬件加速
《音视频应用开发系列文章目录》ffmpeg支持的硬件解码器enum AVHWDeviceType { AV_HWDEVICE_TYPE_NONE, AV_HWDEVICE_TYPE_VDPAU, AV_HWDEVICE_TYPE_CUDA, AV_HWDEVICE_TYPE_VAAPI, AV_HWDEVICE_TYPE_DXVA2, AV...原创 2019-12-26 14:13:03 · 4484 阅读 · 0 评论 -
windows下编译librtmp
《音视频应用开发系列文章目录》librtmp依赖zlib和openssl,所以在编译librtmp前需要编译这两个家伙编译zlib下载zlib并解压进入zlib根目录下的E:contrib/vstudio/vc14目录,VS1015之后的就进入从vc14,之前的进入对应目录即可选择对应的解决方案平台win32/x64 debug/release etc对zlibvc项目右键...原创 2019-12-25 17:11:23 · 935 阅读 · 0 评论 -
cv::Mat编码H264
《音视频应用开发系列文章目录》本文基于ffmpeg and opencv封装H264编码器类AvH264,编码opencv的Mat数据类型图像为ffmpeg的AVPacket数据类型的H264数据。编码流程打开编码器 // 初始化一些H264编码器的参数编码关闭编码器编码器参数typedef struct AvH264EncConfig_T { int width...原创 2019-12-03 13:00:26 · 2566 阅读 · 3 评论 -
大小端
《音视频应用开发系列文章目录》大小端互换void endian_swap(void *data, int size) { // size must 2 4 8 unsigned char *swdata = (unsigned char *)data; for (int i = 0; i < size / 2; ++i) { unsigned char temp = ...原创 2019-12-02 21:27:14 · 285 阅读 · 0 评论 -
AVFrame和cv::Mat互转
《音视频应用开发系列文章目录》ffmpeg视频解码后得到图像经常需要一些图像处理,opencv是图像处理的神器。所以就需要两者之间互相转化,ffmpeg解码后的数据类型是AVFrame,而opencv的图像数据结构是Mat,这就需要做个转化,本文实现了avframe->mat,mat->avframe。封装成函数cv::Mat avframe2cvmat(AVFrame *av...原创 2019-12-02 21:01:11 · 3944 阅读 · 2 评论 -
音频编解码之AAC
《音视频应用开发系列文章目录》本文基于fdk-aac封装AAC编码器类AvAac。aac编解码库有faac和fdk-aac,经百度,fdk-aac比较强大,所以基于fdk-aac,首先需要编译fdk-aac,Linux下easy,Windows下可以参考《windows下CMake fdk-aac》。编码流程打开编码器 // 初始化一些AAC编码器的参数编码关闭编码器编码...原创 2019-12-02 20:40:03 · 3641 阅读 · 0 评论 -
音频编解码之G711
《音视频应用开发系列文章目录》G711规定了如何将128kbps的raw pcm信号转为64kbps的g711u/g711a音频信号。本文在前人的基础上封装了G711的编解码算法,有两种实现(基于算法和基于查表),查表的速度更快(源码下载)。#ifndef _G711_H_#define _G711_H_/**************************************...原创 2019-12-02 19:03:46 · 2617 阅读 · 0 评论 -
音视频应用开发系列文章目录
前言本文记录了本人在音视频学习和应用开发之路遇到的知识点和实际应用中遇到的坑所做的一些总结。因为音视频这方面的知识太多太多,就算今天记住了,过段时间又会遗忘一些细节,在此做记录总结供大家和自己日后做参考。持续更新ing···环境搭建篇《初识ffmpeg》《windows部署nginx+rtmp服务器并进行推拉流》《windows下CMake fdk-aac》《windows...原创 2019-11-29 23:33:44 · 3112 阅读 · 0 评论 -
windows下CMake fdk-aac
《音视频应用开发系列文章目录》前言在Linux下fdk-aac有编译脚本,可以轻松的编译之。但是在Windows下木有,这边创建fdk-aac cmake工程使得fdk-aac能cmake跨平台编译。这里使用Windows下的MSVC编译器编译。准备下载fdk-aac源码(本文使用的版本是fdk-aac-2.0.1)CMake工具(本文使用的版本是cmake-3.16.0-rc...原创 2019-11-23 17:07:29 · 1345 阅读 · 0 评论 -
音频编解码之G726
《音视频应用开发系列文章目录》在网上找了一份G726和PCM互相转化的代码(链接)。在VS2015下配置然后编译。使用附带的.pcm音频文件《上海滩》进行其demo代码测试,会发现成功运行但是有问题,pcm转成g726后,再将g726转成pcm,使用audacity进行pcm原始数据播放会发现声音变质了,就是转码有问题。本人基于其源码的(g726.c/g726.h)开发了一个g726转码类(A...原创 2019-11-20 20:29:48 · 3773 阅读 · 7 评论 -
FFmpeg音频重采样
《音视频应用开发系列文章目录》相关函数swr_alloc_set_opts // 分配一个重采样swr_init// 初始化重采样swr_convert// 重采样swr_free// 释放重采样planar和packetffmpeg定义了以下音频数据的存储方式和存储格式:enum AVSampleFormat { AV_SAMPLE_FMT_NON...原创 2019-11-12 17:22:23 · 776 阅读 · 0 评论 -
windows部署nginx+rtmp服务器并进行推拉流
《音视频应用开发系列文章目录》准备资源OBS:用于推流VLC:用于拉流NGINX4WIN:前人Windows编译版http://nginx-win.ecsds.eu/download/nginx 1.7.11.3 Gryphon.zipNGINX源码:自行编译的可以下载http://nginx.org/download/nginx-rtmp-module:https://g...原创 2019-10-31 18:24:24 · 2136 阅读 · 0 评论 -
海思音频开发
《音视频应用开发系列文章目录》海思音频文档原始音频信号以模拟信号的形式给出后,通过 Audio Codec,按一定采样率和采样精度转换为数字信号。 Audio Codec 以 I2S 时序或 PCM 时序的方式,将数字信号传输给 AI设备。芯片利用 DMA 将 AI 设备中的音频数据搬移到内存中,完成录音操作。播放和录音是基于同样的原理。芯片利用 DMA 将内存中的数据传输到 AO 设备。...原创 2019-10-10 20:32:51 · 1582 阅读 · 0 评论 -
RTP载荷G711A/G711U/PCM/G726音频
《音视频应用开发系列文章目录》编码RTP over G711A/G711U/PCM音频的大致过程1.添加RTP12字节的头2.添加payload(G711A/G711U/PCM/G726的真实数据)RTP打包图伪代码void rtp_send_g711(char *data, int len){ char buf[MTU]; // fix buf[0~11] ...原创 2019-10-10 19:55:42 · 4241 阅读 · 1 评论 -
RTP载荷H264视频
《音视频应用开发系列文章目录》编码RTP over H264的大致过程1.判断H264的NALU数据大小和MTU(Maximum Transmission Unit[normal 1500bytes])的关系 小于MTU:发送整个NALU大于MTU:分片发送NALU2.添加RTP12字节的头3.case小于MTU:添加payload(NALU数据)4.case大于...原创 2019-10-10 19:23:56 · 504 阅读 · 0 评论 -
RTP载荷AAC音频
《音视频应用开发系列文章目录》编码RTP over AAC的大致过程1.添加RTP12字节的头2.如果AAC有ADTS头,则跳过7字节的data3.添加4字节的AU_HEAD 字节1:0x00 字节2:0x10 字节3:(data_len & 0x1fe0) >> 5 字节4:(data_len & 0x1f) << ...原创 2019-10-09 20:04:32 · 1737 阅读 · 0 评论 -
RTSP音视频传输频笔记
《音视频应用开发系列文章目录》RTSP在音视频传输中的位置RTSP协议是一个应用层协议,主要针对媒体流传输过程的控制和配置,提供OPTIONS,DESCRIBE,SETUP,TEARDOWN,PLAY,GET_PARAMETER,SET_PARAMETER等操作命令。下图是客户端请求rtsp服务器音视频数据的大致过程client通过RTSP协议对远程服务器发起连接请求,连接成功...原创 2019-09-25 20:17:03 · 3589 阅读 · 3 评论 -
H264学习笔记
《音视频应用开发系列文章目录》学习路线首先学习H264是啥,H264的码流数据结构。1.《H264视频码流格式浅析》2.《入门理解H264编码》看完上面两篇大佬的文章基本对H264的码流结构有所认识。一些记录1.H264和X264的区别 H264 是一个标准,一种码流格式,定义了视频流应该如何编解码;x264是一个开源的编码器,用于产生H264格式的视频流。2...原创 2019-09-17 19:40:33 · 603 阅读 · 0 评论 -
FFmpeg学习笔记
《音视频应用开发系列文章目录》FFmpeg介绍一个强大的音视频编解码内核工具(OR百度百科)FFmpeg获取ffmpeg官网:http://ffmpeg.org/ffmpeg编译好的包:https://ffmpeg.zeranoe.com/builds/ffmpeg有三个版本:static,shared,dev。static版本包含了三个静态编译ffmpeg的工具"ffmp...原创 2019-07-12 16:38:54 · 1118 阅读 · 1 评论