问题:如果我使用动态生成的 .ass 文件(详细说明如下)。我是否需要设置任何参数来模拟我的服务器上存在的物理 .ass 静态文件的行为,该文件可以与 django 一起使用?
现在实际的问题是关于在上下文中使用 .ass 文件作为带有 jwplayer 的字幕文件。
简而言之,我的问题是我是否有一个名为 captions.vtt 的文件,其内容如下:
WEBVTT
00:00:03.000 --> 00:00:06.000
<v Roger Bingham>We are in New York City
00:00:13.000 --> 00:00:16.000
<v Roger Bingham>We're actually at the Lucern Hotel, just down the street
我在 django 中生成这样的内容:
#url which generated and returns captions file
urlpatterns += patterns('apps.mymodel.views',
url(r'^captions/(?P<pk>[0-9a-zA-Z]+)/$', 'captions_view',name='captions'),
)
#this view is responsible for creating .vtt files on go and returning them
def captions_view(request,pk):
"""
To Avoid multiple caption files for html5 players we use cap.vtt
as a template and then pass the text onwards.Note the cap.vtt has the approx
time for which caption should be visible,
To fix the issue with the iphone captions trying it as file download and assigning content type
"""
print('In the captions view')
myobj = Myobj.objects.get(pk=pk)
watermark_text = myobj.watermark_text
from django.template import Context
from django.template.loader import get_template
from django.http import HttpResponse
captions_context = Context(dict(text=text))
captions_body = get_template('home/cap.vtt').render(captions_context)
mimetype = "text/vtt"
response = HttpResponse(captions_body, content_type=mimetype)
response["Content-Disposition"]= "attachment; filename=capt.vtt"
#return render_to_response('home/cap.vtt',{'watermark_text':watermark_text})
return response
#template for .vtt ( name for the template is home/cap.vtt)
WEBVTT
00:00:00.000 --> 00:00:02.000
<v Roger Bingham>We are in New York City
00:00:03.000 --> 03:00:00.000
{{text}}
the output in this case would be say something like
WEBVTT
00:00:00.000 --> 00:00:02.000
<v Roger Bingham>We are in New York City
00:00:03.000 --> 03:00:00.000
woouf
如果上述问题没有任何意义,那么我面临的问题的详细信息是:字幕不会显示在 iphone 全屏(ios 设备)上,因为 IOS(iphone 和 ipod)强制用户检查全屏视频。
对于我们的用例,我们正在动态生成字幕文件。我们提供字幕文件的方式如上所述:
如果我没记错的话,webvtt(即 .vtt)文件是一个简单的纯文本,其中包含有关视频的多种类型的信息。因此,在我们的案例中,我们动态生成它并通过 url 提供它,在我们之前讨论的案例中,我们可以在这里看到类似的。虽然,我我们“直接使用 .vtt 文件”它可以工作,但考虑到我的应用程序的架构,我不想这样做。但这不是类似于像静态文件一样提供服务吗?我们不是已经这样做了吗?因此,请牢记一切,最好以尽可能少的更改来解决此问题的最干净的方法是什么。我假设也许我错过了一个标题或可以使它工作的东西。是这样吗?
与该问题相关的更多细节可能会更清楚地说明该问题:
来自 jwplayer 支持的链接:https: //support.jwplayer.com/customer/portal/articles/1407438-adding-closed-captions
苹果支持带有 hls 的字幕的链接: https ://developer.apple.com/library/ios/qa/qa1801/_index.html
我基于此做了一些实验:
在深入挖掘之后,我们还CLOSED-CAPTIONS
为标签添加了属性,EXT-X-STREAM-INF
但我们仍然看不到.m3u8
我们最终使用的所需结果示例主文件如下:
#EXTM3U
#EXT-X-MEDIA:TYPE=CLOSED-CAPTIONS,GROUP-ID="cc"
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1075000,RESOLUTION=640x360,CODECS="avc1.42001e,mp4a.40.2",CLOSED-CAPTIONS="cc"
4610_360.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1692000,RESOLUTION=854x480,CODECS="avc1.42001f,mp4a.40.2",CLOSED-CAPTIONS="cc"
4610_480.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2874000,RESOLUTION=1280x720,CODECS="avc1.42001f,mp4a.40.2",CLOSED-CAPTIONS="cc"
4610_720.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=4623000,RESOLUTION=1280x720,CODECS="avc1.420028,mp4a.40.2",CLOSED-CAPTIONS="cc"
4610_1080.m3u8
我们也尝试过:
#EXTM3U
#EXT-X-MEDIA:TYPE=CLOSED-CAPTIONS,GROUP-ID="cc",NAME="CC1",LANGUAGE="en",DEFAULT=YES,AUTOSELECT=YES,INSTREAM-ID="CC1"
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1075000,RESOLUTION=640x360,CODECS="avc1.42001e,mp4a.40.2",SUBTITLES="subs",CLOSED-CAPTIONS="cc"
4610_360.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1692000,RESOLUTION=854x480,CODECS="avc1.42001f,mp4a.40.2",SUBTITLES="subs",CLOSED-CAPTIONS="cc"
4610_480.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2874000,RESOLUTION=1280x720,CODECS="avc1.42001f,mp4a.40.2",SUBTITLES="subs",CLOSED-CAPTIONS="cc"
4610_720.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=4623000,RESOLUTION=1280x720,CODECS="avc1.420028,mp4a.40.2"SUBTITLES="subs",CLOSED-CAPTIONS="cc"
4610_1080.m3u8
我想确认我们是否正在构建用于自适应流媒体的主文件?但这并不成立,因为 .mp 视频面临着同样的问题,如果 hls 是一个问题,这不应该是这种情况。
虽然此示例使用相同的播放器有效:
以这种方式设置您的 VTT 文件,使用相同的播放器:
http://qa.jwplayer.com/~heidi/cc_indee_test.html http://qa.jwplayer.com/~heidi/beautifulmind.vtt
我还附上了上述两种情况下两个请求的镜头细节。 我已经坚持了很长时间。任何对此有所了解的人请分享。如果您可以分享代码片段或某种工作示例,那就太好了。谢谢