2012-05-09 19 views
12

Tôi cần tạo ứng dụng Android để hiển thị nguồn cấp dữ liệu truyền hình trực tiếp. ứng dụng được cho là phát trực tiếp các luồng video từ một Multicast của một cổng DVB, theo nhà cung cấp cổng, nó có thể stream ra UDP hoặc RTP. Tôi thiết lập vlc trên máy tính của mình để phát trực tuyến UDP và RTP và đã bẻ gãy các ngón tay của tôi đang cố gắng để người chơi Android hiển thị chúng. sau một thời gian tôi phát hiện ra rằng android chỉ hỗ trợ các luồng trực tiếp HTTP/S và RTSP. Tôi đã thử tất cả các giải pháp FFMPEG và các trình phát phương tiện khác nhau mà không thành công. Tôi không phải là một chuyên gia video nhưng với sự hiểu biết của tôi RTSP là một đóng gói của RTP, nguồn cấp dữ liệu RTP của tôi có thể được gói và phát trực tuyến (thậm chí qua proxy) không? có ai biết giải pháp UDP đang hoạt động không?Giải pháp phát trực tuyến UDP hoặc RTP cho android

nhờ

tôi bắt đầu viết một đường hầm mà đi một dòng UDP địa phương từ cổng 1234, với một kết nối TCP trên cổng 8888. Tôi đang thử nghiệm với VLC, payload UDP có vẻ đúng, và tôi có thể nhìn thấy VLC init kết nối http khi tôi chờ cho người nghe TCP chấp nhận kết nối. nhưng vẫn VLC sẽ không chơi kết quả dòng HTTP, mã của tôi:

public void Bridge() 
    { 
     //endpoints 
     IPEndPoint myRemoteEndpoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 1234); 

     //communications objects 
     UdpClient myUdpClient = new UdpClient(myRemoteEndpoint); 
     TcpListener myTcpListener = new TcpListener(IPAddress.Any, 8888); 

     //buffer 
     byte[] buffer = new byte[2048]; 

     //start tcp listener 
     myTcpListener.Start(); 
     Socket tcpAcceptedSocket = myTcpListener.AcceptSocket();    

     while (true) 
     { 
      try 
      { 
       //get data from UDP client 
       buffer = myUdpClient.Receive(ref myRemoteEndpoint); 

       //send bytes received from UDP over TCP 
       tcpAcceptedSocket.Send(buffer); 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine(ex.Message); 
      } 
     } 

     //close sockets 
     myUdpClient.Close(); 
     myTcpListener.Stop(); 

    } 

bất kỳ suy nghĩ?

+0

tôi sẽ đánh giá cao bất kỳ mã/mẫu thực hiện. cảm ơn lần nữa – Omriko

+0

"Không có ai khác?" – Omriko

Trả lời

2

Hy vọng rằng bạn đã giải quyết vấn đề này chưa?

Suy nghĩ đầu tiên của tôi là "cách bạn thoát khỏi vòng lặp while (true) đó?" lol

RTP đã được thêm vào Android SDK trong mức API 12:

http://developer.android.com/reference/android/net/rtp/package-summary.html

Có lẽ bạn có thể sử dụng android.net.rtp để bắt video của bạn. Có vẻ như thiếu một số hướng dẫn quan trọng trong lĩnh vực này, vì vậy nếu bạn đã làm/thực hiện công việc này, tôi chắc chắn rằng việc ghi nhanh có thể dẫn đến kết quả tìm kiếm G lớn; chưa kể đến việc giúp đỡ áp phích hơn 600 câu hỏi khác trên stackoverflow xuất hiện trong tìm kiếm "android udp rtp".

Từ blog-o-cầu:

http://burcudogan.com/2011/06/05/android-rtp-implementation-is-based-on-udp/

Và tôi sẽ quăng trong một plug cho WebRTC được bởi vì nó trông đầy hứa hẹn:

http://www.html5rocks.com/en/tutorials/webrtc/basics/

+1

Shane cảm ơn vì các liên kết, vì tôi không có giải pháp tại thời điểm tôi mua MPEG2TS qua đài truyền hình UDP (rẻ hơn đáng kể ...) và viết mã proxy lấy dữ liệu từ luồng, lưu vào tệp và cho phép " tải xuống "hoặc phát trực tiếp tệp từ khách hàng. Nó không phải là một giải pháp sách giáo khoa cho vấn đề nhưng chúng tôi đã nhận nó và chạy. Tôi hy vọng google sẽ cho chúng ta thấy một số tình yêu trong tương lai và thêm hỗ trợ cho các giao thức bổ sung. cảm ơn một lần nữa! – Omriko

+0

Rất vui khi bạn làm việc đó và cảm ơn bạn đã liên hệ với trải nghiệm của mình! – CodeShane

+0

Bạn có thể liên kết đến thiết bị bạn đã mua không? Tôi quan tâm đến một cái gì đó tương tự. – egfconnor