2017-01-19 18 views
8

Tôi đang cố gắng phát trực tuyến Gói RTP (đang phát trực tuyến âm thanh) từ URL RTP, ví dụ: rtp: //@225.0.0.0 sau rất nhiều nghiên cứu trên cùng tôi đã phần nào truyền trực tuyến URL trong thiết bị của tôi và chơi nó với https://github.com/maknapp/vlckitSwiftSample. Điều này chỉ phát Dữ liệu được truyền nhưng không có bất kỳ chức năng nào để lưu trữ dữ liệu.Cách nhận Gói RTP đang phát trực tiếp từ URL RTP trong thiết bị iOS? (ví dụ: rtp: //@225.0.0.0)

Từ nghiên cứu và các nguồn khác tôi tìm thấy nhiều nội dung và thông tin đơn giản sẽ hữu ích khi truyền Gói trên RTP và lưu trữ trong Thiết bị iOS.

Tôi đã thử với liên kết sau.

  1. https://github.com/kewlbear/FFmpeg-iOS-build-script

  2. https://github.com/chrisballinger/FFmpeg-iOS

Hai thậm chí không biên soạn do POD vấn đề dự án khác hoặc hướng dẫn chỉ cho tôi tham khảo trên Suối RTSP thay vì RTP Stream.

Nếu bất cứ ai có thể cung cấp cho chúng tôi hướng dẫn hoặc bất kỳ ý tưởng nào về cách chúng tôi có thể triển khai những điều như vậy thì nó sẽ được đánh giá cao.

Trả lời

6

Trước hết, bạn cần hiểu cách hoạt động của tính năng này.

Người gửi tức là tác giả của dòng RTP có lẽ là cách làm như sau:

  1. Sử dụng một nguồn cho các dữ liệu: Trong trường hợp âm thanh, điều này có thể là mẫu microphone hoặc âm thanh hoặc một tập tin
  2. Mã hóa âm thanh bằng codec âm thanh như AAC hoặc Opus.
  3. Sử dụng RTP packetizer để tạo ra các gói RTP từ khung âm thanh được mã hóa
  4. Sử dụng một lớp truyền tải như UDP để gửi các gói tin

giao thức như RTSP cung cấp thông tin tín hiệu cần thiết để cung cấp thông tin dòng tốt hơn. Thường RTP chính nó là không đủ như những thứ như kiểm soát tắc nghẽn, phản hồi, tỷ lệ bit động được xử lý với sự giúp đỡ của RTCP.

Dù sao, để lưu trữ các dòng gửi đến, bạn cần phải làm như sau:

  1. Sử dụng một depacketizer RTP để có được những khung hình âm thanh được mã hóa ra khỏi nó. Bạn có thể viết của riêng mình hoặc sử dụng triển khai của bên thứ ba. Trong thực tế, ffmpeg là một khung công tác lớn có tất cả các mã cần thiết cho hầu hết các codec và giao thức. Tuy nhiên đối với trường hợp của bạn, hãy tìm một bộ lọc RTP đơn giản. Có thể có tiêu đề tương ứng với một codec cụ thể để đảm bảo bạn tham chiếu đến RFC chính xác.

  2. Khi bạn có quyền truy cập vào khung được mã hóa, bạn có thể viết giống nhau trong vùng chứa phương tiện như m4a hoặc ogg tùy thuộc vào codec âm thanh được sử dụng trong luồng.

Để chơi suối, bạn cần phải làm như sau:

  1. Sử dụng một depacketizer RTP để có được những khung hình âm thanh được mã hóa ra khỏi nó. Bạn có thể viết của riêng mình hoặc sử dụng triển khai của bên thứ ba. Trong thực tế, ffmpeg là một khung công tác lớn có tất cả các mã cần thiết cho hầu hết các codec và giao thức. Tuy nhiên đối với trường hợp của bạn, hãy tìm một bộ lọc RTP đơn giản.

  2. Một khi bạn có quyền truy cập vào các khung được mã hóa, sử dụng một bộ giải mã âm thanh (có sẵn như là một thư viện) để giải mã các khung hoặc kiểm tra xem nền tảng của bạn hỗ trợ mà bộ giải mã trực tiếp để phát lại

  3. Một khi bạn có quyền truy cập vào khung giải mã , trong iOS, bạn có thể sử dụng AVFoundation để chơi giống nhau.

Nếu bạn đang xem xét một cách dễ dàng để làm điều đó, có thể sử dụng một thực hiện của bên thứ ba như http://audiokit.io/

Các vấn đề liên quan