From 1205de2859439f1d51f361db4895e3acd9a8a92d Mon Sep 17 00:00:00 2001 From: palaviv Date: Sat, 29 Oct 2016 18:50:10 +0300 Subject: [PATCH] Support subtitles --- README.md | 2 ++ caster.py | 23 ++++++++++++++++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 7bbbeaf..d8fb318 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,8 @@ How to use caster /file/to/play.mp4 caster /file/to/play.mp4 --device ChromcastName + +caster /file/to/play.mp4 --subtitles /path/to/subtitles.vtt ``` ### Player control diff --git a/caster.py b/caster.py index 42d0590..bcbfdf9 100755 --- a/caster.py +++ b/caster.py @@ -47,6 +47,10 @@ def do_GET(self): self.wfile.write(b("\r\n\r\n")) +class SubRequestHandler(RequestHandler): + content_type = "text/vtt" + + def handle_input(server_thread, dev, mc): while server_thread.is_alive(): key = readchar.readkey() @@ -70,6 +74,7 @@ def get_args(): parser.add_argument('--device', help='The chromecast device to use.' ' When not given first one found is used.', default=None) + parser.add_argument('--subtitles', help='subtitles', default=None) return parser.parse_args() @@ -80,6 +85,8 @@ def main(): device_name = args.device + subs = args.subtitles + if device_name: dev = pychromecast.get_chromecasts_as_dict()[device_name] else: @@ -93,15 +100,29 @@ def main(): server_thread = threading.Thread(target=server.handle_request) server_thread.start() + if subs: + sub_server = HTTPServer((server_ip, 0), SubRequestHandler) + sub_server_thread = threading.Thread(target=sub_server.handle_request) + sub_server_thread.start() + subtitles_url = "http://{IP}:{PORT}/{URI}".format(IP=server_ip, PORT=sub_server.server_port, URI=subs) + else: + subtitles_url = None + mc = dev.media_controller media_url = "http://{IP}:{PORT}/{URI}".format(IP=server_ip, PORT=server.server_port, URI=file_path) - mc.play_media(media_url, 'video/mp4', title=os.path.basename(file_path)) + mc.play_media(media_url, 'video/mp4', title=os.path.basename(file_path), subtitles=subtitles_url) + mc.update_status(blocking=True) + mc.enable_subtitle(1) handle_input(server_thread, dev, mc) server_thread.join() server.server_close() + if subs: + sub_server_thread.join() + sub_server.close() + if __name__ == "__main__": main() \ No newline at end of file