[英]How to use Django Rest API for Video streaming Android application?
我正在构建一个应用程序,用于上传和存储用户生成的视频内容,并且他的网络中的少数人可以访问该内容。 我正在为此编写一个基于 Django 的 REST API。
我必须探索如何在 Android 应用程序中流式传输视频内容并了解 Exoplayer。 但它要求运行视频文件的 URL。 我不想公开 URL(如果他知道 URL,任何人都可以访问),而是我想首先对用户进行身份验证并检查他是否有权访问,然后只让人们流式传输该视频。 所以,我一直在搜索,但找不到如何在 Exoplayer 或任何媒体播放器中输入获取请求的方法。
有人可以帮我指向相同的文档。 基本上,我将在 Django 中工作以获取所需的视频文件。 另外,我是否需要从服务器端做一些不同的事情来处理这个问题。
编辑:另外,我想知道我是否在 Django Rest API 中返回完整文件,如果我在尚未下载的播放器上寻找时间,Exoplayer(或任何其他播放器)是否能够流式传输。 基本上,如果 API 一次返回整个文件,这些播放器会管理搜索部分吗?
提前致谢。
以下是可能的设计的粗略轮廓。 我不知道你项目的细节,所以我做了很多假设。 如果您使用的是 S3,您会想要使用boto客户端。 但在此之前,请确保存储桶中的所有文件都是私有的。 为您的应用程序获取访问密钥,以便您可以对 S3 进行 API 调用。 然后,一旦你拥有了这一切,你就可以这样:
创建一个新的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 文件 ID(在content_key
列中)的表,每个文件都有一个owner
,它是 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
最后,您可以在适当的 DRF 视图中执行“is_friend_of()”检查并返回临时 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.