mirror of
https://github.com/Monibuca/plugin-rtmp.git
synced 2025-11-03 09:41:00 +08:00
修改readme
This commit is contained in:
32
README.md
32
README.md
@@ -1,6 +1,6 @@
|
||||
# RTMP插件
|
||||
|
||||
## 插件地址
|
||||
## 插件源码地址
|
||||
|
||||
github.com/Monibuca/plugin-rtmp
|
||||
|
||||
@@ -14,16 +14,34 @@ import (
|
||||
## 默认插件配置
|
||||
|
||||
```yaml
|
||||
rtmp
|
||||
rtmp:
|
||||
tcp:
|
||||
# rtmp 监听端口
|
||||
listenaddr: :1935
|
||||
# rtmp 监听端口
|
||||
listennum: 0
|
||||
chunksize: 512
|
||||
# 输出分块大小
|
||||
chunksize: 4096
|
||||
publish:
|
||||
pubaudio: true
|
||||
pubvideo: true
|
||||
kickexist: false
|
||||
publishtimeout: 10
|
||||
waitclosetimeout: 0
|
||||
subscribe:
|
||||
subaudio: true
|
||||
subvideo: true
|
||||
iframeonly: false
|
||||
waittimeout: 10
|
||||
pull:
|
||||
repull: 0
|
||||
pullonstart: false
|
||||
pullonsubscribe: false
|
||||
pulllist: {}
|
||||
push:
|
||||
repush: 0
|
||||
pushlist: {}
|
||||
```
|
||||
|
||||
- listenaddr是监听的地址
|
||||
- chunksize是输出分块大小
|
||||
|
||||
## 插件功能
|
||||
|
||||
### 接收RTMP协议的推流
|
||||
|
||||
7
event.go
7
event.go
@@ -19,9 +19,10 @@ const (
|
||||
NetStream_Play_StreamNotFound = "NetStream.Play.StreamNotFound" // "error" 无法找到传递给 play()方法的 FLV
|
||||
NetStream_Play_Stop = "NetStream.Play.Stop" // "status" 播放已结束
|
||||
NetStream_Play_Failed = "NetStream.Play.Failed" // "error" 出于此表中列出的原因之外的某一原因(例如订阅者没有读取权限),播放发生了错误
|
||||
|
||||
NetStream_Play_Switch = "NetStream.Play.Switch"
|
||||
NetStream_Play_Complete = "NetStream.Play.Complete"
|
||||
NetStream_Play_PublishNotify = "NetStream.Play.PublishNotify" // "status" 发布者已经发布了流
|
||||
NetStream_Play_UnpublishNotify = "NetStream.Play.UnpublishNotify" // "status" 发布者已经取消发布了流
|
||||
NetStream_Play_Switch = "NetStream.Play.Switch"
|
||||
NetStream_Play_Complete = "NetStream.Play.Complete"
|
||||
|
||||
NetStream_Data_Start = "NetStream.Data.Start"
|
||||
|
||||
|
||||
@@ -121,9 +121,8 @@ func (nc *NetConnection) complex_handshake(C1 []byte) error {
|
||||
return err
|
||||
}
|
||||
|
||||
fmt.Printf("digested handshake, scheme : %v\nchallenge : %v\ndigest : %v\nok : %v\nerr : %v\n", scheme, challenge, digest, ok, err)
|
||||
|
||||
if !ok {
|
||||
fmt.Printf("digested handshake, scheme : %v\nchallenge : %v\ndigest : %v\nok : %v\nerr : %v\n", scheme, challenge, digest, ok, err)
|
||||
return errors.New("validateClient failed")
|
||||
}
|
||||
|
||||
|
||||
24
media.go
24
media.go
@@ -88,6 +88,17 @@ type RTMPReceiver struct {
|
||||
absTs map[uint32]uint32
|
||||
}
|
||||
|
||||
func (r *RTMPReceiver) OnEvent(event any) {
|
||||
switch event.(type) {
|
||||
case SEwaitPublish:
|
||||
r.Response(1, NetStream_Play_UnpublishNotify, Response_OnStatus)
|
||||
case SEpublish:
|
||||
r.Response(1, NetStream_Play_PublishNotify, Response_OnStatus)
|
||||
default:
|
||||
r.Publisher.OnEvent(event)
|
||||
}
|
||||
}
|
||||
|
||||
func (r *RTMPReceiver) Response(tid uint64, code, level string) error {
|
||||
m := new(ResponsePublishMessage)
|
||||
m.CommandName = Response_OnStatus
|
||||
@@ -104,7 +115,11 @@ func (r *RTMPReceiver) Response(tid uint64, code, level string) error {
|
||||
func (r *RTMPReceiver) ReceiveAudio(msg *Chunk) {
|
||||
// plugin.Tracef("rec_audio chunkType:%d chunkStreamID:%d ts:%d", msg.ChunkType, msg.ChunkStreamID, msg.Timestamp)
|
||||
if msg.ChunkType == 0 {
|
||||
r.absTs[msg.ChunkStreamID] = 0
|
||||
if r.AudioTrack.GetName() == "" {
|
||||
r.absTs[msg.ChunkStreamID] = 0
|
||||
} else {
|
||||
r.absTs[msg.ChunkStreamID] = r.AudioTrack.PreFrame().AbsTime
|
||||
}
|
||||
}
|
||||
if msg.Timestamp == 0xffffff {
|
||||
r.absTs[msg.ChunkStreamID] += msg.ExtendTimestamp
|
||||
@@ -116,12 +131,17 @@ func (r *RTMPReceiver) ReceiveAudio(msg *Chunk) {
|
||||
func (r *RTMPReceiver) ReceiveVideo(msg *Chunk) {
|
||||
// plugin.Tracef("rev_video chunkType:%d chunkStreamID:%d ts:%d", msg.ChunkType, msg.ChunkStreamID, msg.Timestamp)
|
||||
if msg.ChunkType == 0 {
|
||||
r.absTs[msg.ChunkStreamID] = 0
|
||||
if r.VideoTrack.GetName() == "" {
|
||||
r.absTs[msg.ChunkStreamID] = 0
|
||||
} else {
|
||||
r.absTs[msg.ChunkStreamID] = r.VideoTrack.PreFrame().AbsTime
|
||||
}
|
||||
}
|
||||
if msg.Timestamp == 0xffffff {
|
||||
r.absTs[msg.ChunkStreamID] += msg.ExtendTimestamp
|
||||
} else {
|
||||
r.absTs[msg.ChunkStreamID] += msg.Timestamp
|
||||
}
|
||||
|
||||
r.VideoTrack.WriteAVCC(r.absTs[msg.ChunkStreamID], msg.Body)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user