Skip to content

Commit

Permalink
server/ot_rpc: send perceptual hash from T to O
Browse files Browse the repository at this point in the history
  • Loading branch information
jailuthra committed Sep 28, 2021
1 parent 56d1304 commit 6f752e4
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 7 deletions.
4 changes: 4 additions & 0 deletions core/orchestrator.go
Original file line number Diff line number Diff line change
Expand Up @@ -582,6 +582,10 @@ func (n *LivepeerNode) transcodeSeg(config transcodeConfig, seg *stream.HLSSegme
string(md.ManifestID), md.AuthToken.SessionId, seg.SeqNo, len(tSegments[i].Data))
return terr(fmt.Errorf("ZeroSegments"))
}
if md.CalcPerceptualHash && tSegments[i].PHash == nil {
glog.Errorf("Could not find perceptual hash for manifestID=%s sesionID=%s seqNo=%d profile=%v",
string(md.ManifestID), md.AuthToken.SessionId, seg.SeqNo, md.Profiles[i].Name)
}
glog.V(common.DEBUG).Infof("Transcoded segment manifestID=%s sessionID=%s seqNo=%d profile=%s len=%d",
string(md.ManifestID), md.AuthToken.SessionId, seg.SeqNo, md.Profiles[i].Name, len(tSegments[i].Data))
hash := crypto.Keccak256(tSegments[i].Data)
Expand Down
33 changes: 26 additions & 7 deletions server/ot_rpc.go
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,19 @@ func runTranscode(n *core.LivepeerNode, orchAddr string, httpc *http.Client, not
glog.Error("Could not create multipart part ", err)
}
io.Copy(fw, bytes.NewBuffer(v.Data))
// Add perceptual hash data as a part if generated
if md.CalcPerceptualHash {
w.SetBoundary(boundary)
hdrs := textproto.MIMEHeader{
"Content-Type": {"application/octet-stream"},
"Content-Length": {strconv.Itoa(len(v.PHash))},
}
fw, err := w.CreatePart(hdrs)
if err != nil {
glog.Error("Could not create multipart part ", err)
}
io.Copy(fw, bytes.NewBuffer(v.PHash))
}
}
w.Close()
contentType = "multipart/mixed; boundary=" + boundary
Expand Down Expand Up @@ -304,14 +317,20 @@ func (h *lphttp) TranscodeResults(w http.ResponseWriter, r *http.Request) {
break
}

encodedPixels, err := strconv.ParseInt(p.Header.Get("Pixels"), 10, 64)
if err != nil {
glog.Error("Error getting pixels in header:", err)
res.Err = err
break
if len(p.Header.Values("Pixels")) > 0 {
encodedPixels, err := strconv.ParseInt(p.Header.Get("Pixels"), 10, 64)
if err != nil {
glog.Error("Error getting pixels in header:", err)
res.Err = err
break
}
segments = append(segments, &core.TranscodedSegmentData{Data: body, Pixels: encodedPixels})
} else if p.Header.Get("Content-Type") == "application/octet-stream" {
// Perceptual hash data for last segment
seg := *segments[len(segments)-1]
seg.PHash = body
segments[len(segments)-1] = &seg
}

segments = append(segments, &core.TranscodedSegmentData{Data: body, Pixels: encodedPixels})
}
res.TranscodeData = &core.TranscodeData{
Segments: segments,
Expand Down

0 comments on commit 6f752e4

Please sign in to comment.