Mik*_*ens 54 video-streaming http-live-streaming ios
好吧,我一直试图围绕这个http直播流媒体.我只是不明白,是的,我已经阅读了所有的苹果文档并观看了wwdc视频,但仍然非常困惑,所以请帮助一个想成为一个程序员!
你写的代码在服务器上?不是在xcode?如果我是对的,我如何设置它?我需要在服务器上设置一些特殊的东西吗?喜欢php还是什么?如何使用Apple .. segmenter等提供的工具?
请帮帮我,谢谢
Jan*_*ano 133
HTTP Live Streaming是Apple提出的流媒体标准.查看最新的标准草案.
涉及的文件是
.m4a 用于音频(如果您只想要音频流)..ts用于视频.这是MPEG-2传输,通常具有h.264/AAC有效载荷.它包含10秒的视频,它是通过拆分原始视频文件或转换实时视频来创建的..m3u8对于播放列表.这是WinAmp格式的UTF-8版本.即使它被称为实时流式传输,通常会有一分钟左右的延迟,在此期间转换视频,写入ts和m3u8文件,并且客户端刷新m3u8文件.
所有这些文件都是服务器上的静态文件.但在实时事件中,会添加更多.ts文件,并更新m3u8文件.
由于您在iOS上标记了这个问题,因此提及相关的App Store规则是相关的:
要下载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)
手册页的描述:
安装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文件.
要.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进行有趣的编程.
这可能会帮助快速:
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)
| 归档时间: |
|
| 查看次数: |
41517 次 |
| 最近记录: |