2015-10-14 49 views
1

场景我正在研究使用RTPlayer从我们的服务器播放预先录制的视频和音频的应用程序。Objective-C:将浮点数转换为int64_t,不会造成精确损失

可疑 RTPlayer有2个有用的属性; .initialPlaybackTime.currentPosition,用于计算以秒为单位的媒体时间位置。 .initialPlaybackTime设置媒体播放器应从哪里开始播放,而.currentPosition则告诉您在什么地方继续播放媒体中的相同位置。

问题.initialPlaybackTime属性是int64_t型的,并且是.currentPositionfloat类型。当我将“.currentPosition”值“插入”.initialPlaybackTime时,总是会有8-10秒加到到玩家的位置。

问题我怎么能转换.currentPositionfloat值到int64_t,并保持相同的值?

+0

你确定'currentPosition'没有错吗?最好给出一个float值的例子,然后在你的问题中输出int64_t值。如果这些值是秒,浮点数和int64_t应该是最好的6位数字,而不会损失任何精度。我怀疑“currentPosition”比你认为出于某种原因的地方晚了8-10秒。 –

回答

1

“8-10秒被添加到玩家的位置”可能与底层的HTTP Live Streaming (HLS) technology有关。

如果你正在播放的媒体是流媒体,很可能它符合这项技术,如果是这样,将被分成几个较小的媒体块(我的经验是,这通常是约15秒的视频)在各种比特率。

在这种情况下,除非initialPlaybackTime设置为与其中一个媒体片段的开始时间一致的值,否则播放器可能只使用最近的媒体片段并跳到该片段的开头(通常的做法),或者如果它接近当前分段的末尾,则减少下一个分段,以减少在没有播放的情况下加载完整分段的媒体数据。

+0

播放列表索引比浮点精度更可能。 – danh

+0

感谢您的回答Thuggish!实际上,我们也会使用直播流媒体,不过,这个特定的m3u8网址只是一个预先录制的视频。不是直播。你仍然认为这是问题? –

+0

@BrandonA你需要看看'RTPlayer'类的实现,或者向创建者询问它是否知道,因为我怀疑它是有记录的细微差别。但是根据我与其他玩家的经验,当尝试在媒体文件/ steam /等中设置确切的开始时间时,这些是常见的陷阱。取决于预先录制的视频如何编码,时间可能与视频数据中的关键帧一致。从StackOverflow角度来看,只有很多未知数。 –