功能概要:
  • 功能概述:EasyStreamClient是基于ffmpeg二次封装的一款支持File、RTSP、RTMP、HTTP等各种流媒体协议的音视频提取功能组件,可以说只要ffmpeg能干的,EasyStreamClient就能干,站在巨人的肩膀上,EasyStreamClient支持H.264、H.265、PCM、AAC等各种音视频编码格式,支持Windows、Linux、Android、iOS、ARM等各种平台。EasyStreamClient support all kinds of streaming protocol, callback video & audio data,you can use this as easy ffmpeg !
  • 操作系统:任意;



EasyStreamClient做工具:



EasyStreamClient做SDK调用:



说到流媒体取流,我第一个想到的其实是ffmpeg和vlc,但vlc二次开发基本上是搞笑,ffmpeg二次开发难度又相对比较高,想要完整地把音视频数据都给取出来,存起来,头皮发麻,好麻烦!于是,我搞了一个 EasyStreamClient ,EasyStreamClient其实就是把ffmpeg封装起来,用几个简单的接口,就能把数据取出来,取出ES数据,回调给上层,上层就可以做各种事情了!

EasyStreamClient是基于ffmpeg二次封装的一款支持File、RTSP、RTMP、HTTP等各种流媒体协议的音视频提取功能组件,可以说只要ffmpeg能干的,EasyStreamClient就能干,站在巨人的肩膀上,EasyStreamClient支持H.264、H.265、PCM、AAC等各种音视频编码格式,支持Windows、Linux、Android、iOS、ARM等各种平台。





一、编译与运行

EasyStreamClient:以客户端的形式,从流地址URL将音视频获取到本地;

Windows编译方法:

  Visual Studio 2010 编译:./EasyStreamClient-master/win/EasyStreamClient.sln


Linux编译方法:

  chmod +x ./Buildit
  ./Buildit


Usage用法:

  --------------------------------------------------------------
  EasyStreamClient.exe -d <rtsp-url>[ -m <transport-mode> -s <save-file>]
  Help Mode:   EasyStreamClient.exe -h
  rtsp-url : source rtsp address
  transport-mode : tcp or udp, default is tcp
  save-file : yes or no, default is yes
  For example: EasyStreamClient.exe -d "http://devimages.apple.com/iphone/samples/bipbop/gear3/prog_index.m3u8" -m tcp -s yes
  --------------------------------------------------------------


二、RTSPSourceCallBack数据回调说明

EasyStreamClient可以回调出多种类型的数据:

#define EASY_SDK_VIDEO_FRAME_FLAG		/* 视频帧数据 */
#define EASY_SDK_AUDIO_FRAME_FLAG /* 音频帧数据 */
#define EASY_SDK_EVENT_FRAME_FLAG /* 事件帧数据 */
#define EASY_SDK_RTP_FRAME_FLAG /* RTP帧数据 */
#define EASY_SDK_SDP_FRAME_FLAG /* SDP帧数据 */
#define EASY_SDK_MEDIA_INFO_FLAG /* 媒体类型数据 */


EASY_SDK_VIDEO_FRAME_FLAG数据可支持多种视频格式:

#define EASY_SDK_VIDEO_CODEC_H265		/* H265  */
#define EASY_SDK_VIDEO_CODEC_H264 /* H264  */
#define EASY_SDK_VIDEO_CODEC_MJPEG /* MJPEG */
#define EASY_SDK_VIDEO_CODEC_MPEG4 /* MPEG4 */


视频帧标识支持:

#define EASY_SDK_VIDEO_FRAME_I			/* I帧 */
#define EASY_SDK_VIDEO_FRAME_P /* P帧 */
#define EASY_SDK_VIDEO_FRAME_B /* B帧 */
#define EASY_SDK_VIDEO_FRAME_J /* JPEG */


当回调出RTSP_FRAME_INFO->codec为EASY_SDK_VIDEO_CODEC_H264数据,EASY_FRAME_INFO->type为EASY_SDK_VIDEO_FRAME_I关键帧时,我们输出的数据结构为SPS+PPS+I的组合:

	|-----sps-----|-----pps-----|-----I Frame-----|
|             |             |                 |
0--------reserved1------reserved2-----------length


当回调出EASY_FRAME_INFO->codec为EASY_SDK_VIDEO_CODEC_H265数据,EASY_FRAME_INFO->type为EASY_SDK_VIDEO_FRAME_I关键帧时,我们输出的数据结构为VPS+SPS+PPS+I的组合:

	|-----vps-----|-----sps-----|-----pps-----|-----I Frame-----|
|             |             |             |                 |
0--------reserved1-----reserved2------reserved3-----------length


EASY_SDK_AUDIO_FRAME_FLAG数据可支持多种音频格式:

#define EASY_SDK_AUDIO_CODEC_AAC			/* AAC */
#define EASY_SDK_AUDIO_CODEC_G711A /* G711 alaw*/
#define EASY_SDK_AUDIO_CODEC_G711U /* G711 ulaw*/
#define EASY_SDK_AUDIO_CODEC_G726 /* G726 */


三、EasyStreamClient用途

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

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

点赞(5)
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部