修改readme

This commit is contained in:
dexter
2022-03-16 00:07:42 +08:00
parent 9f6958ff5c
commit cda1808f48
4 changed files with 52 additions and 14 deletions

View File

@@ -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协议的推流

View File

@@ -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"

View File

@@ -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")
}

View File

@@ -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)
}