Show More
@@ -21,6 +21,7 b' from __future__ import print_function' | |||
|
21 | 21 | |
|
22 | 22 | import os |
|
23 | 23 | import struct |
|
24 | import mimetypes | |
|
24 | 25 | |
|
25 | 26 | from IPython.core.formatters import _safe_get_formatter_method |
|
26 | 27 | from IPython.utils.py3compat import (string_types, cast_bytes_py2, cast_unicode, |
@@ -781,6 +782,90 b' class Image(DisplayObject):' | |||
|
781 | 782 | def _find_ext(self, s): |
|
782 | 783 | return unicode_type(s.split('.')[-1].lower()) |
|
783 | 784 | |
|
785 | class Video(DisplayObject): | |
|
786 | ||
|
787 | def __init__(self, data=None, url=None, filename=None, embed=None, mimetype=None): | |
|
788 | """Create a video object given raw data or an URL. | |
|
789 | ||
|
790 | When this object is returned by an input cell or passed to the | |
|
791 | display function, it will result in the video being displayed | |
|
792 | in the frontend. | |
|
793 | ||
|
794 | Parameters | |
|
795 | ---------- | |
|
796 | data : unicode, str or bytes | |
|
797 | The raw image data or a URL or filename to load the data from. | |
|
798 | This always results in embedded image data. | |
|
799 | url : unicode | |
|
800 | A URL to download the data from. If you specify `url=`, | |
|
801 | the image data will not be embedded unless you also specify `embed=True`. | |
|
802 | filename : unicode | |
|
803 | Path to a local file to load the data from. | |
|
804 | Videos from a file are always embedded. | |
|
805 | embed : bool | |
|
806 | Should the image data be embedded using a data URI (True) or be | |
|
807 | loaded using an <img> tag. Set this to True if you want the image | |
|
808 | to be viewable later with no internet connection in the notebook. | |
|
809 | ||
|
810 | Default is `True`, unless the keyword argument `url` is set, then | |
|
811 | default value is `False`. | |
|
812 | ||
|
813 | Note that QtConsole is not able to display images if `embed` is set to `False` | |
|
814 | mimetype: unicode | |
|
815 | Specify the mimetype in case you load in a encoded video. | |
|
816 | Examples | |
|
817 | -------- | |
|
818 | Video('https://archive.org/download/Sita_Sings_the_Blues/Sita_Sings_the_Blues_small.mp4') | |
|
819 | Video('path/to/video.mp4') | |
|
820 | Video('path/to/video.mp4', embed=False) | |
|
821 | """ | |
|
822 | if url is None and (data.startswith('http') or data.startswith('https')): | |
|
823 | url = data | |
|
824 | data = None | |
|
825 | embed = False | |
|
826 | elif os.path.exists(data): | |
|
827 | filename = data | |
|
828 | data = None | |
|
829 | ||
|
830 | self.mimetype = mimetype | |
|
831 | self.embed = embed if embed is not None else (filename is not None) | |
|
832 | super(Video, self).__init__(data=data, url=url, filename=filename) | |
|
833 | ||
|
834 | def _repr_html_(self): | |
|
835 | # External URLs and potentially local files are not embedded into the | |
|
836 | # notebook output. | |
|
837 | if not self.embed: | |
|
838 | url = self.url if self.url is not None else self.filename | |
|
839 | output = """<video src="{0}" controls> | |
|
840 | Your browser does not support the <code>video</code> element. | |
|
841 | </video>""".format(url) | |
|
842 | return output | |
|
843 | # Embedded videos uses base64 encoded videos. | |
|
844 | if self.filename is not None: | |
|
845 | mimetypes.init() | |
|
846 | mimetype, encoding = mimetypes.guess_type(self.filename) | |
|
847 | ||
|
848 | video = open(self.filename, 'rb').read() | |
|
849 | video_encoded = video.encode('base64') | |
|
850 | else: | |
|
851 | video_encoded = self.data | |
|
852 | mimetype = self.mimetype | |
|
853 | output = """<video controls> | |
|
854 | <source src="data:{0};base64,{1}" type="{0}"> | |
|
855 | Your browser does not support the video tag. | |
|
856 | </video>""".format(mimetype, video_encoded) | |
|
857 | return output | |
|
858 | ||
|
859 | def reload(self): | |
|
860 | # TODO | |
|
861 | pass | |
|
862 | ||
|
863 | def _repr_png_(self): | |
|
864 | # TODO | |
|
865 | pass | |
|
866 | def _repr_jpeg_(self): | |
|
867 | # TODO | |
|
868 | pass | |
|
784 | 869 | |
|
785 | 870 | def clear_output(wait=False): |
|
786 | 871 | """Clear the output of the current cell receiving output. |
General Comments 0
You need to be logged in to leave comments.
Login now