它看起來像你的iOS代碼很好,它是你的服務器端代碼造成的問題,主要是關於生成M3U8播放列表,可能與你如何託管它參考的TS文件。
不幸的是,我的示例代碼有點嘈雜,因爲我一年前寫過它(它是在python中),它比你要求的要多一點(它實時 - 將視頻轉碼爲正確的m3u8/ts東西),但它被測試和功能。
你可以看看這裏的代碼:
我會粘貼這裏的一些相關方法,爲您提供方便;我希望它可以幫助你:
def start_transcoding(self, videoPath):
if DISABLE_LIVE_TRANSCODE:
print "Live transcoding is currently disabled! There is a problem with your configuration."
return
print "Initiating transcode for asset at path: "+videoPath
videoPath = unquote(videoPath)
video_md5 = md5.new(videoPath).hexdigest()
if self.sessions.has_key(video_md5): # Session already exists?
return self.m3u8_bitrates_for(video_md5)
transcodingSession = TranscodeSession(self, videoPath)
if transcodingSession.can_be_decoded():
self.sessions[transcodingSession.md5] = transcodingSession
return self.m3u8_bitrates_for(transcodingSession.md5)
else:
return "Cannot decode this file."
def m3u8_segments_for(self, md5_hash, video_bitrate):
segment = string.Template("#EXTINF:$length,\n$md5hash-$bitrate-$segment.ts\n")
partCount = math.floor(self.sessions[md5_hash].duration/10)
m3u8_segment_file = "#EXTM3U\n#EXT-X-TARGETDURATION:10\n"
for i in range(0, int(partCount)):
m3u8_segment_file += segment.substitute(length=10, md5hash=md5_hash, bitrate=video_bitrate, segment=i)
last_segment_length = math.ceil((self.sessions[md5_hash].duration - (partCount * 10)))
m3u8_segment_file += segment.substitute(length=last_segment_length, md5hash=md5_hash, bitrate=video_bitrate, segment=i)
m3u8_segment_file += "#EXT-X-ENDLIST"
return m3u8_segment_file
def m3u8_bitrates_for(self, md5_hash):
m3u8_fudge = string.Template(
"#EXTM3U\n"
# "#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=384000\n"
# "$hash-384-segments.m3u8\n"
# "#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=512000\n"
# "$hash-512-segments.m3u8\n"
"#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=768000\n"
"$hash-768-segments.m3u8\n"
# "#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1024000\n"
# "$hash-1024-segments.m3u8\n"
)
return m3u8_fudge.substitute(hash=md5_hash)
def segment_path(self, md5_hash, the_bitrate, segment_number):
# A segment was requested.
path = self.sessions[md5_hash].transcode(segment_number, the_bitrate)
if path:
return path
else:
raise "Segment path not found"
該項目是所有開源現在可以在這裏找到:https://github.com/DFTi/ScribbeoServer/tree/python
二進制文件可以在這裏找到:http://scribbeo.com/server
祝你好運!
嘗試蘋果http流驗證器。 http://developer.apple.com/library/ios/#technotes/tn2235/_index.html – Till 2011-12-17 21:19:21
@Till嘿,我已經嘗試過,但流驗證器沒有給出結果,或者當我給它我的m3u8文件的網址它加載了很多,並寫道無法接收文件或類似的東西,我不明白什麼是錯的。 – Lukas 2011-12-18 10:48:31
仔細檢查M3U8並檢查包含的URL是否實際可到達。 – Till 2011-12-18 11:03:18