直接播放 ed2k 连接有什么技术难点?

2014-10-07 15:22:46 +08:00
 cevincheung
在假设没有“冷门”资源,以及有海量活跃服务器的前提下。
9855 次点击
所在节点    奇思妙想
39 条回复
jerryjhou
2014-10-07 20:52:26 +08:00
@cevincheung 你如何做到实时转码?流媒体格式就那么几种
yaoye0o
2014-10-07 20:53:51 +08:00
我一般都离线到百度云然后在线看
jerryjhou
2014-10-07 20:55:37 +08:00
@cevincheung 而且你这样无意义啊,这种东西就是要下载转码后缓存,相同资源的不同版本不必进行重复下载和转码(这就需要内容识别,对付非法资源也需要)
cevincheung
2014-10-07 20:58:26 +08:00
@yaoye0o emule未下载完的文件可以直接用vlc播放,我尝试过各种格式了,avi/mkv/rm(vb)/wmv都可以的。
jsq2627
2014-10-07 21:26:25 +08:00
@jerryjhou 主流编码都可以实时解码的。不是说非得要整个文件才能解码,视频编码后都是按照时间顺序写入文件的,只要有文件的一部分,就能解码播放这部分内容。

流媒体: http://en.wikipedia.org/wiki/Streaming_media

Protocols

The audio stream is compressed using an audio codec such as MP3, Vorbis or AAC.

The video stream is compressed using a video codec such as H.264 or VP8.

Encoded audio and video streams are assembled in a container bitstream such as MP4, FLV, WebM, ASF or ISMA.

The bitstream is delivered from a streaming server to a streaming client using a transport protocol, such as MMS or RTP. Newer technologies such as HLS, Microsoft's Smooth Streaming, Adobe's HDS and finally MPEG-DASH have emerged to enable adaptive bitrate streaming over HTTP as an alternative to using proprietary transport protocols.

The streaming client may interact with the streaming server using a control protocol, such as MMS or RTSP.

我感觉你还没明白楼主在说什么问题。
给一个ED2K链接,如何能实现边下边播?
ED2K链接里本身含有文件的Hash,所以先要连接ED2K服务器(比如 TV Underground 等等,用过emule的话应该会熟悉这个服务器列表更新地址 http://ed2k.2x4u.de/index.html ),把Hash提交给服务器后,服务器会返回这个文件的 Peers,然后再连接每个 Peer,接受文件数据块。但是这样接受到的文件块不是从头开始连续的,为了实现边下边播,需要等文件最开头的块下载好一部分之后,交给解码器来解码,这时候视频才能开始播放。但是下载速度如果不够快,顺序解码的时候遇到了还没下完的块时,视频就得卡了,得等待这些块下载好后才能继续解码播放。
你说的相同资源的不同版本,本身它们就是不同的文件,Hash都不一样的,下载一个文件的时候不可能下到另一个文件的数据的。
jerryjhou
2014-10-07 21:49:05 +08:00
@jsq2627 很显然他是要在线播放,这就意味着需要重新编码。难道同样的视频播一次转码一次?
jerryjhou
2014-10-07 21:52:18 +08:00
@jsq2627 除非他能拥有无限的计算能力,网络带宽和存储空间
ryd994
2014-10-07 22:37:24 +08:00
@cevincheung 那是你下的足够多的前提下,解码器在没下到的地方硬撑过去了。
如果是刚开始没多久的下载你试试看?
ed2k根本就不是顺序下载。
binux
2014-10-07 22:41:58 +08:00
ed2k 为什么不能从开始的地方开始下,优先请求靠前的分片不就完了
有 ed2k的lib + libvlc 直接就开工做了
cevincheung
2014-10-07 22:58:01 +08:00
@jsq2627
@binux
恩,顺序下载是个问题。解决这个问题就好办,
ed2k是按照每9500kb为一个part下载,在播放/快进/拖动的过程中,要定位到当前时间需要下载的是哪个part,然后去请求这个part,一个part约合为10MB的一个文件。然后还要考虑到credits的问题。总不能你自己只索取不提供- -#
jsq2627
2014-10-07 23:34:33 +08:00
@jerryjhou 原来说的是在线播放,我理解成像迅雷一样的边下边播功能了。
这么说像迅雷云播、百度云在线播放到底是每个视频都转码了?还是有什么方法解决这个问题了?很好奇。
binux
2014-10-07 23:34:55 +08:00
@cevincheung 有文件头就能算出来了(貌似),所以开始的部分非常重要。
请求哪个分片是客户端指定的,优先下哪个随意控制,快进就跳分片下载就可以了。
下完的分片,或者持续做种是个策略问题,和播放器没关系。

所以说没有难点
Biwood
2014-10-08 01:09:25 +08:00
视频转码要耗费大量的服务器资源,成本可能有点高
cevincheung
2014-10-08 01:50:09 +08:00
@Biwood 服务器不参与。全靠peers
mengzhuo
2014-10-08 09:10:58 +08:00
迅雷会员
要钱而已~
mengskysama
2014-10-08 10:29:36 +08:00
有人在BT上实现了http://www.v6speed.org/v6Speed/ 但是貌似没有开源,他这个实现原理也很简单就是控制分块优先级,不过你这个假设根本不成立,现在ed2k很多资源都是稀缺资源。
jerryjhou
2014-10-08 10:45:10 +08:00
@jsq2627 会根据文件名和图像识别避免重复下载累死内容,但你说的对,都要转码,还需要排队
cevincheung
2014-10-08 18:14:23 +08:00
@jerryjhou hash标识内容。视频不需要转码,这不是在网页上使用webplayer播放,是在本地播放,libvlc可以直接播放。
spark
2014-10-11 09:00:51 +08:00
Popcorn time

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/137406

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX