Лучший способ оценить скорость соединения - PullRequest
33 голосов
/ 26 сентября 2011

Я разрабатываю приложение, которое должно получать музыкальный файл при потоковой передаче для воспроизведения в прямом эфире.

В api песни запроса я могу указать пропускную способность (например: 50 кбит / с, 100 кбит / с, 300, 600 или 1 Мбит / с).

Чем больше полоса пропускания, тем больше у файла будет времени для извлечения.Так как я не хочу, чтобы пользователи были ограничены в этом, у меня есть несколько вариантов решения:

  • Определите, использует ли телефон 3g, Wi-Fi или Edge, и укажите пропускную способность дляскорость каждого соединения.

  • Пусть пользователь сам решит, какое качество песни он получит: как youtube (но пользователи не будут людьми, которые много знают о компьютерах: чем прощепрограммное обеспечение, тем больше оно будет соответствовать)

  • Способ правильно оценить скорость соединения: как при извлечении файла, измерить время, которое потребовалось, и установить полосу пропускания.

Я знаю, что скорость соединения может сильно отличаться, если пользователь теряет Wi-Fi или использует 3G на улице.И дело в том, что я не могу изменить пропускную способность, когда будет играть песня.

Может быть, у вас есть опыт, которым вы хотели бы поделиться?

Спасибо!

Ответы [ 4 ]

40 голосов
/ 27 марта 2015

Facebook выпустил библиотеку для этого:

https://github.com/facebook/network-connection-class

этого не было в 2011 году ..

4 голосов
/ 26 сентября 2011

почему бы не попытаться изменить свой взгляд на вещи.Попробуйте общаться с вашими пользователями.Скажите, что ваш пользователь хочет скачать качественную песню 128 кбит.вы начинаете загрузку, ПОКА загружая, вы делаете среднее время загрузки, занимает несколько секунд для стабилизации этого среднего, и если оно ниже определенного значения, появляется всплывающее окно, чтобы сообщить пользователю, что его соединение слишком медленное для текущей полосы пропускания, и спроситьего, если снизить качество или продолжать медленно загружать.

Это:

  1. позволит пользователям всегда предполагать, что они могут получить носители самого высокого качества.
  2. позвольте вам выполнить проверку во время выполнения и соответственно изменить качество при загрузке без предварительной проверки.
  3. делает ваше приложение простым для пользователей.

Я знаю, что яне отвечая на ваши конкретные требования, я просто предлагаю другое мнение.

4 голосов
/ 09 января 2015
protected String doInBackground(String... urls) {
    String response = "";

    startTime = System.currentTimeMillis();
    for (String url : urls) {
        DefaultHttpClient client = new DefaultHttpClient();
        HttpGet httpGet = new HttpGet(url);
        try {

            HttpResponse execute = client.execute(httpGet);
            InputStream content = execute.getEntity().getContent();


            BufferedReader buffer = new BufferedReader(
                    new InputStreamReader(content));
            String s = "";
            while ((s = buffer.readLine()) != null) {
                response += s;
            }
            endTime = System.currentTimeMillis();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    return response;
}

@Override
protected void onPostExecute(String result) {
    // TODO Auto-generated method stub


    long dataSize = result.length() / 1024;
    takenTime = endTime - startTime;
    long s = takenTime / 1000;
    double speed = dataSize / s;

    Toast.makeText(context, "" + s + "kbps", Toast.LENGTH_SHORT).show();
}
2 голосов
/ 26 сентября 2011

Определение типа сетевого подключения на Android

Вы можете проверить все доступные варианты здесь: http://developer.android.com/reference/android/telephony/TelephonyManager.html

Это может исправить тип мобильной сети, но не может помочь вам с скоростью Wi-Fi, вы должны закодировать его, загрузив что-то с известного вам сервера и рассчитать время.

Надеюсь, это поможет.

...