Date

I have some files lying around in my computer with movies I want to watch. The process typically involves copying the file over to a pendrive, plug that into the TV and use the TV media player. This works very well, but I am lazy. It also happens that I have a Chromecast on my dumb TV. It would be very convenient for me to figure out a way of sending directly files from my computer to the Chromecast. It turns out it's not difficult at all.

1. Install PyChromecast

PyChromecast is a wonderful Python library (3.4+) that allows you to send videos to your Chromecast at home. It handles everything, from device detection, to buffering, to play / pause / several controls.

I have an old-ish Ubuntu 14.04, but this did the trick:

# I like to keep stuff tidy
virtualenv -p /usr/bin/python3 ~/virtualenv/pychromecast
source ~/virtualenv/pychromecast/bin/activate
pip3 install pychromecast

2. Start a local HTTP server

Just go to the folder where you have the videos and start a SimpleHTTPServer Python module.

python -m SimpleHTTPServer

Leave that running on the background. We're almost there.

3. Send the video to your Chromecast

This might be different for you, as I only have one Chromecast at home, so my device will always be the first from the list of detected devices, but this is my test script:

import pychromecast
if __name__ == "__main__":
    cast = pychromecast.get_chromecasts()[0]
    mc = cast.media_controller
    mc.play_media("http://192.168.0.103:8000/video_test.mp4", content_type = "video/mp4")
    mc.block_until_active()
    mc.play()

At first I was trying to send the file directly, but that didn't work. The example provided in the documentation took the file from a web server, so I thought that perhaps Chromecast can't receive a file but can receive an URL with the contents of the video. That 192.168.0.103 up there is the internal IP of my computer.

And we're good to go. Please note that this script will return as soon as the movie is playing, so you won't have access to that mc object anymore. If would be better to run it inside a Python terminal, so you can always go back and pause or stop the stream if needed.