Fix short write in metadata injector.
parent
69147a81b3
commit
78f280e743
|
@ -39,22 +39,23 @@ func (mi *MetadataInjector) writeMetadata() (n int, err error) {
|
||||||
|
|
||||||
func (mi *MetadataInjector) Write(data []byte) (n int, err error) {
|
func (mi *MetadataInjector) Write(data []byte) (n int, err error) {
|
||||||
for n < len(data) {
|
for n < len(data) {
|
||||||
|
restLen := len(data) - n
|
||||||
toWrite := mi.MetadataInterval - mi.offset
|
toWrite := mi.MetadataInterval - mi.offset
|
||||||
|
if toWrite > restLen {
|
||||||
|
toWrite = restLen
|
||||||
|
}
|
||||||
|
|
||||||
if toWrite <= 0 {
|
if toWrite <= 0 {
|
||||||
_, cerr := mi.writeMetadata()
|
_, err = mi.writeMetadata()
|
||||||
//n += cn
|
if err != nil {
|
||||||
if cerr != nil {
|
|
||||||
err = cerr
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
mi.offset = 0
|
mi.offset = 0
|
||||||
// toWrite = mi.MetadataInterval
|
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
outBytes := make([]byte, toWrite)
|
outBytes := make([]byte, toWrite)
|
||||||
copy(outBytes, data[mi.offset:mi.offset+toWrite])
|
copy(outBytes, data[n:n+toWrite])
|
||||||
cn, cerr := mi.Writer.Write(outBytes)
|
cn, cerr := mi.Writer.Write(outBytes)
|
||||||
n += cn
|
n += cn
|
||||||
mi.offset += cn
|
mi.offset += cn
|
||||||
|
|
|
@ -73,11 +73,23 @@ func (instance *pluginInstance) Init() {
|
||||||
if sendMetadata {
|
if sendMetadata {
|
||||||
mw = streams.NewMetadataInjector(w, metaInt)
|
mw = streams.NewMetadataInjector(w, metaInt)
|
||||||
nw = mw
|
nw = mw
|
||||||
|
|
||||||
|
metadataChan := channel.Metadata()
|
||||||
|
defer close(metadataChan)
|
||||||
|
go func() {
|
||||||
|
for metadata := range metadataChan {
|
||||||
|
metadataToWrite := streams.Metadata{}
|
||||||
|
if value, ok := metadata["StreamTitle"]; ok {
|
||||||
|
metadataToWrite["StreamTitle"] = value
|
||||||
|
}
|
||||||
|
mw.SetMetadata(metadataToWrite)
|
||||||
|
}
|
||||||
|
}()
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err := io.Copy(nw, sr)
|
_, err := io.Copy(nw, sr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
log.Println("copying stream to output failed:", err)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue