Audio+video handling, break data loop on command message since it should only ever be an unpublish if working correctly, or exit anyway for non-proper protocol
This commit is contained in:
parent
5a21ef83d2
commit
f165efcdc2
2 changed files with 34 additions and 4 deletions
|
@ -1,7 +1,6 @@
|
||||||
package rtmp
|
package rtmp
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
|
||||||
"stream_server/rtmp/flv"
|
"stream_server/rtmp/flv"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -15,12 +14,19 @@ func HandleDataLoop(chnk_wrp_ptr *ChunkWrapper) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
for {
|
for {
|
||||||
p, err := chnk_wrp_ptr.ReadChunk()
|
msg_ptr, err := chnk_wrp_ptr.ReadChunk()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
|
} else if msg_ptr == nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
switch msg_ptr.msg_type {
|
||||||
|
case 20:
|
||||||
|
return
|
||||||
|
case 8, 9:
|
||||||
|
if err = file_writer.WriteMediaTag(&(msg_ptr.data), msg_ptr.timestamp, msg_ptr.msg_type); err != nil {
|
||||||
|
return
|
||||||
}
|
}
|
||||||
if p != nil {
|
|
||||||
fmt.Println(p.msg_type, p.msg_len)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,6 +49,30 @@ func (writer *FLVWriter) WriteMetadataTag(data *[]byte) (err error) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (writer *FLVWriter) WriteMediaTag(data *[]byte, timestamp uint32, media_type uint8) (err error) {
|
||||||
|
uint24_buf := make([]byte, 4)
|
||||||
|
tag_header := make([]byte, 11)
|
||||||
|
tag_header[0] = media_type
|
||||||
|
data_len := uint32(len(*data))
|
||||||
|
binary.BigEndian.PutUint32(uint24_buf, data_len)
|
||||||
|
copy(tag_header[1:4], uint24_buf[1:])
|
||||||
|
|
||||||
|
binary.BigEndian.PutUint32(uint24_buf, timestamp)
|
||||||
|
copy(tag_header[4:7], uint24_buf[1:])
|
||||||
|
tag_header[7] = uint24_buf[0]
|
||||||
|
|
||||||
|
if _, err = writer.w.Write(tag_header); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if _, err = writer.w.Write(*data); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
tag_len_buf := make([]byte, 4)
|
||||||
|
binary.BigEndian.PutUint32(tag_len_buf, data_len + 11)
|
||||||
|
_, err = writer.w.Write(tag_len_buf)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
func (writer *FLVWriter) write_flv_header() (err error) {
|
func (writer *FLVWriter) write_flv_header() (err error) {
|
||||||
header := make([]byte, 13)
|
header := make([]byte, 13)
|
||||||
|
|
Loading…
Reference in a new issue