HTTP LIve Streaming

Mik*_*ens 54 video-streaming http-live-streaming ios

好吧,我一直试图围绕这个http直播流媒体.我只是不明白,是的,我已经阅读了所有的苹果文档并观看了wwdc视频,但仍然非常困惑,所以请帮助一个想成为一个程序员!

你写的代码在服务器上?不是在xcode?如果我是对的,我如何设置它?我需要在服务器上设置一些特殊的东西吗?喜欢php还是什么?如何使用Apple .. segmenter等提供的工具?

请帮帮我,谢谢

Jan*_*ano 133

HTTP直播

HTTP Live Streaming是Apple提出的流媒体标准.查看最新的标准草案.

涉及的文件是

  • .m4a 用于音频(如果您只想要音频流).
  • .ts用于视频.这是MPEG-2传输,通常具有h.264/AAC有效载荷.它包含10秒的视频,它是通过拆分原始视频文件或转换实时视频来创建的.
  • .m3u8对于播放列表.这是WinAmp格式的UTF-8版本.

即使它被称为实时流式传输,通常会有一分钟左右的延迟,在此期间转换视频,写入ts和m3u8文件,并且客户端刷新m3u8文件.

所有这些文件都是服务器上的静态文件.但在实时事件中,会添加更多.ts文件,并更新m3u8文件.

由于您在iOS上标记了这个问题,因此提及相关的App Store规则是相关的:

  • 对于小于10分钟或每5分钟5 MB的视频,您只能使用渐进式下载.否则,您必须使用HTTP Live Streaming.
  • 如果使用HTTP实时流式传输,则必须提供至少一个64 Kbps或更低带宽的流(低带宽流可以是仅音频流或带静止图像的音频).

获取流媒体工具

要下载HTTP Live Streaming Tools,请执行以下操作:

安装的命令行工具:

 /usr/bin/mediastreamsegmenter
 /usr/bin/mediafilesegmenter
 /usr/bin/variantplaylistcreator
 /usr/bin/mediastreamvalidator
 /usr/bin/id3taggenerator
Run Code Online (Sandbox Code Playgroud)

手册页的描述:

  • 媒体流分段器:从用于HTTP直播流的MPEG-2传输流创建分段.
  • 媒体文件分段:从媒体文件为HTTP直播流创建分段.
  • Variant Playlist Creator:创建播放列表,用于从mediafilesegmenter创建的HTTP Live流媒体片段切换流.
  • 媒体流验证器:验证HTTP直播流和服务器.
  • ID3标记生成器:创建ID3标记.

制作视频

安装Macports,转到终端和sudo port install ffmpeg.然后使用此FFMpeg脚本将视频转换为传输流(.ts):

# bitrate, width, and height, you may want to change this
BR=512k
WIDTH=432
HEIGHT=240
input=${1}

# strip off the file extension
output=$(echo ${input} | sed 's/\..*//' )

# works for most videos
ffmpeg -y -i ${input} -f mpegts -acodec libmp3lame -ar 48000 -ab 64k -s ${WIDTH}x${HEIGHT} -vcodec libx264 -b ${BR} -flags +loop -cmp +chroma -partitions +parti4x4+partp8x8+partb8x8 -subq 7 -trellis 0 -refs 0 -coder 0 -me_range 16 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -bt 200k -maxrate ${BR} -bufsize ${BR} -rc_eq 'blurCplx^(1-qComp)' -qcomp 0.6 -qmin 30 -qmax 51 -qdiff 4 -level 30 -aspect ${WIDTH}:${HEIGHT} -g 30 -async 2 ${output}-iphone.ts
Run Code Online (Sandbox Code Playgroud)

这将生成一个.ts文件.现在我们需要分段分割文件并创建包含所有这些文件的播放列表.我们可以使用Apple的mediafilesegmenter:

mediafilesegmenter -t 10 myvideo-iphone.ts
Run Code Online (Sandbox Code Playgroud)

这将为视频的每10秒生成一个.ts文件以及指向所有这些文件的.m3u8文件.

设置Web服务器

.m3u8在iOS上玩,我们指向带有移动游猎的文件.当然,首先我们需要将它们放在Web服务器上.要让Safari(或其他播放器)识别ts文件,我们需要添加其MIME类型.在Apache中:

 AddType application/x-mpegURL m3u8
 AddType video/MP2T ts
Run Code Online (Sandbox Code Playgroud)

在lighttpd中:

 mimetype.assign = ( ".m3u8" => "application/x-mpegURL", ".ts" => "video/MP2T" )
Run Code Online (Sandbox Code Playgroud)

要从网页链接:

<html><head>
    <meta name="viewport" content="width=320; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;"/>
</head><body>
    <video width="320" height="240" src="stream.m3u8" />
</body></html>
Run Code Online (Sandbox Code Playgroud)

要检测设备方向,请参阅使用JavaScript,CSS和元标记检测并设置iPhone和iPad的视口方向.

您可以做的更多事情是创建视频的不同比特率版本,嵌入元数据以在作为通知播放时读取它,当然还可以使用MoviePlayerController和AVPlayer进行有趣的编程.

  • 谢谢SOOOO !!! 超级有帮助,我可能会想出这个东西!谢谢!!! (3认同)

A.G*_*A.G 5

这可能会帮助快速:

    import UIKit
    import MediaPlayer

 class ViewController: UIViewController {

     var streamPlayer : MPMoviePlayerController =  MPMoviePlayerController(contentURL: NSURL(string:"http://qthttp.apple.com.edgesuite.net/1010qwoeiuryfg/sl.m3u8"))
     override func viewDidLoad() {
         super.viewDidLoad()
         streamPlayer.view.frame = self.view.bounds
         self.view.addSubview(streamPlayer.view)

         streamPlayer.fullscreen = true
         // Play the movie!
         streamPlayer.play()
}
}
Run Code Online (Sandbox Code Playgroud)

MPMoviePlayerController 从 iOS 9 开始已弃用。我们可以使用 AVPlayerViewController() 或 AVPlayer 来达到此目的。看一看:

import AVKit
import AVFoundation
import UIKit
Run Code Online (Sandbox Code Playgroud)

AVPlayerViewController :

override func viewDidAppear(animated: Bool){
let videoURL = NSURL(string: "https://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4")
let player = AVPlayer(URL: videoURL!)
let playerViewController = AVPlayerViewController()
playerViewController.player = player
self.presentViewController(playerViewController, animated: true) {
    playerViewController.player!.play()
}
}
Run Code Online (Sandbox Code Playgroud)

AV播放器:

 override func viewDidAppear(animated: Bool){
    let videoURL = NSURL(string: "https://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4")
    let player = AVPlayer(URL: videoURL!)
    let playerLayer = AVPlayerLayer(player: player)
    playerLayer.frame = self.view.bounds
    self.view.layer.addSublayer(playerLayer)
    player.play()
    }
Run Code Online (Sandbox Code Playgroud)