# RTMP specification

**URL:** https://discourse.gstreamer.org/t/rtmp-specification/3658
**Category:** General Discussion
**Created:** [November 28, 2024, 8:52pm UTC](https://discourse.gstreamer.org/t/rtmp-specification/3658 "2024-11-28T20:52:06Z")
**Posts on this page:** 5
**Page:** 1

<div class="post-metadata">

### Author: ![ljw](https://discourse.gstreamer.org/user_avatar/discourse.gstreamer.org/ljw/32/467_2.png) [@ljw](https://discourse.gstreamer.org/u/ljw)
#### Post date: [November 28, 2024, 8:52pm UTC](https://discourse.gstreamer.org/t/rtmp-specification/3658/1 "2024-11-28T20:52:06Z")

</div>

Does anyone know how or where to find a specification of the RTMP protocol?

I’m attempting to implement an RTMP server. I’m mostly interested in having clients able to connect and publish streams.

Currently using this document: [Adobe RTMP Specification · RTMP](https://rtmp.veriskope.com/docs/spec/) for the RTMP spec, but it seems incomplete?

I’m using a Gstreamer pipeline like this this as my test client:

```sh
gst-launch-1.0 videotestsrc is-live=true \
  ! x264enc ! h264parse \
  ! flvmux ! rtmpsink location='rtmp://localhost:1935/live/test.stream'

```

Testing with both `rtmpsink` and `rtmp2sink`. `rtmpsink` sends commands that are not mentioned in the linked spec (e.g. `releaseStream` and `FCPublish`) and `rtmp2sink` seems to expect items in the `_result` response to the initial `connect` command that are not detailed in the linked spec (they’re referred to but not really detailed).

Anyone know where to find all the details written down? (Google is failing me…) Or is it a case of reverse engineering it from open-source code and wireshark?

---

<div class="post-metadata">

### Author: ![ndufresne](https://discourse.gstreamer.org/user_avatar/discourse.gstreamer.org/ndufresne/32/10_2.png) [@ndufresne](https://discourse.gstreamer.org/u/ndufresne)
#### Post date: [November 29, 2024, 8:22pm UTC](https://discourse.gstreamer.org/t/rtmp-specification/3658/2 "2024-11-29T20:22:04Z")

</div>

This web site since to host a valid version, derived from the original PDF which links on Adobe’s site seems dead.

[https://rtmp.veriskope.com/docs/spec/](https://rtmp.veriskope.com/docs/spec/)

---

<div class="post-metadata">

### Author: ![ljw](https://discourse.gstreamer.org/user_avatar/discourse.gstreamer.org/ljw/32/467_2.png) [@ljw](https://discourse.gstreamer.org/u/ljw)
#### Post date: [November 29, 2024, 8:29pm UTC](https://discourse.gstreamer.org/t/rtmp-specification/3658/3 "2024-11-29T20:29:18Z")

</div>

Thanks, yeah the issue I’m struggling with is that it doesn’t seem entirely complete, e.g. required properties and information needed in the the `_result` response to the first `connect` message is not given. I’m coming to the conclusion that studying other implementations is going to be the way to go 🤷

---

<div class="post-metadata">

### Author: ![ndufresne](https://discourse.gstreamer.org/user_avatar/discourse.gstreamer.org/ndufresne/32/10_2.png) [@ndufresne](https://discourse.gstreamer.org/u/ndufresne)
#### Post date: [November 29, 2024, 11:49pm UTC](https://discourse.gstreamer.org/t/rtmp-specification/3658/4 "2024-11-29T23:49:06Z")

</div>

That’s because this is an implementation, RTMP is an IPC protocol, so what you do with it is media server specific.

---

<div class="post-metadata">

### Author: ![ljw](https://discourse.gstreamer.org/user_avatar/discourse.gstreamer.org/ljw/32/467_2.png) [@ljw](https://discourse.gstreamer.org/u/ljw)
#### Post date: [November 30, 2024, 8:20am UTC](https://discourse.gstreamer.org/t/rtmp-specification/3658/5 "2024-11-30T08:20:07Z")

</div>

Ah ok, I see thanks, so RTMP is deliberately generic, you are free to send what you like as long as the client and server agree.

I guess what I’m looking for now is the spec for that higher-level implementation that `rtmpsink` and `rtmp2sink` (and all interoperable media servers) are using? Searching for ActionScript and Flash Media Server documentation has some helpful info, but maybe the full details were always proprietary and not written down in any Adobe documentation…
