EasyStreamClient基于ffmpeg开发的通用视频读取工具,可以读取RTSP、RTMP、HTTP、TCP、UDP各种视频流,还可以读取各种类型视频文件

之前我们发布过一款EasyRTSPClient:《用EasyRTSPClient做工具分析RTSP流获取H.264/H.265/G711/G726/AAC原数据裸数据解析vps/sps/pps/I帧/P帧快速定位分析问题》,那个是基于live555对RTSP协议进行取流的一款拉流工具,基于EasyRTSPClient就可以不用考虑RTSP(OPTIONS、DESCRIBE、SETUP、PLAY、GET_PARAMETER、SET_PARAMETER)、RTP、RTCP那么些复杂的流程了,直接一个工具就能将音视频流回调给上层使用,比如录像、播放、AI分析等等!

那么,遇到不是RTSP流的协议怎么办?比如RTMP、HTTP、TCP、UDP等等等等!!!

这里,我第一个想到的其实是ffmpeg和vlc,但vlc二次开发基本上是搞笑,ffmpeg二次开发难度又相对比较高,想要完整地把音视频数据都给取出来,存起来,头皮发麻,好麻烦!

于是,我搞了一个 EasyStreamClient ,EasyStreamClient其实就是把ffmpeg封装起来,用几个简单的接口,就能把数据取出来,取出ES数据,回调给上层,上层就可以做各种事情了:

  1. 流媒体分发:流媒体服务器拿到这些数据,可以进行各种协议的转换,比如:RTSP、RTMP、FLV、WebSocket;
  2. 转推流:EasyStreamClient拉取到的ES数据,可以再次喂给RTMP推流器,推送到CDN等第三方平台;
  3. 录像:EasyStreamClient取到的音视频数据,可以进行本地的MP4、TS、PS等录像;
  4. AI分析:可以基于EasyStreamClient进行实时流的抽帧,抽帧再供给AI智能分析;

整个EasyStreamClient接口也是非常简单的:

	/* 创建EasyStreamClient句柄  返回0表示成功,返回非0表示失败 ;  loglevel : 0 - quiet  1 - debug*/
	Easy_API int Easy_APICALL EasyStreamClient_Init(Easy_Handle *handle, int loglevel);

	/* 释放EasyStreamClient 参数为EasyStreamClient句柄 */
	Easy_API int Easy_APICALL EasyStreamClient_Deinit(Easy_Handle handle);

	/* 设置背景音 flag: 1 开启 0:关闭 url:背景音路径包含文件名 ret: 0:成功  < 0:配置失败 1:不支持背景音功能*/
	Easy_API int Easy_APICALL EasyStreamClient_SetBackAudio(Easy_Handle handle, int flag, char* url);

	/* 设置数据回调 */
	Easy_API int Easy_APICALL EasyStreamClient_SetCallback(Easy_Handle handle, EasyStreamClientCallBack callback);

	/* 设置叠加图片 */
	Easy_API int Easy_APICALL EasyStreamClient_SetOverlayImage(Easy_Handle handle, int left, int top, int scaleWidth, int scaleHeight, const char* imageFilePath);

	/* 打开网络流 */
	Easy_API int Easy_APICALL EasyStreamClient_OpenStream(Easy_Handle handle, char *url, EASY_RTP_CONNECT_TYPE connType, void *userPtr, int reconn, int timeout, int useExtraData);

	/* 获取输入流的context */
	Easy_API int Easy_APICALL EasyStreamClient_GetStreamContext(Easy_Handle handle, void** avFormatContext, void** avCodecContext);

	/* 获取快照 */
	Easy_API int Easy_APICALL EasyStreamClient_GetSnap(Easy_Handle handle);
	Easy_API int Easy_APICALL EasyStreamClient_ConvertFrame2Image(const unsigned int videoCodec, const unsigned char* keyFrameData, int keyFrameDataSize, unsigned char** outImage, int* outImageSize);
	Easy_API int Easy_APICALL EasyStreamClient_ReleaseImageData(unsigned char** imageData);

	/* 设置音频是否启用 */
	Easy_API int Easy_APICALL EasyStreamClient_SetAudioEnable(Easy_Handle handle, int enable);

	Easy_API int Easy_APICALL EasyStreamClient_SetAudioOutFormat(Easy_Handle handle, unsigned int audioFormat, int samplerate, int channels);

	/* 获取音频是否启用 */
	Easy_API int Easy_APICALL EasyStreamClient_GetAudioEnable(Easy_Handle handle);

	/*录像下载*/
	Easy_API int Easy_APICALL EasyStreamClient_SetDownloadCallback(EasyDownloadCallBack callback);
	Easy_API int Easy_APICALL EasyStreamClient_DownloadOneRecord(const char* rootPath, const char* streamName, const char* startTime, void* userPtr);
	Easy_API int Easy_APICALL EasyStreamClient_DownloadPeriod(const char* rootPath, const char* streamName, const char* startTime, const char* endTime, void* userPtr);

上面的接口,开发能看懂,具体的在Github:https://github.com/EasyDarwin/EasyStreamClient

直接看使用效果吧:

EasyStreamClient ffmpeg
EasyStreamClient ffmpeg

EasyStreamClient ffmpeg
EasyStreamClient ffmpeg

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值