Fix short write in metadata injector.

master
Icedream 2018-07-02 08:09:47 +02:00
parent 69147a81b3
commit 78f280e743
Signed by: icedream
GPG Key ID: 1573F6D8EFE4D0CF
2 changed files with 20 additions and 7 deletions

View File

@ -39,22 +39,23 @@ func (mi *MetadataInjector) writeMetadata() (n int, err error) {
func (mi *MetadataInjector) Write(data []byte) (n int, err error) {
for n < len(data) {
restLen := len(data) - n
toWrite := mi.MetadataInterval - mi.offset
if toWrite > restLen {
toWrite = restLen
}
if toWrite <= 0 {
_, cerr := mi.writeMetadata()
//n += cn
if cerr != nil {
err = cerr
_, err = mi.writeMetadata()
if err != nil {
return
}
mi.offset = 0
// toWrite = mi.MetadataInterval
continue
}
outBytes := make([]byte, toWrite)
copy(outBytes, data[mi.offset:mi.offset+toWrite])
copy(outBytes, data[n:n+toWrite])
cn, cerr := mi.Writer.Write(outBytes)
n += cn
mi.offset += cn

View File

@ -73,11 +73,23 @@ func (instance *pluginInstance) Init() {
if sendMetadata {
mw = streams.NewMetadataInjector(w, metaInt)
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)
if err != nil {
log.Println(err)
log.Println("copying stream to output failed:", err)
}
})