File: shaka_drm_example.py

package info (click to toggle)
pychromecast 14.0.10-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 624 kB
  • sloc: python: 5,594; sh: 9; makefile: 2
file content (120 lines) | stat: -rw-r--r-- 3,767 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
"""
Example on how to use the Shaka Controller to play an URL.


"""

# pylint: disable=invalid-name

import argparse
import sys
from time import sleep

import pychromecast
from pychromecast import quick_play

from .common import add_log_arguments, configure_logging

# Enable deprecation warnings etc.
if not sys.warnoptions:
    import warnings

    warnings.simplefilter("default")


# Change to the friendly name of your Chromecast
CAST_NAME = "Living Room"

# Change to an audio or video url
# Sample DRM request from https://reference.dashif.org/dash.js/latest/samples/drm/clearkey.html
MEDIA_URL = "https://media.axprod.net/TestVectors/v7-MultiDRM-SingleKey/Manifest_1080p_ClearKey.mpd"

parser = argparse.ArgumentParser(
    description="Example on how to use the Shaka Controller to play an URL with DRM."
)
parser.add_argument(
    "--cast", help='Name of cast device (default: "%(default)s")', default=CAST_NAME
)
parser.add_argument(
    "--known-host",
    help="Add known host (IP), can be used multiple times",
    action="append",
)
add_log_arguments(parser)
parser.add_argument(
    "--url", help='Media url (default: "%(default)s")', default=MEDIA_URL
)
args = parser.parse_args()

configure_logging(args)

chromecasts, browser = pychromecast.get_listed_chromecasts(
    friendly_names=[args.cast], known_hosts=args.known_host
)
if not chromecasts:
    print(f'No chromecast with name "{args.cast}" discovered')
    sys.exit(1)

cast = list(chromecasts)[0]
# Start socket client's worker thread and wait for initial status update
cast.wait()
print(f'Found chromecast with name "{args.cast}", attempting to play "{args.url}"')

# Take customData from shaka player appData object sent in init message to chromecast
app_name = "shaka"
app_data = {
    "media_id": args.url,
    "media_type": "",
    "stream_type": "LIVE",
    "media_info": {
        "customData": {
            "asset": {
                "name": "Custom DRM Video",
                "shortName": "",
                "iconUri": "",
                "manifestUri": "https://media.axprod.net/TestVectors/v7-MultiDRM-SingleKey/Manifest_1080p_ClearKey.mpd",
                "source": "Custom",
                "focus": False,
                "disabled": False,
                "extraText": [],
                "extraThumbnail": [],
                "certificateUri": None,
                "description": None,
                "isFeatured": False,
                "drm": ["No DRM protection"],
                "features": ["VOD"],
                "licenseServers": {"__type__": "map"},
                "licenseRequestHeaders": {"__type__": "map"},
                "requestFilter": None,
                "responseFilter": None,
                "clearKeys": {"__type__": "map"},
                "extraConfig": {
                    "drm": {
                        "clearKeys": {
                            "nrQFDeRLSAKTLifXUIPiZg": "FmY0xnWCPCNaSpRG-tUuTQ"
                        }
                    }
                },
                "adTagUri": None,
                "imaVideoId": None,
                "imaAssetKey": None,
                "imaContentSrcId": None,
                "imaManifestType": None,
                "mediaTailorUrl": None,
                "mediaTailorAdsParams": None,
                "mimeType": None,
                "mediaPlaylistFullMimeType": None,
                "storedProgress": 1,
                "storedContent": None,
            }
        }
    },
}

quick_play.quick_play(cast, app_name, app_data)

# If debugging, sleep after running so we can see any error messages.
if args.show_debug:
    sleep(10)

browser.stop_discovery()