Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Http直播到iphone_Iphone_Objective C_Ios_Http_Http Live Streaming - Fatal编程技术网

Http直播到iphone

Http直播到iphone,iphone,objective-c,ios,http,http-live-streaming,Iphone,Objective C,Ios,Http,Http Live Streaming,我正在尝试在iphone上播放http直播流,看起来我已经看过了所有的例子、错误以及在互联网和苹果文档中找到的关于http直播流的所有内容,我想我现在已经走到了死胡同。。在大多数示例中,我使用的是MPMoviePlayer。另外,如果我从vlc播放器打开url,我必须添加我可以看到的流 我成功地在我的iPhone上播放了苹果BipBop流,但无法播放我的流。我发现我的url不在m3u8文件中显示,所以我找到了这个终端命令,并成功地使用了它 /Applications/VLC.app/Conten

我正在尝试在iphone上播放http直播流,看起来我已经看过了所有的例子、错误以及在互联网和苹果文档中找到的关于http直播流的所有内容,我想我现在已经走到了死胡同。。在大多数示例中,我使用的是
MPMoviePlayer
。另外,如果我从vlc播放器打开url,我必须添加我可以看到的流

我成功地在我的iPhone上播放了苹果BipBop流,但无法播放我的流。我发现我的url不在m3u8文件中显示,所以我找到了这个终端命令,并成功地使用了它

/Applications/VLC.app/Contents/MacOS/VLC--intf=rc rtp://@239.35.86.11:10000 “--sout=#transcode{fps=25,vcodec=h264,venc=x264{aud,profile=baseline,level=30,keyint=30,bframes=0,ref=1,nocabac},acodec=mp3,ab=56,音频同步,解交错}:标准{mux=ts,dst=-,access=file}”mediastreamsegmenter-b-f /用户/jonas/sites/streaming/-D

现在我的机器上本地有一个播放列表m3u8文件。据我所知,使用该命令,我下载流将其划分为更小的ts文件,并生成类似于对这些ts文件的引用的m3u8文件。所以我试着装了这个,但还是没有运气。由于某些原因,我甚至无法在vlc或itunes中打开m3u8文件,这会给我带来错误。所以我猜播放列表文件有问题吧


也许你们中的一些人可以看到我做错了什么,或者对如何发现我的问题有一些建议?我会非常感激的

看起来您的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"
该项目现在都是开源的,可以在这里找到:

可在此处找到二进制文件:


祝你好运

尝试apple http流验证程序@直到嘿,我试过了,但流验证程序没有给出结果,或者当我给它我的m3u8文件的url时,它加载了很多无法接收文件或类似内容的内容,我不明白是什么错了。仔细检查你的m3u8,检查所包含的url是否确实可以访问。@直到嘿,谢谢你的帮助,但我真的不知道如何检查我的m3u8,但url是可访问的。我不能和我的任何球员玩m3u8,所以我想肯定是它出了问题。如果我把它交给mediastream验证程序,我不会得到任何结果。M3U8基本上是一个文本文件,所以使用任何编辑器来检查它。