]> git.parisson.com Git - telemeta.git/commitdiff
Fix video streaming, remove phpmyadmin by default,
authorGuillaume Pellerin <guillaume.pellerin@ircam.fr>
Sun, 3 Jun 2018 22:47:15 +0000 (00:47 +0200)
committerGuillaume Pellerin <guillaume.pellerin@ircam.fr>
Sun, 3 Jun 2018 22:51:24 +0000 (00:51 +0200)
docker-compose.yml
etc/nginx/conf.d/default.conf
telemeta/templates/telemeta/inc/mediaitem_video.html
telemeta/urls.py
telemeta/views/core.py
telemeta/views/item.py

index 47d88e9794e2c5aab0d0ff11ee0c5cb8b98a3dfa..ad0ed98c484b3af1c182ebf915c04c2ba6c441e6 100644 (file)
@@ -86,13 +86,5 @@ nginx:
     - data
   links:
     - app
-    - phpmyadmin
 
-phpmyadmin:
-    image: nazarpc/phpmyadmin
-    ports:
-      - "1234:80"
-    links:
-      - db:mysql
-    environment:
-      - ABSOLUTE_URI=http://localhost:8000/phpmyadmin/
+
index 5f79aa6485b7ad988952fd4b6730d1e542a44b03..3a3cd870fb418f3d6f622b09869e02e1fbb6b976 100644 (file)
@@ -33,14 +33,14 @@ server {
        }
 
        # phpmyadmin
-       location /phpmyadmin/ {
-            proxy_pass http://phpmyadmin/;
+       #location /phpmyadmin/ {
+            #proxy_pass http://phpmyadmin/;
             #proxy_set_header Host $http_host;
             #proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
             #proxy_set_header X-Forwarded-Server $http_host;
             #proxy_redirect / /phpmyadmin/;
             #proxy_cookie_path / /phpmyadmin/;
-       }
+       #}
 
        location / {
             uwsgi_pass app:8000;
index f124ac63f3d59f9f006d344b5bc38dfa6510770b..0c018eba50b3b502add5503275bef7ae98c09809 100644 (file)
@@ -1,16 +1,16 @@
 {% load telemeta_tags %}
 {% load i18n %}
 
-<div class="video">
-<video width="{% if width %}{{ width }}{% else %}348{% endif %}" controls preload="none">
-    {% for transcoded in item.transcoded.all %}
-     {% if "video" in transcoded.mime_type %}
-      <source src="{{ MEDIA_URL }}{{ transcoded.file }}#t=0" type="{{ transcoded.mime_type }}" />
-     {% endif %}
-    {% endfor %}
-      <source src="{% url "telemeta-item-export" item.public_id 'webm' %}" type="{{ mime_type }}" />
-</video>
-</div>
+  <div class="video">
+  <video id="my_video_1" class="video-js vjs-default-skin" width="{% if width %}{{ width }}{% else %}348{% endif %}" controls preload="none" {% if item.related.all %}{% for related in item.related.all %}{% if related.title == "preview" %}poster="{{ MEDIA_URL }}{{ related.file }}"{% endif %}{% endfor %}{% endif %} data-setup='{}'>
+      {% for transcoded in item.transcoded.all %}
+       {% if "video" in transcoded.mime_type %}
+        <source src="{{ MEDIA_URL }}{{ transcoded.file }}#t=0" type="{{ transcoded.mime_type }}" />
+       {% endif %}
+      {% endfor %}
+      <source src="{% url 'telemeta-item-stream' item.public_id %}" type="{{ mime_type }}" />
+  </video>
+  </div>
 
 {% comment %}
 <div class="video">
@@ -20,7 +20,7 @@
     <source src="{{ MEDIA_URL }}{{ transcoded.file }}#t=0" type="{{ transcoded.mime_type }}" />
    {% endif %}
   {% endfor %}
-    <source src="{{ MEDIA_URL }}{{ item.file }}#t=0" type="{{ mime_type }}" />
+  <source src="{{ MEDIA_URL }}{{ item.file }}#t=0" type="{{ mime_type }}" />
 </video>
 </div>
 {% endcomment %}
index 26b17236f81ab6af20f57c7bb65807da4c8808e1..3a9c704c45540fc8720e976ad327ebfe7a22f426 100644 (file)
@@ -69,6 +69,7 @@ urlpatterns = patterns('',
     url(r'^archives/items/(?P<public_id>[A-Za-z0-9._-]+)/dc/xml/$', item_view.item_detail, {'format': 'dublin_core_xml'}, name="telemeta-item-dublincore-xml"),
     url(r'^archives/items/download/(?P<public_id>[A-Za-z0-9._-]+)\.(?P<extension>' + export_extensions + ')$', item_view.item_export, name="telemeta-item-export"),
     url(r'^archives/items/download/(?P<public_id>[A-Za-z0-9._-]+)\.(?P<extension>' + export_extensions + ')/isAvailable$', item_view.item_export_available, name="telemeta-item-export-available"),
+    url(r'^archives/items/(?P<public_id>[A-Za-z0-9._-]+)/stream', item_view.item_export, name="telemeta-item-stream"),
 
     url(r'^archives/items/(?P<public_id>[A-Za-z0-9._-]+)/visualize/(?P<grapher_id>[0-9a-z_]+)/(?P<width>[0-9A-Z]+)x(?P<height>[0-9A-Z]+)/$', item_view.item_visualize, name="telemeta-item-visualize"),
     url(r'^archives/items/(?P<public_id>[A-Za-z0-9._-]+)/analyze/xml/$', item_view.item_analyze_xml, name="telemeta-item-analyze-xml"),
index 24427e6a1119d835b9f524e497953cf36ab0270a..8c6e4c5a20253db1bf021a02b1f74186532c7b9a 100644 (file)
@@ -95,23 +95,29 @@ class TelemetaBaseMixin(object):
     cache_tmp = TelemetaCache(getattr(settings, 'FILE_UPLOAD_TEMP_DIR', os.path.join(MEDIA_ROOT, 'tmp')))
 
 
-def serve_media(filename, content_type="", buffering=True):
+def serve_media(media_path, content_type="", buffering=True, streaming=False):
     if not settings.DEBUG:
-        return nginx_media_accel(filename, content_type=content_type,
-                                 buffering=buffering)
+        return nginx_media_accel(media_path, content_type=content_type,
+                                 buffering=buffering, streaming=streaming)
     else:
-        response = StreamingHttpResponse(stream_from_file(filename), content_type=content_type)
-        response['Content-Disposition'] = 'attachment; ' + 'filename=' + filename
+        try:
+            response = FileResponse(open(media_path, 'rb'))
+        except:    
+            response = StreamingHttpResponse(stream_from_file(filename), content_type=content_type)
+        filename = os.path.basename(media_path)
+        if not streaming:
+            response['Content-Disposition'] = 'attachment; ' + 'filename=' + filename
         return response
 
 
-def nginx_media_accel(media_path, content_type="", buffering=True):
+def nginx_media_accel(media_path, content_type="", buffering=True, streaming=False):
     """Send a protected media file through nginx with X-Accel-Redirect"""
 
     response = HttpResponse()
     url = settings.MEDIA_URL + os.path.relpath(media_path, settings.MEDIA_ROOT)
     filename = os.path.basename(media_path)
-    response['Content-Disposition'] = "attachment; filename=%s" % (filename)
+    if not streaming:
+        response['Content-Disposition'] = "attachment; filename=%s" % (filename)
     response['Content-Type'] = content_type
     response['X-Accel-Redirect'] = url
 
index 28d32a117c4008d282e080874242ff84d8c5f38d..dfe3c18d8363e2fa02bc470cef8b7daea22f16ef 100644 (file)
@@ -388,14 +388,16 @@ class ItemView(ItemBaseMixin):
 
         return (media, mime_type)
 
-    def item_export(self, request, public_id, extension, return_availability=False):
+    def item_export(self, request, public_id, extension=None, mime_type=None, return_availability=False):
         """Export a given media item in the specified format (OGG, FLAC, ...)"""
 
         item = MediaItem.objects.get(public_id=public_id)
         public_access = get_item_access(item, request.user)
+        raw = False
 
         if not extension:
             extension = item.file.path.split('.')[-1]
+            raw = True
 
         if (not public_access == 'full' or not extension in settings.TELEMETA_STREAMING_FORMATS) and \
                 not (request.user.has_perm('telemeta.can_play_all_items') or request.user.is_superuser):
@@ -405,33 +407,17 @@ class ItemView(ItemBaseMixin):
             messages.error(request, title)
             return render(request, 'telemeta/messages.html', {'description': description})
 
-        # FIXME: MP4 handling in TimeSide
-        if 'mp4' in extension:
-            mime_type = 'video/mp4'
-            video = item.file.path
-            response = serve_media(video, content_type=mime_type)
-            # response['Content-Disposition'] = 'attachment'
-            # TF : I don't know why empty attachment was set
-            # TODO: remove if useless
+        if raw:
+            media = item.file.path
+            response = serve_media(media, content_type=item.mimetype)
             if return_availability:
                 data = json.dumps({'available': True})
                 return HttpResponse(data, content_type='application/json')
             return response
 
-        if 'webm' in extension:
-            mime_type = 'video/webm'
-            video = item.file.path
-            response = serve_media(video, content_type=mime_type)
-            # response['Content-Disposition'] = 'attachment'
-            # TF : I don't know why empty attachment was set,
-            # TODO: remove if useless
-            if return_availability:
-                data = json.dumps({'available': True})
-                return HttpResponse(data, content_type='application/json')
-            return response
 
         (media, mime_type) = self.item_transcode(item, extension)
-        #media  = None
+        
         if media:
             if return_availability:
                 data = json.dumps({'available': True})
@@ -453,8 +439,8 @@ class ItemView(ItemBaseMixin):
             #patch_cache_control(response, no_cache=True, no_store=True, must_revalidate=True)
             return response
 
-    def item_export_available(self, request, public_id, extension):
-        return self.item_export(request, public_id, extension, return_availability=True)
+    def item_export_available(self, request, public_id, extension=None, mime_type=None):
+        return self.item_export(request, public_id, extension, mime_type, return_availability=True)
 
     def item_playlist(self, request, public_id, template, mimetype):
         try: