We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Video widget appears to be broken in 0.11.x?
#### ALL software version info
Python 3.8.3 x64

Output of `pip list` in the virtualenv I tested this in:
```
Package             Version
------------------- ---------
argon2-cffi         20.1.0
async-generator     1.10
attrs               20.3.0
backcall            0.2.0
bleach              3.3.0
bokeh               2.3.0
certifi             2020.12.5
cffi                1.14.5
chardet             4.0.0
colorama            0.4.4
decorator           4.4.2
defusedxml          0.7.1
entrypoints         0.3
idna                2.10
ipykernel           5.5.0
ipython             7.21.0
ipython-genutils    0.2.0
ipywidgets          7.6.3
jedi                0.18.0
Jinja2              2.11.3
jsonschema          3.2.0
jupyter             1.0.0
jupyter-client      6.1.12
jupyter-console     6.3.0
jupyter-core        4.7.1
jupyterlab-pygments 0.1.2
jupyterlab-widgets  1.0.0
Markdown            3.3.4
MarkupSafe          1.1.1
mistune             0.8.4
nbclient            0.5.3
nbconvert           6.0.7
nbformat            5.1.2
nest-asyncio        1.5.1
notebook            6.1.0
numpy               1.20.1
packaging           20.9
pandocfilters       1.4.3
panel               0.11.1
param               1.10.1
parso               0.8.1
pickleshare         0.7.5
Pillow              8.1.2
pip                 20.1.1
prometheus-client   0.9.0
prompt-toolkit      3.0.17
pycparser           2.20
pyct                0.4.8
Pygments            2.8.1
pyparsing           2.4.7
pyrsistent          0.17.3
python-dateutil     2.8.1
pyviz-comms         2.0.1
pywin32             300
pywinpty            0.5.7
PyYAML              5.4.1
pyzmq               22.0.3
qtconsole           5.0.3
QtPy                1.9.0
requests            2.25.1
Send2Trash          1.5.0
setuptools          46.4.0
six                 1.15.0
terminado           0.9.3
testpath            0.4.4
tornado             6.1
tqdm                4.59.0
traitlets           5.0.5
typing-extensions   3.7.4.3
urllib3             1.26.4
wcwidth             0.2.5
webencodings        0.5.1
wheel               0.34.2
widgetsnbextension  3.5.1
```
Tested on recent versions of Firefox and Chrome, Win10 and Linux. 

The problem occurs on both 0.11.0 and 0.11.1, but does not happen if I simply downgrade to 0.10.3. 

#### Description of expected behavior and the observed behavior

Initially noticed this trying to play other videos, but it happens with the reference [Video pane example notebook](https://raw.githubusercontent.com/holoviz/panel/master/examples/reference/panes/Video.ipynb). When the cell creating the widget is executed, the video never loads. Checking the generated HTML reveals that the src attribute is empty:

```
<video height="360" width="640" controls="" src="" loop="" style="object-fit: fill; min-width: 100%; min-height: 100%;"></video>
```
compared to the working version from 0.10.3:
```
<video height="360" width="640" controls="" src="https://file-examples-com.github.io/uploads/2017/04/file_example_MP4_640_3MG.mp4" loop="" style="object-fit: fill; min-width: 100%; min-height: 100%;"></video>
```

#### Complete, minimal, self-contained example code that reproduces the issue

Just run the reference [Video.ipynb notebook](https://raw.githubusercontent.com/holoviz/panel/master/examples/reference/panes/Video.ipynb). 

#### Stack traceback and/or browser JavaScript console output

There don't seem to be any obvious errors in the JS console or the jupyter server output. A sample log from the JS console when restarting and then running the notebook:

```
kernel.js:106 Kernel: kernel_restarting (28828522-1f07-401a-bb70-0aaa5f7fbf15)
kernel.js:106 Kernel: kernel_created (28828522-1f07-401a-bb70-0aaa5f7fbf15)
kernel.js:463 Starting WebSockets: ws://localhost:8888/api/kernels/28828522-1f07-401a-bb70-0aaa5f7fbf15
kernel.js:106 Kernel: kernel_connected (28828522-1f07-401a-bb70-0aaa5f7fbf15)
kernel.js:106 Kernel: kernel_starting (28828522-1f07-401a-bb70-0aaa5f7fbf15)
kernel.js:106 Kernel: kernel_ready (28828522-1f07-401a-bb70-0aaa5f7fbf15)
kernel.js:106 Kernel: kernel_ready (28828522-1f07-401a-bb70-0aaa5f7fbf15)
bokeh-2.3.0.min.js:184 [bokeh] setting log level to: 'info'
bokeh-2.3.0.min.js:165 [bokeh] document idle at 14 ms
```

#### Screenshots or screencasts of the bug in action

How the video widget appears in both Chrome and Firefox: 

![bug1](https://user-images.githubusercontent.com/9051013/111869017-25020380-8975-11eb-8827-a791c256c70f.jpg)
![bug2](https://user-images.githubusercontent.com/9051013/111869021-27fcf400-8975-11eb-8a62-5148b1b6d817.jpg)


--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `panel/pane/media.py`
Content:
```
1 """
2 Contains Media panes including renderers for Audio and Video content.
3 """
4 import os
5 
6 from base64 import b64encode
7 from io import BytesIO
8 from six import string_types
9 
10 import numpy as np
11 import param
12 
13 from ..models import Audio as _BkAudio, Video as _BkVideo
14 from ..util import isfile, isurl
15 from .base import PaneBase
16 
17 
18 class _MediaBase(PaneBase):
19 
20     loop = param.Boolean(default=False, doc="""
21         Whether the meida should loop""")
22 
23     time = param.Number(default=0, doc="""
24         The current timestamp""")
25 
26     throttle = param.Integer(default=250, doc="""
27         How frequently to sample the current playback time in milliseconds""")
28 
29     paused = param.Boolean(default=True, doc="""
30         Whether the media is currently paused""")
31 
32     object = param.String(default='', allow_None=True, doc="""
33         The media file either local or remote.""")
34 
35     volume = param.Number(default=None, bounds=(0, 100), doc="""
36         The volume of the media player.""")
37 
38     _default_mime = None
39 
40     _formats = []
41 
42     _media_type = None
43 
44     _rename = {'name': None, 'sample_rate': None, 'object': 'value'}
45 
46     _updates = True
47 
48     __abstract = True
49 
50     @classmethod
51     def applies(cls, obj):
52         if isinstance(obj, string_types):
53             if isfile(obj) and any(obj.endswith('.'+fmt) for fmt in cls._formats):
54                 return True
55             if isurl(obj, cls._formats):
56                 return True
57         if hasattr(obj, 'read'):  # Check for file like object
58             return True
59         return False
60 
61     def _get_model(self, doc, root=None, parent=None, comm=None):
62         props = self._process_param_change(self._init_params())
63         model = self._bokeh_model(**props)
64         if root is None:
65             root = model
66         self._models[root.ref['id']] = (model, parent)
67         self._link_props(model, list(model.properties()), doc, root, comm)
68         return model
69 
70     def _from_numpy(self, data):
71         from scipy.io import wavfile
72         buffer = BytesIO()
73         wavfile.write(buffer, self.sample_rate, data)
74         return buffer
75 
76     def _process_param_change(self, msg):
77         msg = super()._process_param_change(msg)
78         if 'value' in msg:
79             value = msg['value']
80             if isinstance(value, np.ndarray):
81                 fmt = 'wav'
82                 buffer = self._from_numpy(value)
83                 data = b64encode(buffer.getvalue())
84             elif os.path.isfile(value):
85                 fmt = value.split('.')[-1]
86                 with open(value, 'rb') as f:
87                     data = f.read()
88                 data = b64encode(data)
89             elif value.lower().startswith('http'):
90                 return msg
91             elif not value:
92                 data, fmt = b'', self._default_mime
93             else:
94                 raise ValueError('Object should be either path to a sound file or numpy array')
95             template = 'data:audio/{mime};base64,{data}'
96             msg['value'] = template.format(data=data.decode('utf-8'),
97                                            mime=fmt)
98             
99         return msg
100 
101 
102 class Audio(_MediaBase):
103 
104     object = param.ClassSelector(default='', class_=(string_types + (np.ndarray,)),
105                                  allow_None=True, doc="""
106         The audio file either local or remote.""")
107 
108     sample_rate = param.Integer(default=44100, doc="""
109         The sample_rate of the audio when given a NumPy array.""")
110 
111     _bokeh_model = _BkAudio
112 
113     _default_mime = 'wav'
114 
115     _formats = ['mp3', 'wav', 'ogg']
116 
117     _media_type = 'audio'
118 
119     @classmethod
120     def applies(cls, obj):
121         return (super().applies(obj) or 
122                 (isinstance(obj, np.ndarray) and obj.ndim==1 and obj.dtype in [np.int16, np.uint16]))
123 
124 
125 class Video(_MediaBase):
126 
127     _bokeh_model = _BkVideo
128 
129     _default_mime = 'mp4'
130 
131     _formats = ['mp4', 'webm', 'ogg']
132 
133     _media_type = 'video'
134 
135
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/panel/pane/media.py b/panel/pane/media.py
--- a/panel/pane/media.py
+++ b/panel/pane/media.py
@@ -60,6 +60,8 @@
 
     def _get_model(self, doc, root=None, parent=None, comm=None):
         props = self._process_param_change(self._init_params())
+        if self.object is not None:
+            props['value'] = self.object
         model = self._bokeh_model(**props)
         if root is None:
             root = model

{"golden_diff": "diff --git a/panel/pane/media.py b/panel/pane/media.py\n--- a/panel/pane/media.py\n+++ b/panel/pane/media.py\n@@ -60,6 +60,8 @@\n \n     def _get_model(self, doc, root=None, parent=None, comm=None):\n         props = self._process_param_change(self._init_params())\n+        if self.object is not None:\n+            props['value'] = self.object\n         model = self._bokeh_model(**props)\n         if root is None:\n             root = model\n", "issue": "Video widget appears to be broken in 0.11.x?\n#### ALL software version info\r\nPython 3.8.3 x64\r\n\r\nOutput of `pip list` in the virtualenv I tested this in:\r\n```\r\nPackage             Version\r\n------------------- ---------\r\nargon2-cffi         20.1.0\r\nasync-generator     1.10\r\nattrs               20.3.0\r\nbackcall            0.2.0\r\nbleach              3.3.0\r\nbokeh               2.3.0\r\ncertifi             2020.12.5\r\ncffi                1.14.5\r\nchardet             4.0.0\r\ncolorama            0.4.4\r\ndecorator           4.4.2\r\ndefusedxml          0.7.1\r\nentrypoints         0.3\r\nidna                2.10\r\nipykernel           5.5.0\r\nipython             7.21.0\r\nipython-genutils    0.2.0\r\nipywidgets          7.6.3\r\njedi                0.18.0\r\nJinja2              2.11.3\r\njsonschema          3.2.0\r\njupyter             1.0.0\r\njupyter-client      6.1.12\r\njupyter-console     6.3.0\r\njupyter-core        4.7.1\r\njupyterlab-pygments 0.1.2\r\njupyterlab-widgets  1.0.0\r\nMarkdown            3.3.4\r\nMarkupSafe          1.1.1\r\nmistune             0.8.4\r\nnbclient            0.5.3\r\nnbconvert           6.0.7\r\nnbformat            5.1.2\r\nnest-asyncio        1.5.1\r\nnotebook            6.1.0\r\nnumpy               1.20.1\r\npackaging           20.9\r\npandocfilters       1.4.3\r\npanel               0.11.1\r\nparam               1.10.1\r\nparso               0.8.1\r\npickleshare         0.7.5\r\nPillow              8.1.2\r\npip                 20.1.1\r\nprometheus-client   0.9.0\r\nprompt-toolkit      3.0.17\r\npycparser           2.20\r\npyct                0.4.8\r\nPygments            2.8.1\r\npyparsing           2.4.7\r\npyrsistent          0.17.3\r\npython-dateutil     2.8.1\r\npyviz-comms         2.0.1\r\npywin32             300\r\npywinpty            0.5.7\r\nPyYAML              5.4.1\r\npyzmq               22.0.3\r\nqtconsole           5.0.3\r\nQtPy                1.9.0\r\nrequests            2.25.1\r\nSend2Trash          1.5.0\r\nsetuptools          46.4.0\r\nsix                 1.15.0\r\nterminado           0.9.3\r\ntestpath            0.4.4\r\ntornado             6.1\r\ntqdm                4.59.0\r\ntraitlets           5.0.5\r\ntyping-extensions   3.7.4.3\r\nurllib3             1.26.4\r\nwcwidth             0.2.5\r\nwebencodings        0.5.1\r\nwheel               0.34.2\r\nwidgetsnbextension  3.5.1\r\n```\r\nTested on recent versions of Firefox and Chrome, Win10 and Linux. \r\n\r\nThe problem occurs on both 0.11.0 and 0.11.1, but does not happen if I simply downgrade to 0.10.3. \r\n\r\n#### Description of expected behavior and the observed behavior\r\n\r\nInitially noticed this trying to play other videos, but it happens with the reference [Video pane example notebook](https://raw.githubusercontent.com/holoviz/panel/master/examples/reference/panes/Video.ipynb). When the cell creating the widget is executed, the video never loads. Checking the generated HTML reveals that the src attribute is empty:\r\n\r\n```\r\n<video height=\"360\" width=\"640\" controls=\"\" src=\"\" loop=\"\" style=\"object-fit: fill; min-width: 100%; min-height: 100%;\"></video>\r\n```\r\ncompared to the working version from 0.10.3:\r\n```\r\n<video height=\"360\" width=\"640\" controls=\"\" src=\"https://file-examples-com.github.io/uploads/2017/04/file_example_MP4_640_3MG.mp4\" loop=\"\" style=\"object-fit: fill; min-width: 100%; min-height: 100%;\"></video>\r\n```\r\n\r\n#### Complete, minimal, self-contained example code that reproduces the issue\r\n\r\nJust run the reference [Video.ipynb notebook](https://raw.githubusercontent.com/holoviz/panel/master/examples/reference/panes/Video.ipynb). \r\n\r\n#### Stack traceback and/or browser JavaScript console output\r\n\r\nThere don't seem to be any obvious errors in the JS console or the jupyter server output. A sample log from the JS console when restarting and then running the notebook:\r\n\r\n```\r\nkernel.js:106 Kernel: kernel_restarting (28828522-1f07-401a-bb70-0aaa5f7fbf15)\r\nkernel.js:106 Kernel: kernel_created (28828522-1f07-401a-bb70-0aaa5f7fbf15)\r\nkernel.js:463 Starting WebSockets: ws://localhost:8888/api/kernels/28828522-1f07-401a-bb70-0aaa5f7fbf15\r\nkernel.js:106 Kernel: kernel_connected (28828522-1f07-401a-bb70-0aaa5f7fbf15)\r\nkernel.js:106 Kernel: kernel_starting (28828522-1f07-401a-bb70-0aaa5f7fbf15)\r\nkernel.js:106 Kernel: kernel_ready (28828522-1f07-401a-bb70-0aaa5f7fbf15)\r\nkernel.js:106 Kernel: kernel_ready (28828522-1f07-401a-bb70-0aaa5f7fbf15)\r\nbokeh-2.3.0.min.js:184 [bokeh] setting log level to: 'info'\r\nbokeh-2.3.0.min.js:165 [bokeh] document idle at 14 ms\r\n```\r\n\r\n#### Screenshots or screencasts of the bug in action\r\n\r\nHow the video widget appears in both Chrome and Firefox: \r\n\r\n![bug1](https://user-images.githubusercontent.com/9051013/111869017-25020380-8975-11eb-8827-a791c256c70f.jpg)\r\n![bug2](https://user-images.githubusercontent.com/9051013/111869021-27fcf400-8975-11eb-8a62-5148b1b6d817.jpg)\r\n\n", "before_files": [{"content": "\"\"\"\nContains Media panes including renderers for Audio and Video content.\n\"\"\"\nimport os\n\nfrom base64 import b64encode\nfrom io import BytesIO\nfrom six import string_types\n\nimport numpy as np\nimport param\n\nfrom ..models import Audio as _BkAudio, Video as _BkVideo\nfrom ..util import isfile, isurl\nfrom .base import PaneBase\n\n\nclass _MediaBase(PaneBase):\n\n    loop = param.Boolean(default=False, doc=\"\"\"\n        Whether the meida should loop\"\"\")\n\n    time = param.Number(default=0, doc=\"\"\"\n        The current timestamp\"\"\")\n\n    throttle = param.Integer(default=250, doc=\"\"\"\n        How frequently to sample the current playback time in milliseconds\"\"\")\n\n    paused = param.Boolean(default=True, doc=\"\"\"\n        Whether the media is currently paused\"\"\")\n\n    object = param.String(default='', allow_None=True, doc=\"\"\"\n        The media file either local or remote.\"\"\")\n\n    volume = param.Number(default=None, bounds=(0, 100), doc=\"\"\"\n        The volume of the media player.\"\"\")\n\n    _default_mime = None\n\n    _formats = []\n\n    _media_type = None\n\n    _rename = {'name': None, 'sample_rate': None, 'object': 'value'}\n\n    _updates = True\n\n    __abstract = True\n\n    @classmethod\n    def applies(cls, obj):\n        if isinstance(obj, string_types):\n            if isfile(obj) and any(obj.endswith('.'+fmt) for fmt in cls._formats):\n                return True\n            if isurl(obj, cls._formats):\n                return True\n        if hasattr(obj, 'read'):  # Check for file like object\n            return True\n        return False\n\n    def _get_model(self, doc, root=None, parent=None, comm=None):\n        props = self._process_param_change(self._init_params())\n        model = self._bokeh_model(**props)\n        if root is None:\n            root = model\n        self._models[root.ref['id']] = (model, parent)\n        self._link_props(model, list(model.properties()), doc, root, comm)\n        return model\n\n    def _from_numpy(self, data):\n        from scipy.io import wavfile\n        buffer = BytesIO()\n        wavfile.write(buffer, self.sample_rate, data)\n        return buffer\n\n    def _process_param_change(self, msg):\n        msg = super()._process_param_change(msg)\n        if 'value' in msg:\n            value = msg['value']\n            if isinstance(value, np.ndarray):\n                fmt = 'wav'\n                buffer = self._from_numpy(value)\n                data = b64encode(buffer.getvalue())\n            elif os.path.isfile(value):\n                fmt = value.split('.')[-1]\n                with open(value, 'rb') as f:\n                    data = f.read()\n                data = b64encode(data)\n            elif value.lower().startswith('http'):\n                return msg\n            elif not value:\n                data, fmt = b'', self._default_mime\n            else:\n                raise ValueError('Object should be either path to a sound file or numpy array')\n            template = 'data:audio/{mime};base64,{data}'\n            msg['value'] = template.format(data=data.decode('utf-8'),\n                                           mime=fmt)\n            \n        return msg\n\n\nclass Audio(_MediaBase):\n\n    object = param.ClassSelector(default='', class_=(string_types + (np.ndarray,)),\n                                 allow_None=True, doc=\"\"\"\n        The audio file either local or remote.\"\"\")\n\n    sample_rate = param.Integer(default=44100, doc=\"\"\"\n        The sample_rate of the audio when given a NumPy array.\"\"\")\n\n    _bokeh_model = _BkAudio\n\n    _default_mime = 'wav'\n\n    _formats = ['mp3', 'wav', 'ogg']\n\n    _media_type = 'audio'\n\n    @classmethod\n    def applies(cls, obj):\n        return (super().applies(obj) or \n                (isinstance(obj, np.ndarray) and obj.ndim==1 and obj.dtype in [np.int16, np.uint16]))\n\n\nclass Video(_MediaBase):\n\n    _bokeh_model = _BkVideo\n\n    _default_mime = 'mp4'\n\n    _formats = ['mp4', 'webm', 'ogg']\n\n    _media_type = 'video'\n\n", "path": "panel/pane/media.py"}], "after_files": [{"content": "\"\"\"\nContains Media panes including renderers for Audio and Video content.\n\"\"\"\nimport os\n\nfrom base64 import b64encode\nfrom io import BytesIO\nfrom six import string_types\n\nimport numpy as np\nimport param\n\nfrom ..models import Audio as _BkAudio, Video as _BkVideo\nfrom ..util import isfile, isurl\nfrom .base import PaneBase\n\n\nclass _MediaBase(PaneBase):\n\n    loop = param.Boolean(default=False, doc=\"\"\"\n        Whether the meida should loop\"\"\")\n\n    time = param.Number(default=0, doc=\"\"\"\n        The current timestamp\"\"\")\n\n    throttle = param.Integer(default=250, doc=\"\"\"\n        How frequently to sample the current playback time in milliseconds\"\"\")\n\n    paused = param.Boolean(default=True, doc=\"\"\"\n        Whether the media is currently paused\"\"\")\n\n    object = param.String(default='', allow_None=True, doc=\"\"\"\n        The media file either local or remote.\"\"\")\n\n    volume = param.Number(default=None, bounds=(0, 100), doc=\"\"\"\n        The volume of the media player.\"\"\")\n\n    _default_mime = None\n\n    _formats = []\n\n    _media_type = None\n\n    _rename = {'name': None, 'sample_rate': None, 'object': 'value'}\n\n    _updates = True\n\n    __abstract = True\n\n    @classmethod\n    def applies(cls, obj):\n        if isinstance(obj, string_types):\n            if isfile(obj) and any(obj.endswith('.'+fmt) for fmt in cls._formats):\n                return True\n            if isurl(obj, cls._formats):\n                return True\n        if hasattr(obj, 'read'):  # Check for file like object\n            return True\n        return False\n\n    def _get_model(self, doc, root=None, parent=None, comm=None):\n        props = self._process_param_change(self._init_params())\n        if self.object is not None:\n            props['value'] = self.object\n        model = self._bokeh_model(**props)\n        if root is None:\n            root = model\n        self._models[root.ref['id']] = (model, parent)\n        self._link_props(model, list(model.properties()), doc, root, comm)\n        return model\n\n    def _from_numpy(self, data):\n        from scipy.io import wavfile\n        buffer = BytesIO()\n        wavfile.write(buffer, self.sample_rate, data)\n        return buffer\n\n    def _process_param_change(self, msg):\n        msg = super()._process_param_change(msg)\n        if 'value' in msg:\n            value = msg['value']\n            if isinstance(value, np.ndarray):\n                fmt = 'wav'\n                buffer = self._from_numpy(value)\n                data = b64encode(buffer.getvalue())\n            elif os.path.isfile(value):\n                fmt = value.split('.')[-1]\n                with open(value, 'rb') as f:\n                    data = f.read()\n                data = b64encode(data)\n            elif value.lower().startswith('http'):\n                return msg\n            elif not value:\n                data, fmt = b'', self._default_mime\n            else:\n                raise ValueError('Object should be either path to a sound file or numpy array')\n            template = 'data:audio/{mime};base64,{data}'\n            msg['value'] = template.format(data=data.decode('utf-8'),\n                                           mime=fmt)\n            \n        return msg\n\n\nclass Audio(_MediaBase):\n\n    object = param.ClassSelector(default='', class_=(string_types + (np.ndarray,)),\n                                 allow_None=True, doc=\"\"\"\n        The audio file either local or remote.\"\"\")\n\n    sample_rate = param.Integer(default=44100, doc=\"\"\"\n        The sample_rate of the audio when given a NumPy array.\"\"\")\n\n    _bokeh_model = _BkAudio\n\n    _default_mime = 'wav'\n\n    _formats = ['mp3', 'wav', 'ogg']\n\n    _media_type = 'audio'\n\n    @classmethod\n    def applies(cls, obj):\n        return (super().applies(obj) or \n                (isinstance(obj, np.ndarray) and obj.ndim==1 and obj.dtype in [np.int16, np.uint16]))\n\n\nclass Video(_MediaBase):\n\n    _bokeh_model = _BkVideo\n\n    _default_mime = 'mp4'\n\n    _formats = ['mp4', 'webm', 'ogg']\n\n    _media_type = 'video'\n\n", "path": "panel/pane/media.py"}]}