Django приложение "myvideoproj" с 2 страницами. Page1 список видео. Нажмите на ссылку видео, перенаправляет на страницу 2. Страница 2 воспроизводит видео.
Работает: на странице 1 список всех видео. Страница 2 воспроизводит видео.
Видео файлы не являются статичными.
Затем настройте nginx, gunicorn для приложения django на рабочем сервере.
Страница 1 может отображать видео. Страница 2 не воспроизводит видео.
Я думаю, что конфигурация nginx не настроена правильно для страницы 2.
Пожалуйста, помогите!
settings.py
hostname = socket.gethostname()
SERVER_LIST = {
'myserver’': {
'movie_dir': '/path/my/home/video/', # store all video
'siteicon_url': 'www.mydomain.com:8000',
'url_playmovie': www.mydomain.com:8000/playvideo/',
},
}
SERVER = SERVER_LIST[hostname]
MOVIES_DIR = SERVER['movie_dir']
URL_VIDEOLIST = SERVER['siteicon_url']
URL_PLAYMOVIE = SERVER['url_playmovie']
if DEBUG:
STATIC_ROOT = os.path.join(BASE_DIR, '/static')
else:
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATIC_URL = '/static/'
# Additional locations of static files
STATICFILES_DIRS = (
(os.path.join(SITE_ROOT, 'static/')),
MOVIES_DIR, # Make sure page 2 is able to find real location of video, which is NOT under static.
)
Пример страницы html. Пользователь может щелкнуть по нему.
<a href=".....mydomain.com:8000/playvideo/encoded_myvideo_sample.mp4">
<img src="data:image/png;base64,..blablathumbnail..==" atl="">
</a>
Реальное местоположение видео файла:
/path/my/home/video/myvideo_sample.mp4
Имя видеофайла в URL страницы 1 закодировано в base64.
Образец HTML. Без nginx, gunicorn (запустить сервер django в командной строке), он воспроизводит видео. С nginx, gunicorn (запустите службу nginx и службу gunicorn, она НЕ работает.
<div class="player">
<video id="video" width="640" height="420" controls="" autoplay="">
<source src="/static/myvideo_sample.mp4" type="video/mp4">
Your browser does not support the video tag.
</video>
</div>
views.py
def playvideo(request, encoded_movie_name):
# encoded_movie_name = 'encoded_myvideo_sample.mp4'
decoded_videofile = url_decode(encoded_movie_name)
# decoded_videofile = 'myvideo_sample.mp4'
args['movie'] = decoded_videofile
response = shortcuts.render_to_response('playvideo.html', args)
return response
playvideo.html
<div class='player'>
<video id="video" width="640" height="420" controls autoplay>
<source src="{% static '' %}{{movie}}" type="video/mp4">
Your browser does not support the video tag.
</video>
</div>
Я тестировал установку nginx, gunicorn с небольшим приложением django. Оно работает. Затем я следую тому же процессу, чтобы настроить nginx, gunicorn для myvideoproj, и у меня есть вышеуказанная проблема.
Может быть, в конфигурации nginx нет конфигурации для этого URL?
....mydomain.com:8000/playvideo/
/ etc / nginx / sites-available / myvideoproj выглядит следующим образом:
server {
listen 8000;
server_name 0.0.0.0;
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /projectpath/myvideoproj;
}
location / {
include proxy_params;
proxy_pass http://unix:/projectpath/myvideoproj/myvideoproj.sock;
}
}
Ошибка в отладчике Chrome
Failed to load resource: the server responded with a status of 404 (Not Found) encoded_myvideo_sample.mp4
Чего не хватает в / etc / nginx / sites-available / myvideoproj или в другой конфигурации? Название видеофайла на странице 1 кодируется и декодируется в функции playvideo (). Как настроить nginx, чтобы он мог загружать видеофайл в каталог / path / my / home / video /?