Android 使用FFmpeg拉取RTSP流 用RTMP推流到RTMP服务器

之前写了 如何在Android中使用ffmpeg 以及如何使用ffmpeg拉取RTSP流

业务场景大概是这样 拉取RTSP流之后 解码 送给AI分析 分析完之后 在进行绘制结果 然后编码 编码完之后 进行RTMP推流 。AI 解码 是别的同时负责的 我只需要把编码结果 使用RTMP推送出去即可

FFmpeg本身是支持RTMP直接推流的 但是由于之前的项目一直都是使用lib_srsrtmp那个库的 比较成熟 ,所以就还是使用这个库

先看下目录结构:

Android 使用FFmpeg拉取RTSP流 用RTMP推流到RTMP服务器_第1张图片

srs_librtmp.h 和srs_librtmp.cpp 是别的项目直接拿过来的

safequeue是一个安全等待队列

FFDemux是拉流模块

FFSrsRTMP 就是推流模块

FFBridge是负责和Jni交互的文件 在FFBridge中会管理FFDemux和FFSrsRTMP

Java部分没怎么变 和之前差不多多加了几个接口:如下

Android 使用FFmpeg拉取RTSP流 用RTMP推流到RTMP服务器_第2张图片

然后主要就是 FeedData这个函数 :

Android 使用FFmpeg拉取RTSP流 用RTMP推流到RTMP服务器_第3张图片

FFBridge中如下 :

 Android 使用FFmpeg拉取RTSP流 用RTMP推流到RTMP服务器_第4张图片

 SrsRTMP如下实现 就是把数据送到一个队列  Android 使用FFmpeg拉取RTSP流 用RTMP推流到RTMP服务器_第5张图片

 开启另一个RTMP 线程之后会不断的从这个队列中取数据 然后 发送到rtmp服务器

整体流程 很简单 就是有些细节的地方 需要注意

Java中  在收到RTSP解码出来的数据之后 直接调用FeedData送给后台了

Android 使用FFmpeg拉取RTSP流 用RTMP推流到RTMP服务器_第6张图片

完整代码点击可以点击这里下载

你可能感兴趣的:(FFMpeg,android,音视频)