Files
HaishinKit.swift/Sources/HTTP/HTTPStream.swift
T
2016-07-05 20:33:19 +09:00

52 lines
1.8 KiB
Swift

import Foundation
import AVFoundation
public class HTTPStream: Stream {
private(set) var name:String?
private var tsWriter:TSWriter = TSWriter()
public func publish(name:String?) {
dispatch_async(lockQueue) {
if (name == nil) {
self.name = name
self.mixer.videoIO.screen?.stopRunning()
self.mixer.videoIO.encoder.delegate = nil
self.mixer.videoIO.encoder.stopRunning()
self.mixer.audioIO.encoder.delegate = nil
self.mixer.audioIO.encoder.stopRunning()
self.tsWriter.stopRunning()
return
}
self.name = name
self.mixer.videoIO.screen?.startRunning()
self.mixer.videoIO.encoder.delegate = self.tsWriter
self.mixer.videoIO.encoder.startRunning()
self.mixer.audioIO.encoder.delegate = self.tsWriter
self.mixer.audioIO.encoder.startRunning()
self.tsWriter.startRunning()
}
}
func getResource(resourceName:String) -> (MIME, String)? {
guard let
name:String = name,
url:NSURL = NSURL(fileURLWithPath: resourceName),
pathComponents:[String] = url.pathComponents
where 2 <= pathComponents.count && pathComponents[1] == name else {
return nil
}
let fileName:String = pathComponents.last!
switch true {
case fileName == "playlist.m3u8":
return (.ApplicationXMpegURL, tsWriter.playlist)
case fileName.containsString(".ts"):
if let mediaFile:String = tsWriter.getFilePath(fileName) {
return (.VideoMP2T, mediaFile)
}
return nil
default:
return nil
}
}
}