# tms-koa-ffmpeg

> tms-koa插件，通过rest接口控制ffmpeg，实现媒体播放。

Latest version **0.0.13** (published 2020-08-04) · MIT license · 0 weekly downloads

## Install

```sh
npm install tms-koa-ffmpeg
pnpm add tms-koa-ffmpeg
yarn add tms-koa-ffmpeg
bun add tms-koa-ffmpeg
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.0.13 |
| Published | 2020-08-04 |
| First published | 2020-04-17 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 4 |
| Unpacked size | 22.3 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 0 |
| Author | jasony62 |
| Maintainers | jasony62 |

## Links

- npm: https://www.npmjs.com/package/tms-koa-ffmpeg
- Repository: https://github.com/jasony62/tms-koa-ffmpeg
- Homepage: https://github.com/jasony62/tms-koa-ffmpeg#readme
- Issues: https://github.com/jasony62/tms-koa-ffmpeg/issues
- npm.io page: https://npm.io/package/tms-koa-ffmpeg

## Dependencies (4)

- [tmp](https://npm.io/package/tmp.md) ^0.2.1
- [nanoid](https://npm.io/package/nanoid.md) ^3.1.5
- [fluent-ffmpeg](https://npm.io/package/fluent-ffmpeg.md) ^2.1.2
- [@log4js-node/log4js-api](https://npm.io/package/@log4js-node/log4js-api.md) ^1.0.2

## Recent versions

- 0.0.13 (latest) — 2020-08-04
- 0.0.12 — 2020-08-04
- 0.0.11 — 2020-07-30
- 0.0.10 — 2020-05-20
- 0.0.9 — 2020-05-18
- 0.0.8 — 2020-05-18
- 0.0.7 — 2020-05-08
- 0.0.6 — 2020-04-26
- 0.0.5 — 2020-04-25
- 0.0.4 — 2020-04-25
- 0.0.3 — 2020-04-24
- 0.0.2 — 2020-04-21
- 0.0.1 — 2020-04-17

## README

# 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

---

检查是否正常运行

> curl "http://localhost:3000/ffmpeg/test"

## 准备媒体文件

在`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="

> curl "http://localhost:3003/ffmpeg/rtp/file/stop?cid="

> curl "http://localhost:3003/ffmpeg/rtp/image/stop?cid="

| 参数 | 说明    |
| ---- | ------- |
| cid  | 命令 Id |

## 暂停播放

> curl "http://localhost:3003/ffmpeg/rtp/test/pause?cid="

> curl "http://localhost:3003/ffmpeg/rtp/file/pause?cid="

| 参数 | 说明    |
| ---- | ------- |
| cid  | 命令 Id |

## 恢复播放

> curl "http://localhost:3003/ffmpeg/rtp/test/resume?cid="

> curl "http://localhost:3003/ffmpeg/rtp/file/resume?cid="

| 参数 | 说明    |
| ---- | ------- |
| 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"
```

---
_Source: https://npm.io/package/tms-koa-ffmpeg · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
