iOS上的HTTP直播流技术

12

我的应用被苹果拒绝,并且他们给了一个原因:

我们发现你的应用没有使用基线流为64 kbps的HTTP Live Streaming协议来广播流视频

然后我在互联网上搜索解决方案,所有的解决方案都建议我使用 .U8F8 和 .ts 扩展名进行直播流,但我的应用程序是 mp4 格式。我已经使用了 MPMoviePlayerController 进行流媒体。

所以我的问题是:

  1. 我需要将 MP4 视频转换为 M8U8 吗?
  2. 我需要使用 MPMoviePlayer 吗?
  3. 我是否可以在运行时将 MP4 视频转换为 M8U8 格式,并如何实现直播流?
  4. 是否有可用于 HTTP 直播流的示例代码?

提前感谢您的帮助。


请问您的应用程序是发送实时视频还是查看实时视频?如果是查看,您对视频流源有多少控制权? - vipw
2
我的应用程序具有视频观看功能,视频大约为1到1.30小时长,并具有mp4格式。当我将应用程序提交给苹果时,我使用了MPMovieplayer,但现在根据苹果的要求,我必须使用HTTP Live流协议,并且为了实现这一点,我必须将我的视频URL从mp4格式更改为m3u8格式,那么如何将我的视频URL从mp4格式转换为m3u8格式,以及当我获得m3u8 URL时如何在我的应用程序中播放。谢谢vipw。 - Nikh1414
嗨Nikh,我正在寻找相同的开发。 我有Wowza流媒体引擎和iOS Media lib,不知道如何从Media lib iOS项目中将视频帧流式传输到Wowza以进行实时流媒体。 你能分享样例代码吗? - Stella
3个回答

11

我只能就预先录制的视频进行评论,无法针对直播流做出评论...

我是否需要将mp4视频转换为M8U8格式?

我认为你指的是.m3u8格式。基本上,你需要将自己的.mp4文件进行以下操作:

  1. 将其编码为适合移动带宽的友好比特率。你可以使用苹果的Compressor应用程序来完成此操作,它具有HTTP Live Streaming的预置选项。如果你想探索一下,请选择大约1000kbps左右的比特率。

  2. 使用Apple的mediafilesegmenter将其切片处理。你最终会得到许多小的.ts文件和一个清单(.m3u8)文件,其中列出了这些文件。

  3. 在你的播放器中点击.m3u8文件(initWithContentURL...),然后就可以开始播放了。

  4. 重复上述步骤1和2,并指定不同的比特率。我们采用了Compressor中的预设值。

  5. 你将获得视频的不同版本,每个版本都有一个带宽,使用Apple的variantplaylistcreator工具创建一个主播放列表文件,该文件将引导你的播放器指向每个带宽,以便它可以自动切换。

  6. 将所有的.ts文件和.m3u8文件放在网络上,并使用mediastreamvalidator工具检查你的主播放列表文件是否正确,并正确指向每个版本。

确保在主播放列表文件中首先包含一个体面的质量比特率,因为这是首先播放的版本。我们采用了大约1000kbps左右的比特率。

我是否需要使用MPMoviePlayer?

我无法评论其他库,我们使用了MPMoviePlayer。

我能否在运行时将mp4视频转换为M8U8格式,以及如何实现直播流

你可以针对直播流进行转换,但是对于预先录制的视频,请在所有操作之前完成。将所有文件放在网上,在使用主.m3u8文件播放视频之前,验证你的播放列表(.m3u8)并进行播放。

是否有可用于HTTP实时流的示例代码?

在我们的实现中,iOS客户端完成了所有工作(例如根据可用带宽切换流)。因此,您只需要确保事先将所有文件放置在正确的位置。

压缩器 - https://www.apple.com/final-cut-pro/compressor/ 媒体文件分段器和媒体流验证器工具是命令行工具,可从苹果开发者网络网站下载。

这些文章包含您需要了解的所有内容: https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/StreamingMediaGuide/Introduction/Introduction.html https://developer.apple.com/library/archive/technotes/tn2288/_index.html#//apple_ref/doc/uid/DTS40012238

在Safari中打开此链接: https://developer.apple.com/streaming/examples/advanced-stream.html - 每个“Gear”都是不同的比特率流

在文本编辑器中打开此.m3u8文件,以获取示例主播放列表文件:https://devimages.apple.com.edgekey.net/resources/http-streaming/examples/bipbop_16x9/bipbop_16x9_variant.m3u8


嗨,Hem,我正在寻找相同的开发。我有Wowza流媒体引擎和iOS Media lib,不知道如何从Media lib iOS项目中将视频帧流式传输到Wowza以进行实时流媒体。你能分享一下示例代码吗? - Stella

2
如果您的MP4文件长度超过10分钟,则需要使用HLS来流式传输文件。
对于直播流,您可以使用此类软件进行实时编码: http://www.mcommstv.com/products/mcomms-transcode 如果是VoD文件,则使用您喜欢的H.264 / AAC编码器进行预编码。
记得包括多个比特率版本的文件,包括64kbps。如果不包括64kbps流,则苹果将拒绝该应用程序。我们通常使用: 64k 120k 240k 480k 800kbps 1200kbps 在您的多速率m3u8文件中首先列出的比特率将在前30秒内播放,因此请首先放置一个中等比特率,以便在用户处于缓慢的3G网络上时不会花费太长时间开始流式传输。以下是一个示例:
#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=120000
120k/Playlist.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=60000
60k/Playlist.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=240000
240k/Playlist.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=480000
480k/Playlist.m3u8

1
我们需要将任何音频文件转换为m3U8格式。
运行时我找不到任何插件。我搜索了一下。 我们可以使用Video标签在HTML5中播放这个URL。 我们还可以上传点播视频。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接