2011-12-17 3 views
1

나는 에 iphone에 http 라이브 스트림을 재생하려고하는데 모든 예제, 실수 및 http 및 라이브 문서에 대한 인터넷 및 Apple 문서에서 발견 할 수있는 모든 것을 본 것처럼 보입니다. 그리고 나는 지금 막 다른 길을 가고 있다고 생각합니다. 나는 대부분의 예제 에서처럼 MPMoviePlayer을 사용하고 있습니다. 또한 vlc 플레이어에서 URL을 열면 스트림을 볼 수있는 추가해야합니다.Http 라이브 스트리밍 iphone

Apple iPhone의 사과 BipBop 스트림을 (를) here 내 iPhone에서 재생할 수 있었지만 스트림을 재생할 수 없습니다. 나는이 터미널 명령을 발견하여 성공적으로 사용했기 때문에 내 URL이 m3u8 파일에없는 것으로 나타났습니다.

/Applications/VLC.app/Contents/MacOS/VLC --intf = RC RTP : //@239.35.86.11 : 10000 '--sout = # 트랜스 코딩 {FPS = 25, vcodec = H264 , acodec = mp3, ab = 56, audio-sync, deinterlace} : 표준 {mux = ts}, venc = x264 {aud, profile =베이스 라인, 레벨 = 30, keyint = 30, bframes = 0, ref = 1, nocabac} , dst = -, access = file} '| mediastreamsegmenter -b http://192.168.1.16/~Jonas/streaming/ -f /사용자/조나스/사이트/스트리밍/-D

지금 내가 내 컴퓨터에서 로컬 재생 목록 M3U8 파일이 있습니다. 내가 명령을 이해 스트림으로 작은 TS 파일로 분할 스트림을 다운로드하고 해당 TS 파일에 대한 참조와 같은 m3u8 파일을 생성합니다. 그래서 나는 이것을로드하려했지만 여전히 운이 없다. 나는 심지어 m3u8 파일을 vlc 또는 itunes에서 열 수없는 몇 가지 이유 때문에 오류가 발생합니다. 그래서 나는 그것이 재생 목록 파일에 문제가 있다고 생각합니까?

어쩌면 당신 중 일부는 내가 잘못하고있는 것을 볼 수 있거나 내 문제를 찾는 방법을 알 수 있습니까? 나는 정말로 감사 할 것입니다.

+0

사과 http 스트림 검사기를 사용해보십시오. http://developer.apple.com/library/ios/#technotes/tn2235/_index.html – Till

+0

@ 할아버지 안녕하세요.하지만 스트림 유효성 검사기가 결과를 제공하지 않았거나 내가 내 m3u8 파일의 URL을 제공 할 때 시도했습니다. 그것은 많이로드하고 파일이나 그와 비슷한 것을받을 수 없으며 뭘 잘못했는지 이해하지 못한다. – Lukas

+1

M3U8을 조심스럽게 검사하고 포함 된 URL에 실제로 도달 할 수 있는지 확인하십시오. – Till

답변

0

iOS 코드가 정상적으로 작동하고 문제를 일으키는 서버 측 코드 인 것 같습니다. 주로 m3u8 재생 목록 생성과 관련하여 참조하는 ts 파일을 호스트하는 방법과 관련이 있습니다.

불행히도 필자의 예제 코드는 1 년 전 (파이썬으로) 쓴 것처럼 약간 시끄 럽습니다. 그리고 여러분이 요구하는 것보다 조금 더 많이합니다 (비디오를 올바른 m3u8/ts로 실시간 트랜스 코딩합니다). 물건)하지만 그것은 테스트와 기능입니다.

현재 코드를 살펴 수행 할 수 있습니다 https://github.com/DFTi/ScribbeoServer/blob/python/transcode.py

내가 사용자의 편의를 위해 여기에 관련된 몇 가지 방법을 붙여 것이다;

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

행운을 빕니다!