专栏首页EasyNVRRTSP协议转RTMP协议的行业视频接入网关EasyRTSPLive如何实现音频转码的

RTSP协议转RTMP协议的行业视频接入网关EasyRTSPLive如何实现音频转码的

EasyRTSPLive是由TSINGSEE青犀开放平台开发和维护的一个完善的行业视频接入网关,拉流IPC摄像机或者NVR硬盘录像机RTSP流转成RTMP推送到阿里云CDN/腾讯云CDN/RTMP流媒体服务器,支持多路RTSP流同时拉取并以RTMP协议推送发布。

因其稳定流畅的使用环境得到广大用户的一直好评,最近有用户反馈转码成aac格式过程中遇到一些问题,具体如下:

提出问题

EasyRTMP推送rtmp流到EasyDSS等RTMP流媒体服务器目前只支持推送aac格式的音频数据,而实际我们easyrtsplive通过librtspclient拉取的网络摄像机等输出的rtsp流很多都是g711,g726等格式的音频,所以,我们需要将音频编码格式转码成aac格式。

分析问题

通过对libfaac音频编码libeasyaacencoder库的封装,我们可以通过调用该sdk的接口轻松实现g711,g726等格式的音频转码为aac音频格式。

解决问题

首先,我们需要导入libeasyaacencoder库,如下代码所示:

		#include "EasyAACEncoderAPI.h"

		#ifdef _WIN32
		#pragma comment(lib,"libEasyAACEncoder.lib")
		#endif

然后,我们在音频数据回调时调用Easy_AACEncoder_Encode接口对音频数据进行解码,如下代码所示:

		int bits_per_sample = frameinfo->bits_per_sample;
		int channels = frameinfo->channels;
		int sampleRate = frameinfo->sample_rate;

		if (EASY_SDK_AUDIO_CODEC_G711U   ==  frameinfo->codec
			|| EASY_SDK_AUDIO_CODEC_G726  ==  frameinfo->codec 
			|| EASY_SDK_AUDIO_CODEC_G711A == frameinfo->codec ) 
		{
			if (pChannel->fPusherInfo.pAACCacheBuffer == NULL)
			{
				int buf_size = BUFFER_SIZE;
				pChannel->fPusherInfo.pAACCacheBuffer  = new unsigned char[buf_size];
				memset(pChannel->fPusherInfo.pAACCacheBuffer , 0x00, buf_size);
			}

			if (pChannel->fPusherInfo.aacEncHandle == NULL)
			{
				InitParam initParam;
				initParam.u32AudioSamplerate=frameinfo->sample_rate;
				initParam.ucAudioChannel=frameinfo->channels;
				initParam.u32PCMBitSize=frameinfo->bits_per_sample;
				if (frameinfo->codec == EASY_SDK_AUDIO_CODEC_G711U)
				{
					initParam.ucAudioCodec = Law_ULaw;
				} 
				else if (frameinfo->codec == EASY_SDK_AUDIO_CODEC_G726)
				{
					initParam.ucAudioCodec = Law_G726;
				}
				else if (frameinfo->codec == EASY_SDK_AUDIO_CODEC_G711A)
				{
					initParam.ucAudioCodec = Law_ALaw;
				}
				pChannel->fPusherInfo.aacEncHandle = Easy_AACEncoder_Init( initParam);
			}
			unsigned int out_len = 0;
			int nRet = Easy_AACEncoder_Encode(pChannel->fPusherInfo.aacEncHandle, 
				(unsigned char*)pbuf, frameinfo->length, (unsigned char*)pChannel->fPusherInfo.pAACCacheBuffer, &out_len) ;
			if (nRet>0&&out_len>0)
			{
				pSendBuffer = (unsigned char*)pChannel->fPusherInfo.pAACCacheBuffer ;
				nSendBufferLen = out_len;
				frameinfo->codec = EASY_SDK_AUDIO_CODEC_AAC;
			} 
		}

最后,使用完后我们需要释放申请的资源,如下代码所示:

	if (pChannel->fPusherInfo.aacEncHandle )
	{
		Easy_AACEncoder_Release(pChannel->fPusherInfo.aacEncHandle );
		pChannel->fPusherInfo.aacEncHandle  = NULL;
	}

	if (pChannel->fPusherInfo.pAACCacheBuffer )
	{
		delete[] pChannel->fPusherInfo.pAACCacheBuffer;
		pChannel->fPusherInfo.pAACCacheBuffer = NULL;
	}

通过以上几步完美解决了音频转码的问题,由此可见EasyRTSPLive全平台支持(包括Windows/Linux 32&64,ARM各种平台,Android,iOS),是技术研发快速迭代的工具,也是安防运维人员进行现场问题排查的得力帮手!最新SDK版本、文档及示例代码 :https://github.com/tsingsee/EasyRTSPLive

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 安防融合视频云服务EasyCVR集成海康EHome协议实现设备录像回看返回会话ID为-1是什么情况?

    之前TSINGSEE青犀视频讲过互联网安防视频云服务EasyCVR能够集成海康EHome私有协议,当然我们在测试的时候碰到了一些问题,本文就来讲一下测试Easy...

    EasyNVR
  • 视频监控系统视频上云解决方案EasyCVR集成海康EHome私有协议系列——设备录像回看说明

    之前的博文讲过EasyCVR集成海康EHome私有协议语音对讲操作流程以及Ehome协议调用流程介绍,有兴趣的用户可以移步看一下,本文我们还是来说EasyCVR...

    EasyNVR
  • RTSP/Onvif网络摄像头流媒体服务器播放H265编码视频不显示视频播放问题解决

    H.265技术在码率上进行了深度优化,同等画质下,可以比H.264节省近50%的码率,使存储成本大大降低。我们流媒体服务器和流媒体播放器都将会趋向于H265编码...

    EasyNVR
  • 一句玩笑之后的思考(r6笔记第68天)

    今天在微信上碰到某大师,简单聊了下。我和这位大师的关系也蛮有趣,最开始通过其他的渠道认识,还没有见过面,我向他推荐了我的一名前同事,没想到这位大洋彼岸的前同事竟...

    jeanron100
  • python实现一个简单的dnspod

    dnspod api地址:https://www.dnspod.cn/docs/records.html#record-create

    py3study
  • SQL 性能优化梳理

    数据库通过锁机制来解决并发场景-共享锁(读锁)和排他锁(写锁)。读锁是不阻塞的,多个客户端可以在同一时刻读取同一个资源。写锁是排他的,并且会阻塞其他的读锁和写锁...

    良月柒
  • SQL 性能优化梳理

    数据库通过锁机制来解决并发场景-共享锁(读锁)和排他锁(写锁)。读锁是不阻塞的,多个客户端可以在同一时刻读取同一个资源。写锁是排他的,并且会阻塞其他的读锁和写锁...

    用户2769421
  • SQL 性能优化梳理

    来源:juejin.im/post/59b11ba151882538cb1ecbd0

    Java团长
  • SQL性能优化梳理

    前言 本文主要针对的是关系型数据数据库MySql。键值类数据库可以参考最简大数据Redis。先简单梳理下Mysql的基本概念,然后分创建时和查询时这两个阶段的优...

    Java高级架构
  • HashMap 中的容量与扩容实现,细致入微,值的一品!

        巴闭,你的脚怎么会有味道,我要闻闻看是不是好吃的,嗯~~爸比你的脚臭死啦!! ……

扫码关注云+社区

领取腾讯云代金券