在我之前写的一篇文章《SkeyeRTSPLive传统视频监控互联网+实现利器解决方案》中提到RTSP转RTMP的转流过程,简化流程就是通过SkeyeRTSPClient拉RTSP流,获取音视频编码数据,然后再通过SkeyeRTMP推出去,流程非常简单;然后再实际开发过程中,我们发现其实这个过程并没有想象中那么简单;首先,RTSP协议支持多种音视频编码格式,如音频支持AAC,G711,G726,等,视频支持H264,H625,MJPEG, MPEG等等各种格式,而SkeyeRTMPPusher推流只支持H264(已扩展支持H265)格式,这时,音频我们可以通过SkeyeAACEncoder将音频转码成AAC格式,而视频我们可以通过SkeyeVideoDecoder解码成原始数据,然后再通过SkeyeVideoEncoder将原始数据转码成RTMP推送指定的格式,本文,我们将重点讲述SkeyeVideoDecoder的软解码流程。
1. SkeyeVideoDecoder软解码接口声明如下:
#ifndef __SKEYE_DECODER_API_H__
#define __FF_DECODER_API_H__
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define SKEYEDECODER_API __declspec(dllexport)
//=======================================================
//Decoder
#ifndef DECODER_H264
#define DECODER_H264 0x1C //28
#endif
#ifndef DECODER_MPEG4
#define DECODER_MPEG4 0x0D //13
#endif
#ifndef DECODER_MPEG2
#define DECODER_MPEG2 0x02 //2
#endif
#ifndef DECODER_MJPEG
#define DECODER_MJPEG 0x08 //8
#endif
#ifndef DECODER_MP3
#define DECODER_MP3 0x15001 //86017
#endif
#ifndef DECODER_AAC
#define DECODER_AAC 0x15002 //86018
#endif
//=======================================================
//输出格式
#ifndef OUTPUT_PIX_FMT_YUV420P
#define OUTPUT_PIX_FMT_YUV420P 0
#endif
#ifndef OUTP