- data
links:
- app
- - phpmyadmin
-phpmyadmin:
- image: nazarpc/phpmyadmin
- ports:
- - "1234:80"
- links:
- - db:mysql
- environment:
- - ABSOLUTE_URI=http://localhost:8000/phpmyadmin/
+
}
# 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;
{% 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">
<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 %}
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"),
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 = FileResponse(open(filename, 'rb'))
- response['Content-Disposition'] = 'attachment; ' + 'filename=' + filename
+ response = FileResponse(open(media_path, 'rb'))
+ 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
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):
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})
#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: