일반 소켓을 사용하여 네트워크 연결을 통해 영화 콘텐츠를 스트리밍하는 작은 iPhone 앱에서 작업하고 있습니다. 동영상은 H.264
형식입니다. 그러나 나는 데이터를 재생/해독하는 데 어려움을 겪고 있습니다. 나는 FFMPEG
을 사용하려고했지만 라이센스 때문에 프로젝트에 적합하지 않습니다. 나는 애플의 AVFoundation
프레임 워크 (특히 AVPlayer
)를 조사 해왔다. h264 콘텐트를 처리 할 수있는 것 같지만, URL을 사용하여 영화를 시작하는 메소드 만 찾을 수있다. 스트리밍 된 메모리 버퍼를 증명하는 것이 아니다. 네트워크. AVFoundation을 사용하여 iOS에서 소켓 스트리밍 된 h.264 동영상 재생
- 정기적
AVPlayer
를 사용하여 동영상을 재생합니다. 네트워크에서 데이터를 수신 할 때마다 append-mode가있는 fopen을 사용하여 파일에 기록됩니다.AVPlayer
의 자산은 업데이트 된 데이터로 다시로드/재생성됩니다. 이 접근 방식에는 두 가지 문제가있는 것으로 보입니다. 첫 번째로 화면이 잠시 동안 검은 색으로 변하면서 첫 번째 자산이 언로드되고 새 자산이로드됩니다. 둘째, 나는 연주가 중단 된 곳을 정확히 알지 못하므로 새로운 자산을 재생할 수있는 적절한 장소를 어떻게 찾을 수 있는지 확신 할 수 없습니다. - 두 번째 접근법은 첫 번째 접근 방식에서와 같이 파일에 데이터를 쓰는 것이지만 데이터가 두 번째 자산으로로드된다는 차이점이 있습니다.
AVQueuedPlayer
은 두 번째 자산이 플레이어에 삽입/대기 한 다음 버퍼링이 완료 될 때 호출되는 곳에서 사용됩니다. 그런 다음 첫 번째 자산을 검은 색 화면없이 언로드 할 수 있습니다. 그러나이 방법을 사용하면 새 자산을 재생할 위치를 찾는 것이 훨씬 어렵습니다 (첫 번째 방법보다).
누구나 이와 비슷한 작업을 수행 했습니까? AVFoundation
을 사용하여 올바른 방법이 있습니까?
답변을 찾으셨습니까? 나는 또한 하나의 프레임을 담고있는 h264 파일 (.264 파일 확장자)을 재생하려고 시도하고있다. AVAssetReader는이 파일 형식을 허용하지 않으며 프레임 당 mp4 파일을 만드는 것만 남았습니다 (이것은 미친 듯합니다). – Cthutu
소스가 앱을 당기는 대신 동영상을 푸시해야하는 특별한 이유가 있나요? HLS는 일반적으로 반대 방향으로 작동합니다. 소스 시스템이 OSX를 실행할 수있는 경우, UDP rtsp 입력 스트림에서 세그먼트 화를 수행하는 Apple 도구가 있습니다. 그렇지 않다면, AVPlayer를 가짜로 만들어서 폰에서 프록시를 실행하여 정상 HLS를 처리한다고 생각하게 만들 수 있습니다. 도착한 파일을 청크로 처리하고 청크를 나타내는 적절한 가짜 .m3u8 재생 목록을 생성하는 코드를 작성하십시오. –