Решение для потоковой передачи UDP или RTP для Android

Мне нужно создать приложение для Android для отображения прямой телетрансляции. приложение должно воспроизводить потоки видео в реальном времени из многоадресной передачи DVB-шлюза, согласно заявлению поставщика шлюза, оно может передавать потоки UDP или RTP. Я настроил vlc на своем компьютере для потоковой передачи UDP и RTP и сломал пальцы, пытаясь заставить Android-плеер их показать. Через некоторое время я узнал, что Android поддерживает только прямые трансляции HTTP / S и RTSP. Я пробовал все решения FFMPEG и различные медиаплееры, но безуспешно. Я не эксперт по видео, но, насколько я понимаю, RTSP - это инкапсуляция RTP, может ли мой канал RTP быть обернут и транслироваться (даже через прокси)? кто-нибудь знает о рабочем решении UDP?

Благодарность

Я начал писать туннель, который передает локальный поток UDP с порта 1234 на TCP-соединение на порту 8888. Я тестирую с VLC, полезная нагрузка UDP выглядит правильно, и я могу видеть, что VLC инициирует HTTP-соединение, когда я жду чтобы прослушиватель TCP принял соединение. но все же VLC не будет воспроизводить полученный HTTP-поток, мой код:

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();

    }

Есть предположения ?


person Omriko    schedule 09.05.2012    source источник
comment
Буду признателен за любые образцы кода / реализации. еще раз спасибо   -  person Omriko    schedule 10.05.2012


Ответы (1)


Надеюсь, что вы уже решили эту проблему?

Моя первая мысль была: "Как выйти из этого while (true) цикла?" ржу не могу

RTP был добавлен в Android SDK на уровне API 12:

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

Возможно, вы сможете использовать android.net.rtp, чтобы ловить потоковое видео. Похоже, что в этой области наблюдается значительный недостаток руководств, поэтому, если у вас это получилось / получилось, я уверен, что быстрое рецензирование может привести к большим результатам поиска G; не говоря уже о том, чтобы помочь плакатам с более чем 600 другими вопросами по stackoverflow, которые возникают при поиске "android udp rtp".

Из блог-о-сферы:

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

И я добавлю плагин для WebRTC, потому что он выглядит многообещающим:

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

person CodeShane    schedule 16.11.2012
comment
Шейн благодарит за ссылки, потому что у меня не было решения в то время, когда я купил MPEG2TS через UDP-вещатель (значительно дешевле ...) и написал прокси-код, который извлекает мультимедиа из потока, буферизует его в файл и позволяет загружать или прогрессивная потоковая передача файла от клиента. Это не учебное решение проблемы, но мы его запустили. Я надеюсь, что Google проявит к нам некоторую любовь в будущем и добавит поддержку дополнительных протоколов. еще раз спасибо! - person Omriko; 21.01.2013
comment
Рад, что у вас все получилось, и спасибо, что поделились своим опытом! - person CodeShane; 22.01.2013
comment
Не могли бы вы дать ссылку на то, какое устройство вы купили? Меня интересует нечто подобное. - person egfconnor; 08.02.2014
comment
мы использовали два продукта: один от vboxcomm для обработки спутниковой связи, а другой от alcad для потоковой передачи фильмов. - person Omriko; 17.04.2014
comment
+1 @Omriko, спасибо, что сообщили нам о своем решении. - person CodeShane; 19.04.2014