之前写了 如何在Android中使用ffmpeg 以及如何使用ffmpeg拉取RTSP流
业务场景大概是这样 拉取RTSP流之后 解码 送给AI分析 分析完之后 在进行绘制结果 然后编码 编码完之后 进行RTMP推流 。AI 解码 是别的同时负责的 我只需要把编码结果 使用RTMP推送出去即可
FFmpeg本身是支持RTMP直接推流的 但是由于之前的项目一直都是使用lib_srsrtmp那个库的 比较成熟 ,所以就还是使用这个库
先看下目录结构:
srs_librtmp.h 和srs_librtmp.cpp 是别的项目直接拿过来的
safequeue是一个安全等待队列
FFDemux是拉流模块
FFSrsRTMP 就是推流模块
FFBridge是负责和Jni交互的文件 在FFBridge中会管理FFDemux和FFSrsRTMP
Java部分没怎么变 和之前差不多多加了几个接口:如下
然后主要就是 FeedData这个函数 :
FFBridge中如下 :
开启另一个RTMP 线程之后会不断的从这个队列中取数据 然后 发送到rtmp服务器
整体流程 很简单 就是有些细节的地方 需要注意
Java中 在收到RTSP解码出来的数据之后 直接调用FeedData送给后台了