Grails и безопасность Spring: Как я получаю аутентифицируемого пользователя из контроллера?

Как объединить два совершенно разных mp3-файла (разность битрейта, каналы, частота дискретизации, битдеф)?

Давайте начнем с каждого компонента ...

битрейт

Это не имеет значения. Потоки MP3 могут (и делают!) Изменять битрейт в среднем потоке. Пока вы присоединяетесь к заголовку фрейма, все в порядке.

bitdepth

Концепция глубины в битах семплов не существует в MP3. Вы можете записывать в 24-битном формате, кодировать в MP3, а декодер будет декодировать в 16-битном формате. (Или с некоторыми переключателями командной строки, наоборот!) Это не проблема, потому что битовая глубина не применяется.

частота дискретизации

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

channel

Это похоже на проблему с частотой дискретизации, поскольку требует изменения конфигурации устройства вывода. Даже если игрок поддерживает это, это не будет гладко. (Если только вы не переходили от стерео к моно, где моно можно было легко микшировать на стерео.)

В качестве входных данных я получаю один файл mp3 (input.mp3), затем мне нужно разделить его на две отдельные части (сделано это) и вставьте между этими частями еще один mp3 (second.mp3).

На самом деле это еще одна проблема, о которой вы не спрашивали ... время. MP3 работает в относительно больших кадрах (обычно 576 сэмплов), что становится разрешением, при котором вы можете склеивать. Нехорошо. Кроме того, начало дорожек часто имеет один или два кадра инициализации.

Третий вопрос - битовый резервуар. Именно здесь содержимое из одного кадра хранится в другом кадре, который может иметь дополнительное пространство.

В конце дня вам придется декодировать все в обычные сэмплы PCM, выполнять сплайсинг и перекодировать в MP3. Вы также должны будете повторно сэмплировать все на общую тактовую частоту и смешать с определенным количеством каналов. К счастью, когда-то декодированный в PCM, это все тривиально и стандартно. Как только ваши входные потоки совместимы, вы произвольно соединяете кадр PCM, который является наиболее детализированным из возможных.

12
задан Mike Sickler 21 April 2009 в 23:09
поделиться

2 ответа

Я использую 0.5.1 и у меня работает следующее:

class EventController {
  def authenticateService

  def list = { 
     def user = authenticateService.principal() 
     def username = user?.getUsername()
     .....
     .....
  } 
}
10
ответ дан 2 December 2019 в 03:22
поделиться

В настоящее время это не задокументировано, но в установочном файле плагина есть 3 метода, которые он добавляет к каждому контроллеру, чтобы вам на самом деле не приходилось внедрять аутентификационную службу:

private void addControllerMethods(MetaClass mc) {
    mc.getAuthUserDomain = {
        def principal = SCH.context?.authentication?.principal
        if (principal != null && principal != 'anonymousUser') {
            return principal?.domainClass
        }

        return null
    }

    mc.getPrincipalInfo = {
        return SCH.context?.authentication?.principal
    }

    mc.isUserLogon = {
        def principal = SCH.context?.authentication?.principal
        return principal != null && principal != 'anonymousUser'
    }
}

Это означает, что что вы можете просто позвонить

principalInfo

, чтобы получить основной объект. Он также имеет «isUserLogin», чтобы видеть, зарегистрирован ли пользователь, и «authUserDomain», чтобы получить фактический экземпляр класса домена (Person / User), связанный с принципалом вошедшего в систему пользователя.

15
ответ дан 2 December 2019 в 03:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: