tms-koa-ffmpeg v0.0.13
tms-ffmpeg-rest
tms-koa
插件,通过接口操作ffmpeg
,增强文件服务,实现播放媒体文件。
支持将媒体文件转为RTP
流播放。
安装
在使用tms-koa
框架的项目中安装。参见tms-koa
框架中“用 npm 包作为控制器”的相关内容。
cnpm i tms-koa-ffmpeg
运行 demo
cd demo
安装并启动
若要在本地运行,需安装 ffmpeg。
cnmp i
node demo/server
或在 docker 中运行。
docker-compose up
检查是否正常运行
准备媒体文件
在files/upload
目录下放一个mp4
格式文件,例如:123.mp4。
启动 RTP 接收端
可以使用vlc
播放器作为 RTP 接收端。
参照如下格式新建 sdp 文件(或使用 demo/test.sdp),音频端口为 5002,视频端口为 5004,用vlc
打开。
v=0
o=- 0 0 IN IP4 127.0.0.1
s=No Name
t=0 0
a=tool:libavformat 58.26.101
m=audio 5002 RTP/AVP 97
c=IN IP4 127.0.0.1
b=AS:64
a=rtpmap:97 opus/48000/2
m=video 5004 RTP/AVP 96
c=IN IP4 127.0.0.1
b=AS:200
a=rtpmap:96 H264/90000
播放文件
curl "http://localhost:3000/ffmpeg/rtp/file/play?path=123.mp4&address=127.0.0.1&aport=5002&vport=5004"
API 说明
用 RTP 包将指定媒体发送到指定接收位置。
播放测试流
curl "http://localhost:3000/ffmpeg/rtp/test/play?address=127.0.0.1&vport=5002&aport=5004&duration=10"
参数 | 说明 |
---|---|
address | 接收 rtp 包的地址 |
vport | 接收视频包的端口 |
vcodec | H264 或 VP8 |
aport | 接收音频包的端口 |
duration | 播放持续时长(秒)。默认一直播放。 |
socketid | 传送接收推送消息的socket.io 实例 id |
返回命令 id
{"cid":"13592d22-9102-403b-84e6-d425431ad82c"}
音频和视频端口至少指定一个。
播放文件
curl "http://localhost:3000/ffmpeg/rtp/file/play?path=&address=&vport=&aport="
参数 | 说明 | 必填 |
---|---|---|
socketid | 传送接收推送消息的socket.io 实例 id | 是 |
path | 指定媒体文件路径(参考 tms-koa 文件管理服务) | 是 |
address | 接收 rtp 包的地址 | 是 |
vport | 接收视频包的端口 | 否 |
vcodec | H264 或 VP8 | 否 |
aport | 接收音频包的端口 | 否 |
seek | 从指定位置开始播放 | 否 |
vport
和aport
至少要指定一个。
返回命令 id
{"cid":"13592d22-9102-403b-84e6-d425431ad82c","format":"通过ffprobe获得的文件信息"}
播放图片
curl "http://localhost:3000/ffmpeg/rtp/image/play?path=&address=&vport="
参数 | 说明 |
---|---|
path | 指定图片文件路径(参考 tms-koa 文件管理服务) |
address | 接收 rtp 包的地址 |
vport | 接收视频包的端口 |
vcodec | H264 或 VP8 |
socketid | 传送接收推送消息的socket.io 实例 id |
返回命令 id
{"cid":"13592d22-9102-403b-84e6-d425431ad82c"}
停止播放
curl "http://localhost:3003/ffmpeg/rtp/image/shift?path=&cid="
参数 | 说明 |
---|---|
path | 指定图片文件路径(参考 tms-koa 文件管理服务) |
cid | 命令 Id |
停止播放
curl "http://localhost:3003/ffmpeg/rtp/test/stop?cid="
参数 | 说明 |
---|---|
cid | 命令 Id |
暂停播放
参数 | 说明 |
---|---|
cid | 命令 Id |
恢复播放
参数 | 说明 |
---|---|
cid | 命令 Id |
事件推送
如果tms-koa
框架启动了推送服务,tms-koa-ffmpeg
会推送媒体流处理事件。
事件 | 说明 |
---|---|
start | 启动ffmpeg 命令 |
end | 结束ffmpeg 命令 |
参见:public/index.html
RTP 流保存为文件
描述 | 定义 |
---|---|
接口名 | /file/rtp/receive |
请求方式 | GET |
GET 参数
参数名称 | 类型 | 必选 | 描述 |
---|---|---|---|
path | String | 否 | 文件保存路径。不指定ext 参数时有效。 |
ext | String | 否 | 自动生成文件的扩展名。文件命名规则参见tms-koa 。 |
sdpfile | String | 否 | 指定获得 sdp 文件的位置。 |
aport | Integer | 否 | 系统生成 sdp 文件中音频流端口。不指定sdpfile 参数时生效。 |
apt | Integer | 否 | 系统生成 sdp 文件中音频流 playload_type。不指定sdpfile 参数时生效。 |
artpmap | String | 否 | 系统生成 sdp 文件中音频流 rtpmap。不指定sdpfile 参数时生效。 |
vport | String | 否 | 系统生成 sdp 文件中视频流端口。不指定sdpfile 参数时生效。 |
vpt | String | 否 | 系统生成 sdp 文件中视频流 playload_type。不指定sdpfile 参数时生效。 |
vrtpmap | String | 否 | 系统生成 sdp 文件中视频流 rtpmap。不指定sdpfile 参数时生效。 |
输出参数
参数名称 | 类型 | 描述 |
---|---|---|
cid | ffmpeg 命令 id。 |
示例
curl "http://localhost:3000/ffmpeg/file/rtp/receive?ext=mp4&aport=20000&apt=97&artpmap=opus/48000/2&vport=20002&vpt=96&vrtpmap=H264/90000"