Dash video player to play local videos

Hi,

I am making an app and I need to play locally stored .mp4 videos in the app. Is this possible with dash ? Is there any recipe or example to do this.

Thanks

1 Like

You could use technic based on openCV provided here by replacing using cv2.VideoCapture with your video filename as arguement

Try this. You can put the video in your ./static/ directory (or where-ever, just specify the correct path).

import os
import dash
import dash_html_components as html

from flask import Flask, Response

server = Flask(__name__)
app = dash.Dash(__name__, server=server)


app.layout = html.Video(src='/static/my-video.mov',controls=True)  # or .mp4, or .avi ..etc


@server.route('/static/<path:path>')
def serve_static(path):
    root_dir = os.getcwd()
    return flask.send_from_directory(os.path.join(root_dir, 'static'), path)

I am trying your method and all I get is a blank video box any idea why that might be the case?

It could be a number of things. This can happen if you create the video using an incompatible codec. I believe I had a similar problem when trying to play a video produced with the internal maplotlib video producing function. I did have better success when I used FFMPEG.

For me, I had problems with the page refreshing the video. It seems that if the video name is the same, the page will not reload it. You need to have a different name each time (usually putting the time/date in the name is simple enough).

This project was some time ago for me. My finished app is in my github repo. Perhaps you could check here.: Video Object Removal, app.py

The video encoding I used is in the function writeFramesToVideo(), in the file imutil.py…specifically the FFMPEG option:
Video object removal, imutils.py

I got it in the end, turns out it was my lack of flask knowledge that was causing all the issues, your code massively helped, thank you sir!