LINUX.ORG.RU

Поясните плз про HTML5-видео

 ,


0

1

Привет ЛОР. Есть один сайт, и на сайте нужно запилить видео с ограничением доступа - т.е чтобы его видеть (и скачивать) мог только тот, кто залогинен. Для единообразия было решено загружать все видео в webm-формате, выводить через html5 и играть этой штукой http://www.projekktor.com/ Чтобы обеспечить ограничения, было решено отдавать видеофайл через питоновский FileWrapper:

def serve_video(request, id):                                                                                                                                
  if request.user.is_authenticated():                                                                                                                     
    v = SiteVideo.objects.get(id=id)                                                                                                                         
    file = FileWrapper(open(v.file.path, 'rb'))                                                                                                              
    response = HttpResponse(file, content_type='video/webm')                                                                                                 
    response['Content-Length'] = os.path.getsize(v.file.path)                                                                                                
    return response                                                                                                                                          
  else:                                                                                                                                                   
    raise Http403
Так вот. Проблема собственно в том, что видео - не перематывается. Клик по панели перемотки в плейере не делает ровно ничего. Хотелось бы знать возможную причину. Я пока думаю о следующем: либо нужно отдавать файл не тупо через FileWrapper, а как-то совсем по-другому. или же nginx, стоящий фронтендом, нужно куда-то пнуть. Читал про модуль стриминга для какого-то другого формата, но там же упоминалось что в webm он не нужен, и что прокрутка webm - браузероспецифична. или третий вариант - таки глючит сам виджет перемотки в projekktor. Кто в курсе вообще, как эта перемотка работает - помогите достичь просветления.

★★★★★

Чтобы перемотка работала, нужно чтобы отдающая сторона понимала заголовок Range. Подозреваю, что FileWrapper этого не умеет

iSage ★★★★ ()

было решено отдавать видеофайл через питоновский FileWrapper:

Жестокое решение.

либо нужно отдавать файл не тупо через FileWrapper

Ну напрямую как у тебя сделано стриминг точно работать не будет. Если средствами питона нужно реализовать то я не знаю как это сделать, кури доки.

pi11 ★★★★★ ()
Ответ на: комментарий от iSage

Подозреваю, что FileWrapper этого не умеет

Для начала надо хотя бы ему этот параметр передать, т.к. если даже умеет, доступа к нему не получит в этом коде.

pi11 ★★★★★ ()

чтобы его видеть (и скачивать) мог только тот, кто залогинен

«Если за это не убивать — то за что тогда вообще убивать?» (c) VSL

redgremlin ★★★★★ ()
Ответ на: комментарий от redgremlin

ну так требование заказчика, что я могу поделать.
но теперь хотя бы понял что проблема в filewrapper, буду в этом направлении копать.

Komintern ★★★★★ ()
Ответ на: комментарий от pi11
response['Accept-Ranges'] = 'bytes'

дописал к ответу - теперь оно хоть ошибкой реагирует при попытке перемотать: Network error caused the media download to fail part-way. Я так понял что не может оно загрузить кусок. Но в логе nginx я вижу что размер ответа меняется в зависимости от положения перемотки, которое выбираешь:

"GET /get_video/8.webm HTTP/1.1" 200 3577866
"GET /get_video/8.webm HTTP/1.1" 200 93970
"GET /get_video/8.webm HTTP/1.1" 200 3407498

Т.е nginx все же передает нужный кусок, но видимо без еще какого-то нужного заголовка?

Komintern ★★★★★ ()
Ответ на: комментарий от pi11

а в моей ситуации иное решение есть? nginx тот же например может разграничить доступ к файлу в зависимости от <чего-угодно-что-можно-регулировать-питоном>?

Komintern ★★★★★ ()
Ответ на: комментарий от commit

o__0
вообще не врубился пока зачем нужно. но почитаю. ...а нет. хорошая штука. тоже весьма годно. спасибо, ЛОР не оставит в беде.

Komintern ★★★★★ ()
Последнее исправление: Komintern (всего исправлений: 1 )
Ответ на: комментарий от zz

лучше два пива, т.к через X-Accel по итогу и сделал.
еще с какого-то перепугу нашел в конфиге nginx опцию max_ranges 0 - удивился.

Komintern ★★★★★ ()
Ответ на: комментарий от Komintern

это лучше делать не средствами Django, а нанять человека, знающего Red5/Wowza, либо прикручивать это все к ErlyVideo(не помню как теперь он называется).

xpahos ★★★★★ ()
Ответ на: комментарий от xpahos

я читал что-то за red5, но собственно средствами джанги тут происходит только загрузка файликов и проверка доступа к ним.

и да,


Red5 Media Server 1.0 delivers a powerful video streaming and multi-user solution to the ©Adobe ©Flash Player and other exciting client technologies. Based on Java and some of the most powerful open source frameworks, Red5 stands as a solid solution for business of all sizes including the enterprise.



ну его в пень.

Komintern ★★★★★ ()

на уровне вещания поток разбивать на маленькие ролики - джаваскриптом подставлять последовательно в плеер

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.