【问题标题】:jwpayer captions on IOS fullscreen with dynamically generated captions fileIOS全屏上的jwpayer字幕,带有动态生成的字幕文件
【发布时间】:2016-05-12 08:13:28
【问题描述】:

问题:如果我使用动态生成的 .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

如果上述问题没有任何意义,那么我面临的问题的详细信息是:由于 IOS(iphone 和 ipod)强制用户可以全屏查看视频。

对于我们的用例,我们动态生成字幕文件。我们提供字幕文件的方式如上所述:

如果我没记错的话,webvtt(即 .vtt)文件是一个简单的纯文本,其中包含有关视频的多种类型的信息。因此,在我们的案例中,我们动态生成它并通过 url 提供它,在我们之前讨论的案例中,我们可以看到类似的 here。虽然,我我们“直接使用 .vtt 文件”它可以工作,但考虑到我的应用程序的架构,我不想这样做。但这不是类似于像静态文件一样提供服务吗?我们不是已经这样做了吗?因此,请牢记一切,最好以尽可能少的更改来解决此问题的最干净的方法是什么。我假设也许我错过了一个标题或可以使它工作的东西。是这样吗?

与问题相关的更多细节可能会更清楚地说明问题:

来自 jwplayer 支持的链接: https://support.jwplayer.com/customer/portal/articles/1407438-adding-closed-captions

来自苹果支持带有 hls 的字幕的链接: https://developer.apple.com/library/ios/qa/qa1801/_index.html

我在此基础上做了一些实验:

在深入挖掘之后,我们还为EXT-X-STREAM-INF 标签添加了CLOSED-CAPTIONS 属性,但我们仍然看不到想要的结果 我们最终使用的示例master.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

我还附上了上述两个案例中两个请求的镜头细节。 我已经坚持了很长时间。任何对此有所了解的人请分享。如果您可以分享代码 sn-p 或某种工作示例,那就太好了。谢谢

【问题讨论】:

标签: ios django captions closed-captions jwplayer7


【解决方案1】:

为了使字幕与 JW Player(包括在 iDevices 上)保持一致,您需要确保以下几点:

  1. 您使用的是 JW 7.3+;
  2. 字幕文件是一个有效的 WebVTT 文件 - 最好是“text/plain”mime 类型;
  3. 字幕文件打开了相关的 CORS 标头(“Access-Control-Allow-Methods”和“Access-Control-Allow-Origin”) 允许来自请求域的 GET 访问,或者文件是 托管在与播放器软件相同的域中;
  4. 字幕文件 URL 以“.vtt”结尾- 由于 JW 编码有些草率,iOS 需要这样做

或者您可以考虑为 JW Player 添加我的 iOS 字幕插件,它克服了这些问题,支持 iOS 中的 JW 字幕样式块,并且也适用于早期的 JW 版本:http://dev.powered-by-haiku.co.uk/solutions/jwioscaptions/

【讨论】:

  • 嘿@jherrieven 我使用的是 JW 7.4.2,我使用的是有效的 WebVTT,可以在此处验证 quuz.org/webvtt。此外,我正在从同一个域发出请求,但我想在这种情况下它不是托管的,我们创建了文件并将其发送到前端。在这两种情况下,我的字幕文件都以 .vtt 结尾,我也尝试了该插件,尽管它存在语法问题,但我查看了页面上嵌入的视频的 js 代码,语法正确,但仍然没有解决我的问题。我过段时间再给大家分享一个实例,方便大家调试
  • 嗨。如果您的 VTT 的 URL 与您在上面的链接 (preproduction.indee.tv/captions/16885) 相同,那么它不会以“.vtt”结尾,因此不适用于 iOS 上的 JW。
  • URL 是否也应该以 .VTT 结尾?只是图片中屏幕截图中显示的文件名?
  • 我在本地使用了这个网址,而不是“/captions/16885/captions.vtt”,并使用相同的 django 代码为其提供服务,但仍然是同样的问题。同样,如果我使用物理文件,它会起作用。那么还有什么我可以玩的东西,看看它是否有用,请告诉我,谢谢你的时间
  • 这是我使用您提供的代码 sn-ps 整理的示例 - 使用原始 JW 示例,但链接到您的 VTT 文件。我不得不代理您的文件以克服 CORS 问题,如果我最后不包含虚假的“.vtt”,它将无法在 iOS 中工作,即使提供的文件完全相同。你能检查一下,看看它是否适合你吗? dev.powered-by-haiku.co.uk/debug/aameer
猜你喜欢
  • 2017-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-21
  • 1970-01-01
  • 1970-01-01
  • 2020-04-14
相关资源
最近更新 更多