わかりました、私はこのhttpライブストリーミングの周りに私の頭をラップしようとしています。私はそれを理解していないし、はい、すべてのApple docsを読んでwwdcビデオを見ましたが、それでも非常に混乱しているので、プログラマーになりたいです!!!
書いたコードはサーバーに送られますか? Xcodeではない?私が正しい場合、これをどのように設定しますか?サーバーに特別なものをセットアップする必要がありますか? phpまたは何かのような? Apple ..セグメンターなどが提供するツールはどのように使用しますか?
助けてください、ありがとう
HTTPライブストリーミングは、Appleによって提案されたストリーミング標準です。最新の ドラフト標準 を参照してください。
関係するファイルは
.m4a
オーディオ用(オーディオのストリームのみが必要な場合)。.ts
ビデオ用。これは、通常h.264/AACペイロードを持つMPEG-2トランスポートです。 10秒のビデオが含まれており、元のビデオファイルを分割するか、ライブビデオを変換することにより作成されます。.m3u8
プレイリスト用。これは、WinAmp形式のUTF-8バージョンです。ライブストリーミングと呼ばれる場合でも、通常、ビデオが変換され、tsおよびm3u8ファイルが書き込まれ、クライアントがm3u8ファイルを更新するのに1分程度の遅延があります。
これらのファイルはすべて、サーバー上の静的ファイルです。ただし、ライブイベントでは、さらに.tsファイルが追加され、m3u8ファイルが更新されます。
この質問にiOSをタグ付けしたので、関連するApp Storeルールに言及することが重要です。
HTTPライブストリーミングツールをダウンロードするには、次の操作を行います。
インストールされているコマンドラインツール:
/usr/bin/mediastreamsegmenter
/usr/bin/mediafilesegmenter
/usr/bin/variantplaylistcreator
/usr/bin/mediastreamvalidator
/usr/bin/id3taggenerator
Manページの説明:
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
これにより、1つの.tsファイルが生成されます。次に、ファイルをセグメントに分割し、それらすべてのファイルを含むプレイリストを作成する必要があります。これにはAppleのmediafilesegmenter
を使用できます。
mediafilesegmenter -t 10 myvideo-iphone.ts
これにより、ビデオの10秒ごとに1つの.tsファイルと、それらすべてを指す.m3u8ファイルが生成されます。
IOSで.m3u8
を再生するには、モバイルサファリでファイルをポイントします。もちろん、最初にWebサーバーに配置する必要があります。 Safari(または他のプレーヤー)がtsファイルを認識するためには、MIMEタイプを追加する必要があります。 Apacheの場合:
AddType application/x-mpegURL m3u8
AddType video/MP2T ts
Lighttpdの場合:
mimetype.assign = ( ".m3u8" => "application/x-mpegURL", ".ts" => "video/MP2T" )
これをWebページからリンクするには:
<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>
デバイスの向きを検出するには、 JavaScript、CSS、およびメタタグを使用してiPhoneおよびiPadのビューポートの向きを検出および設定する を参照してください。
できることは、ビデオのさまざまなビットレートバージョンを作成し、メタデータを埋め込んで通知として再生し、もちろんMoviePlayerControllerとAVPlayerで楽しいプログラミングをすることです。
これはSwift:で役立つかもしれません
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()
}
}
MPMoviePlayerControllerは、iOS 9以降では非推奨です。目的のためにAVPlayerViewController()またはAVPlayerを使用できます。ご覧ください:
import AVKit
import AVFoundation
import UIKit
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()
}
}
AVPlayer:
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()
}
Cloudinaryからの別の説明 http://cloudinary.com/documentation/video_manipulation_and_delivery#http_live_streaming_hls
HTTPライブストリーミング(HLSとも呼ばれる)は、さまざまなネットワークにスケーラブルで適応可能なメカニズムを提供するHTTPベースのメディアストリーミング通信プロトコルです。 HLSは、ビデオファイルを一連の小さなHTTPベースのファイルダウンロードに分解し、各ダウンロードでビデオファイルの短いチャンクを1つロードすることで機能します。
ビデオストリームが再生されると、クライアントプレーヤーはさまざまなデータレートでエンコードされた同じ素材を含むさまざまな代替ビデオストリームから選択できるため、ストリーミングセッションは、帯域幅が削減されたネットワークでの高帯域幅および低品質の再生。
ストリーミングセッションの開始時に、クライアントソフトウェアは、利用可能なさまざまなサブストリームのメタデータを含むマスターM3U8プレイリストファイルをダウンロードします。クライアントソフトウェアは、デバイスタイプ、解像度、データレート、サイズなどの事前定義された要因に基づいて、利用可能なメディアファイルから何をダウンロードするかを決定します。