Как использовать Django Rest API для приложения потокового видео Android? - PullRequest
0 голосов
/ 27 сентября 2018

Я создаю приложение, которое загружает и хранит пользовательский видеоконтент, и этот контент доступен для нескольких человек в его сети.Я пишу REST API на основе Django для того же.

Мне нужно изучить, как транслировать видео контент в приложении для Android, и узнать об Exoplayer.Но он запрашивает URL видеофайла для запуска.Я не хочу делать URL общедоступным (доступ к которому может получить кто угодно, если он знает URL), скорее я сначала хочу проверить подлинность пользователя и проверить, есть ли у него доступ или нет, а затем только заставить человека транслировать это видео.Итак, я много искал, но не мог найти, как ввести запрос на получение в Exoplayer или любом медиаплеере на Android.

Может кто-нибудь, пожалуйста, помогите мне указать на документацию для того же.В основном я буду работать в Django, чтобы получить нужный видеофайл.Кроме того, есть ли что-то другое, что мне придется сделать со стороны сервера для решения этой проблемы.

Редактировать: Кроме того, я хотел знать, возвращаю ли я полный файл в Django Rest API, будет ли Exoplayer (илилюбой другой проигрыватель) сможет транслировать в потоковом режиме, если я буду искать время на проигрывателе, который еще не был загружен.По сути, смогут ли эти проигрыватели искать часть, если API вернет весь файл за один раз?

Заранее спасибо.

1 Ответ

0 голосов
/ 27 сентября 2018

Ниже приведен примерный план возможного дизайна.Я не знаю деталей вашего проекта, поэтому я делаю много предположений.Если вы используете S3, вы можете использовать клиент boto .Но перед этим убедитесь, что все файлы в вашей корзине закрыты.Получите ключ доступа для своего приложения, чтобы вы могли выполнять вызовы API для S3.Затем, получив все это, вы можете сделать что-то вроде этого:

Создать новое приложение videofile и определить модель VideoFile:

import boto3 as boto
from django.conf import settings
from django.db import models

class VideoFile(models.Model):
    owner = models.ForeignKey(settings.AUTH_USER_MODEL)
    name = models.CharField(max_length=75)
    content_key = models.CharField(max_length=200, unique=True)

    def generate_download_url(self, ):
        s3 = boto.client('s3')
        url = s3.generate_presigned_url(
            ClientMethod='get_object',
            Params={
                'Bucket': settings.S3_BUCKET_NAME,
                'Key': self.content_key
            }
        )
        return url

    def __str__(self):
        return self.name

Что это делает?Он создает таблицу, в которой хранятся идентификаторы файлов S3 (в столбце content_key), и каждый файл имеет owner, который является внешним ключом для объекта User в приложении django.generate_download_url генерирует предварительно назначенные URL, срок действия которых истекает через некоторое время.

Чтобы загрузить новое видео на S3, возможно что-то вроде:

def create_document(file_object, key_name, owner):
    try:
        s3 = boto.resource('s3')
        s3.Object(settings.S3_BUCKET_NAME, key_name).put(Body=file_object)
    except Exception, err:
        print("Could not create object in s3")
        return
    video_file = VideoFile.objects.create(owner=owner, name=file_object.name, content_key=key_name)
    return video_file

Наконец, вы можете выполнить "is_friend_of ()"отметьте соответствующий вид DRF и верните временный URL.

class FileStreamUrl(APIView):
    def get(self, request):
        my_man = User.objects.get(...)
        if request.user.is_friend_of(my_man):
            video_file = some_user.objects.video_file_set.filter(...)
            url = video_file.generate_download_url()
            return Response(url)
        else:
            return Response(status=403) # Forbidden
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...