2012-03-21 6 views
11

일반 소켓을 사용하여 네트워크 연결을 통해 영화 콘텐츠를 스트리밍하는 작은 iPhone 앱에서 작업하고 있습니다. 동영상은 H.264 형식입니다. 그러나 나는 데이터를 재생/해독하는 데 어려움을 겪고 있습니다. 나는 FFMPEG을 사용하려고했지만 라이센스 때문에 프로젝트에 적합하지 않습니다. 나는 애플의 AVFoundation 프레임 워크 (특히 AVPlayer)를 조사 해왔다. h264 콘텐트를 처리 할 수있는 것 같지만, URL을 사용하여 영화를 시작하는 메소드 만 찾을 수있다. 스트리밍 된 메모리 버퍼를 증명하는 것이 아니다. 네트워크. AVFoundation을 사용하여 iOS에서 소켓 스트리밍 된 h.264 동영상 재생

나는 다음과 같은 방법을 사용하여이 어쨌든 일어날 수 있도록 몇 가지 테스트를 해 봤는데 :

  1. 정기적 AVPlayer를 사용하여 동영상을 재생합니다. 네트워크에서 데이터를 수신 할 때마다 append-mode가있는 fopen을 사용하여 파일에 기록됩니다. AVPlayer의 자산은 업데이트 된 데이터로 다시로드/재생성됩니다. 이 접근 방식에는 두 가지 문제가있는 것으로 보입니다. 첫 번째로 화면이 잠시 동안 검은 색으로 변하면서 첫 번째 자산이 언로드되고 새 자산이로드됩니다. 둘째, 나는 연주가 중단 된 곳을 정확히 알지 못하므로 새로운 자산을 재생할 수있는 적절한 장소를 어떻게 찾을 수 있는지 확신 할 수 없습니다.
  2. 두 번째 접근법은 첫 번째 접근 방식에서와 같이 파일에 데이터를 쓰는 것이지만 데이터가 두 번째 자산으로로드된다는 차이점이 있습니다. AVQueuedPlayer은 두 번째 자산이 플레이어에 삽입/대기 한 다음 버퍼링이 완료 될 때 호출되는 곳에서 사용됩니다. 그런 다음 첫 번째 자산을 검은 색 화면없이 언로드 할 수 있습니다. 그러나이 방법을 사용하면 새 자산을 재생할 위치를 찾는 것이 훨씬 어렵습니다 (첫 번째 방법보다).

누구나 이와 비슷한 작업을 수행 했습니까? AVFoundation을 사용하여 올바른 방법이 있습니까?

+0

답변을 찾으셨습니까? 나는 또한 하나의 프레임을 담고있는 h264 파일 (.264 파일 확장자)을 재생하려고 시도하고있다. AVAssetReader는이 파일 형식을 허용하지 않으며 프레임 당 mp4 파일을 만드는 것만 남았습니다 (이것은 미친 듯합니다). – Cthutu

+0

소스가 앱을 당기는 대신 동영상을 푸시해야하는 특별한 이유가 있나요? HLS는 일반적으로 반대 방향으로 작동합니다. 소스 시스템이 OSX를 실행할 수있는 경우, UDP rtsp 입력 스트림에서 세그먼트 화를 수행하는 Apple 도구가 있습니다. 그렇지 않다면, AVPlayer를 가짜로 만들어서 폰에서 프록시를 실행하여 정상 HLS를 처리한다고 생각하게 만들 수 있습니다. 도착한 파일을 청크로 처리하고 청크를 나타내는 적절한 가짜 .m3u8 재생 목록을 생성하는 코드를 작성하십시오. –

답변

0

공식적인 방법은 다양한 품질 수준을 지원하고 자동으로 전환하는 HTTP 실시간 스트리밍 형식입니다 (예 : 사용자가 Wi-Fi에서 이동 통신으로 이동하는 경우).

여기에서 문서를 찾을 수 있습니다. Apple Http Streaming Docs

관련 문제