首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Java后端播放视频

从Java后端播放视频
EN

Stack Overflow用户
提问于 2014-05-10 08:53:43
回答 1查看 3.3K关注 0票数 3

我想知道大多数多媒体Java商店是如何处理视频流的。假设我想要建立一个网站,其中有一个页面可以使用HTML5视频播放器,如下所示:

代码语言:javascript
复制
<html>
    <head>
        ...
    </head>
    <body>
        ... content up here

        <video width="500" height="500" controls="controls" src="path/to/video.mp4" />

        ... more content down here
</html>

假设这个页面的网址是http://myapp.example.org/video。当/video路径的HTTP请求到达myappp.example.org服务器时,我想我有几个选项:

  • 将请求路由到web应用服务器(Tomcat/Jetty),并尝试研究如何使用纯Java直接从该服务器流video.mp4视频;或
  • 将请求路由到媒体服务器,然后将video.mp4从该媒体服务器直接流回客户端;或。
    • 在这方面,我听说过像Red5或Wowza这样的服务器

  • 将请求路由到媒体服务器(同样是Red5/Wowza),并以某种方式通过充当中间人的web应用服务器流video.mp4

我可能知道还有其他选项(在这种情况下,是什么?)。我的问题:

A/V流通常是如何从Java后端后面处理的?

EN

回答 1

Stack Overflow用户

发布于 2014-05-10 14:19:35

去任何像纽约时报这样的大媒体网站调试他们的播放器..。

例如“纽约时报”的头版在左下角有视频链接,一个包装的播放器.

撕开它,看着它播放与宿主页面的标记分离的媒体。

代码语言:javascript
复制
<div class="videoOverlayDiv" id="1399731372442_nytd_vid_player_1399731372442_nytd_vid_player-posterImageContainer" style="cursor: pointer; width: 100%; height: 100%;"><img src="http://graphics8.nytimes.com/images/2014/05/09/multimedia/0511billcunningham/0511billcunningham-videoSmall.jpg" width="100%" height="100%"></div>

-编辑--大多数媒体网站在播放器UI中使用两个步骤的过程。

  1. 显示一个iframe/div和player控件,从媒体目录包装一个特定的CID,然后等待像PLAY这样的控制事件
  2. 在播放时,JS将请求一个流,JS player将在该流上start.PLAY。

如果是的话,那就假设你的问题是req。#2是“我的java后端如何处理req #2中的流?”

这里的答案是,Java应该无关紧要,因为对于apache2/nginx这样的正常后端,您对媒体CID的第二个数据请求可以包含一个HTTP头,它将告诉S3的任何服务器对响应进行编码,这样媒体就适合流,所以JS客户端就可以播放它……详情如下:

代码语言:javascript
复制
0000: GET /09d82830-ec2d-40b4-bb14-944728550685/9e896164-95a0-4f62-ae6
0040: b-4b55b2aef006-20140508152306.flac HTTP/1.1
006d: User-Agent: curl/7.28.1-DEV
008a: Host: files.parse.com
00a1: Accept: */*
00ae: Accept-Encoding: chunke    0000: GET /09d82830-ec2d-40b4-bb14-944728550685/9e896164-95a0-4f62-ae6
0040: b-4b55b2aef006-20140508152306.flac HTTP/1.1
006d: User-Agent: curl/7.28.1-DEV
008a: Host: files.parse.com
00a1: Accept: */*
00ae: Accept-Encoding: chunked
00c8: 
<= Recv header, 17 bytes (0x11)
0000: HTTP/1.1 200 OK
<= Recv header, 78 bytes (0x4e)
0000: x-amz-id-2: BuOgfHtRGjdrHeFaVhz9a4bhJ+LYnvUWxa0dYbxkxe7XL5UUm86F
0040: Z1qIosQXhXan
<= Recv header, 36 bytes (0x24)
0000: x-amz-request-id: B5FEA3C5231DC8A7
<= Recv header, 37 bytes (0x25)
0000: Date: Sun, 11 May 2014 17:03:12 GMT
<= Recv header, 46 bytes (0x2e)
0000: Last-Modified: Thu, 08 May 2014 22:23:14 GMT
<= Recv header, 52 bytes (0x34)
0000: x-amz-version-id: CvsKD0cAtBt9KrDqTdFwXxt.JMcBZ.pF
<= Recv header, 42 bytes (0x2a)
0000: ETag: "03e492b2d4c3518e6d09a3a37c61565e"
<= Recv header, 22 bytes (0x16)
0000: Accept-Ranges: bytes
<= Recv header, 23 bytes (0x17)
0000: Content-Type: image/*
<= Recv header, 23 bytes (0x17)
0000: Content-Length: 87357
<= Recv header, 18 bytes (0x12)
0000: Server: AmazonS3
<= Recv header, 2 bytes (0x2)
0000: 
<= Recv data, 1064 bytes (0x428)
0000: fLaC..."...........b ...&.G..-.....J...#.O...&....reference libF
0040: LAC 1.2 20070917..........L...............5....y..i.(...........
0080: ...........................................d.......8...b....`...
00c0: ....UUUUUP.q..@..(.....A.0(.....AaP.|....I........@..XT.1... .H<
0100: :......(.....@ .......A$..].....;)B...=......(q..m...()P.P`.(H..
0140: ....(...U..=..Fyc,8W..d..{.....0n..$.......-6...(.m+.>....?.e...
0180: b>...|I)Xh...Q....%!.?J@.B1\*r...<.n..Gh...O.3.../..iS'.fX..o.(.
01c0: .&Xq&...{V..!..q....bR$.iVN3.E.I...".._.ED"I.>$.....@X...p@...
0200: L.#..........Cb6.E6...Wku..V.)......:o..g...SQ....R...#D....c.D
0240: ...hr.0.3>...:.,`....A..5.D..T..$.......m.......|.E.,f/..C.i.#..
0280: q.};...>.R.....].!..=/....=b.....%(.ds.....p.....1+...c...rp.[..
02c0: BQ'. ..H8....D0.&GBr.a}!.e&..}..*.f.._..e..K..,....f......X..\.[
0300: eK$.J....t..V%C.l.$n8P..^...T..h.*......Q....#...@..[Zv..(.... 
0340: ....J.;/..T.....dc..G...T.v...Q......N....C&[......L.N.!{... .KJ
0380: 7Z.. .[..}5.v,Q)#..@w...d....U..).[r...r.......E>.!..JsH!;.,./..
03c0: .E.\.L........../..+..F.A....9C..d....5.bso.q.j.HL...........r..
0400: 9....|.....dFk.e..F......=.....M6V..b'..
<= Recv data, 1460 bytes (0x5b4)
0000: sx%..1....>.Cu, S05>..K.f.Mz.g]..t:i..Z.=.&\......X........KK...
0040: .d.j..|q'7.<..U\$o.2....K..b.ZVn';L.RO.C....!..A&..&n.?B.......
0080: ..\g.."....%.O....p..}.Uf....xvIr..=ba_..t..0.L-...+h.........i.
00c0: WwD.4...Q)....4c.7.zN....._9..c..."...F.*.Jq.....]...e*...).$.P.
0100: ...Us.....6.........'.t......(J....:.....92..B.Y5..y8.:....!\..D
0140: ...;$...>L..4...L.....s...E..4k.T...}.g..R.m.Q.a.4.7I.x....O....
0180: ..(....:T..r........./,.$i......|........0.....7..f."......y].Md
00c8: 
<= Recv header, 17 bytes (0x11)
0000: HTTP/1.1 200 OK
<= Recv header, 78 bytes (0x4e)
0000: x-amz-id-2: BuOgfHtRGjdrHeFaVhz9a4bhJ+LYnvUWxa0dYbxkxe7XL5UUm86F
0040: Z1qIosQXhXan
<= Recv header, 36 bytes (0x24)
0000: x-amz-request-id: B5FEA3C5231DC8A7
<= Recv header, 37 bytes (0x25)
0000: Date: Sun, 11 May 2014 17:03:12 GMT
<= Recv header, 46 bytes (0x2e)
0000: Last-Modified: Thu, 08 May 2014 22:23:14 GMT
<= Recv header, 52 bytes (0x34)
0000: x-amz-version-id: CvsKD0cAtBt9KrDqTdFwXxt.JMcBZ.pF
<= Recv header, 42 bytes (0x2a)
0000: ETag: "03e492b2d4c3518e6d09a3a37c61565e"
<= Recv header, 22 bytes (0x16)
0000: Accept-Ranges: bytes
<= Recv header, 23 bytes (0x17)
0000: Content-Type: image/*
<= Recv header, 23 bytes (0x17)
0000: Content-Length: 87357
<= Recv header, 18 bytes (0x12)
0000: Server: AmazonS3
<= Recv header, 2 bytes (0x2)
0000: 
<= Recv data, 1064 bytes (0x428)
0000: fLaC..."...........b ...&.G..-.....J...#.O...&....reference libF
0040: LAC 1.2 20070917..........L...............5....y..i.(...........
0080: ...........................................d.......8...b....`...
00c0: ....UUUUUP.q..@..(.....A.0(.....AaP.|....I........@..XT.1... .H<
0100: :......(.....@ .......A$..].....;)B...=......(q..m...()P.P`.(H..
0140: ....(...U..=..Fyc,8W..d..{.....0n..$.......-6...(.m+.>....?.e...
0180: b>...|I)Xh...Q....%!.?J@.B1\*r...<.n..Gh...O.3.../..iS'.fX..o.(.
01c0: .&Xq&...{V..!..q....bR$.iVN3.E.I...".._.ED"I.>$.....@X...p@...
0200: L.#..........Cb6.E6...Wku..V.)......:o..g...SQ....R...#D....c.D
0240: ...hr.0.3>...:.,`....A..5.D..T..$.......m.......|.E.,f/..C.i.#..
0280: q.};...>.R.....].!..=/....=b.....%(.ds.....p.....1+...c...rp.[..
02c0: BQ'. ..H8....D0.&GBr.a}!.e&..}..*.f.._..e..K..,....f......X..\.[
0300: eK$.J....t..V%C.l.$n8P..^...T..h.*......Q....#...@..[Zv..(.... 
0340: ....J.;/..T.....dc..G...T.v...Q......N....C&[......L.N.!{... .KJ
0380: 7Z.. .[..}5.v,Q)#..@w...d....U..).[r...r.......E>.!..JsH!;.,./..
03c0: .E.\.L........../..+..F.A....9C..d....5.bso.q.j.HL...........r..
0400: 9....|.....dFk.e..F......=.....M6V..b'..
<= Recv data, 1460 bytes (0x5b4)
0000: sx%..1....>.Cu, S05>..K.f.Mz.g]..t:i..Z.=.&\......X........KK...
0040: .d.j..|q'7.<..U\$o.2....K..b.ZVn';L.RO.C....!..A&..&n.?B.......
0080: ..\g.."....%.O....p..}.Uf....xvIr..=ba_..t..0.L-...+h.........i.
00c0: WwD.4...Q)....4c.7.zN....._9..c..."...F.*.Jq.....]...e*...).$.P.
0100: ...Us.....6.........'.t......(J....:.....92..B.Y5..y8.:....!\..D
0140: ...;$...>L..4...L.....s...E..4k.T...}.g..R.m.Q.a.4.7I.x....O....
0180: ..(....:T..r........./,.$i......|........0.....7..f."......y].M

请注意请求标题中的“接受-编码”。

另外,请注意,stdapache2/nginx响应将如您所见-一个没有内容长度头的流响应。这是一条小溪。如您所见,流中的前两个块的长度为1064,1460。

您只需让Http成为您的朋友,并在您的请求中得到一个只有一个标头的流响应。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23579040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档