mirror of
https://github.com/chris124567/hulu
synced 2024-11-21 23:57:30 +00:00
Delete pssh.go
This commit is contained in:
parent
784aa9f95b
commit
8cd5be91ab
115
widevine/pssh.go
115
widevine/pssh.go
@ -1,115 +0,0 @@
|
||||
package widevine
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/base64"
|
||||
"encoding/xml"
|
||||
"errors"
|
||||
"io"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
// This function retrieves the PSSH/Init Data from a given MPD file reader.
|
||||
// Example file: https://bitmovin-a.akamaihd.net/content/art-of-motion_drm/mpds/11331.mpd
|
||||
func InitDataFromMPD(r io.Reader) ([]byte, error) {
|
||||
type mpd struct {
|
||||
XMLName xml.Name `xml:"MPD"`
|
||||
Text string `xml:",chardata"`
|
||||
ID string `xml:"id,attr"`
|
||||
Profiles string `xml:"profiles,attr"`
|
||||
Type string `xml:"type,attr"`
|
||||
AvailabilityStartTime string `xml:"availabilityStartTime,attr"`
|
||||
PublishTime string `xml:"publishTime,attr"`
|
||||
MediaPresentationDuration string `xml:"mediaPresentationDuration,attr"`
|
||||
MinBufferTime string `xml:"minBufferTime,attr"`
|
||||
Version string `xml:"version,attr"`
|
||||
Ns2 string `xml:"ns2,attr"`
|
||||
Xmlns string `xml:"xmlns,attr"`
|
||||
Bitmovin string `xml:"bitmovin,attr"`
|
||||
Period struct {
|
||||
Text string `xml:",chardata"`
|
||||
AdaptationSet []struct {
|
||||
Text string `xml:",chardata"`
|
||||
MimeType string `xml:"mimeType,attr"`
|
||||
Codecs string `xml:"codecs,attr"`
|
||||
Lang string `xml:"lang,attr"`
|
||||
Label string `xml:"label,attr"`
|
||||
SegmentTemplate struct {
|
||||
Text string `xml:",chardata"`
|
||||
Media string `xml:"media,attr"`
|
||||
Initialization string `xml:"initialization,attr"`
|
||||
Duration string `xml:"duration,attr"`
|
||||
StartNumber string `xml:"startNumber,attr"`
|
||||
Timescale string `xml:"timescale,attr"`
|
||||
} `xml:"SegmentTemplate"`
|
||||
ContentProtection []struct {
|
||||
Text string `xml:",chardata"`
|
||||
SchemeIdUri string `xml:"schemeIdUri,attr"`
|
||||
Value string `xml:"value,attr"`
|
||||
DefaultKID string `xml:"default_KID,attr"`
|
||||
Pssh string `xml:"pssh"`
|
||||
} `xml:"ContentProtection"`
|
||||
Representation []struct {
|
||||
Text string `xml:",chardata"`
|
||||
ID string `xml:"id,attr"`
|
||||
Bandwidth string `xml:"bandwidth,attr"`
|
||||
Width string `xml:"width,attr"`
|
||||
Height string `xml:"height,attr"`
|
||||
FrameRate string `xml:"frameRate,attr"`
|
||||
AudioSamplingRate string `xml:"audioSamplingRate,attr"`
|
||||
ContentProtection []struct {
|
||||
Text string `xml:",chardata"`
|
||||
SchemeIdUri string `xml:"schemeIdUri,attr"`
|
||||
Value string `xml:"value,attr"`
|
||||
DefaultKID string `xml:"default_KID,attr"`
|
||||
Cenc string `xml:"cenc,attr"`
|
||||
Pssh struct {
|
||||
Text string `xml:",chardata"`
|
||||
Cenc string `xml:"cenc,attr"`
|
||||
} `xml:"pssh"`
|
||||
} `xml:"ContentProtection"`
|
||||
} `xml:"Representation"`
|
||||
AudioChannelConfiguration struct {
|
||||
Text string `xml:",chardata"`
|
||||
SchemeIdUri string `xml:"schemeIdUri,attr"`
|
||||
Value string `xml:"value,attr"`
|
||||
} `xml:"AudioChannelConfiguration"`
|
||||
} `xml:"AdaptationSet"`
|
||||
} `xml:"Period"`
|
||||
}
|
||||
|
||||
var mpdPlaylist mpd
|
||||
if err := xml.NewDecoder(r).Decode(&mpdPlaylist); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
const widevineSchemeIdURI = "urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"
|
||||
for _, adaptionSet := range mpdPlaylist.Period.AdaptationSet {
|
||||
for _, protection := range adaptionSet.ContentProtection {
|
||||
if protection.SchemeIdUri == widevineSchemeIdURI && len(protection.Pssh) > 0 {
|
||||
return base64.StdEncoding.DecodeString(protection.Pssh)
|
||||
}
|
||||
}
|
||||
}
|
||||
for _, adaptionSet := range mpdPlaylist.Period.AdaptationSet {
|
||||
for _, representation := range adaptionSet.Representation {
|
||||
for _, protection := range representation.ContentProtection {
|
||||
if protection.SchemeIdUri == widevineSchemeIdURI && len(protection.Pssh.Text) > 0 {
|
||||
return base64.StdEncoding.DecodeString(protection.Pssh.Text)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return nil, errors.New("no init data found")
|
||||
}
|
||||
|
||||
// This function retrieves certificate data from a given license server.
|
||||
func GetCertData(client *http.Client, licenseURL string) ([]byte, error) {
|
||||
response, err := client.Post(licenseURL, "application/x-www-form-urlencoded", bytes.NewReader([]byte{0x08, 0x04}))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer response.Body.Close()
|
||||
return io.ReadAll(response.Body)
|
||||
}
|
Loading…
Reference in New Issue
Block a user