NetStream.time запускается с момента подключения камеры, а не с момента вызова NetStream.publish

Я записываю с веб-камеры на AMS в проекте AS3, и чтобы получить уровень громкости с микрофона, мне нужно подключить микрофон к NetStream. Позже, когда пользователь инициирует запись, значение NetStream.time отсчитывается с момента подключения камеры, а не с момента вызова NetStream.publish. Если они остановят запись и сделают запись снова, NetStream.time будет начинаться с 0. Пока что единственный способ обойти это, кажется, это вызвать публикацию, а затем закрыть NetStream, как только будет подключен микрофон. В документации для AS2 NetStream упоминается этот факт и предлагается вызвать NetStream.publish (false), который не работает в AS3, как и не просто вызов публикации без аргументов.

ns = new NetStream(nc);
ns.attachCamera(cam);
ns.attachAudio(mic);

Тогда позже

ns.publish(filename,"record");
trace(ns.time);

- время, прошедшее между подключением камеры и первым вызовом публикации.

Единственное решение, которое у меня есть, это

ns = new NetStream(nc);
ns.attachCamera(cam);
ns.attachAudio(mic);
ns.publish(filename,"record");
ns.close();

когда пользователь начинает перезапись

ns.publish(filename,"record");
trace(ns.time);

ns.time теперь равно нулю. Я что-то упускаю, есть ли лучшее решение?


person Andi Freeman    schedule 13.02.2013    source источник
comment
Интересно, я этого никогда не замечал. Думаю, это потому, что я всегда прикреплял микрофон (и камеру) к NetStream и сразу же начинал запись. Есть ли что-то в вашем варианте использования, что препятствует этому? Что-то насчет получения уровня громкости? (Я не понимаю эту часть). Лучше всего не создавать NetStream, пока вы не будете готовы начать запись. Другая (не очень хорошая) идея - использовать свой собственный Timer.   -  person Sunil D.    schedule 13.02.2013
comment
Я хочу показать уровень громкости микрофона до начала записи, чтобы они могли регулировать усиление или уровень входного сигнала системы, если он кажется низким. Microphone.level равен 0, пока вы не подключите его к NetStream, и в первый раз, когда вы сделаете это, NetStream.time начнет счет, это немного странно.   -  person Andi Freeman    schedule 14.02.2013
comment
Спасибо за объяснение. Есть еще один способ узнать уровень микрофона (количество обнаруживаемого звука). Сейчас это ускользает от меня, но я сделал это с помощью типа дисплея с мастером микрофона / камеры, который позволял пользователю выбирать, какую камеру / микрофон использовать. Я смог визуализировать звук, который он улавливал, в шумомере, который работал с несколькими микрофонами, подключенными к системе, и без необходимости подключать их к NetStream. Я смотрю API прямо сейчас, но не могу найти то, что использовал (и у меня больше нет доступа к этому коду).   -  person Sunil D.    schedule 14.02.2013
comment
Возможно, я сделал то, что они показывают здесь, w / ActivityEvent - когда оно отправлено, вы можете проверить свойство activityLevel микрофона.   -  person Sunil D.    schedule 14.02.2013


Ответы (1)


Вы можете использовать mic.setLoopBack (true), который будет направлять активность микрофона на ваши динамики. Теперь вы сможете увидеть activityLevel. Но тогда вы, вероятно, захотите установить SoundTransform на микрофоне с объемом 0, чтобы микрофон был эффективно отключен.

В основном.

mic.setLoopBack (истина);

var transform: SoundTransform = новый SoundTransfrom (); transform.volume = 0;

mic.soundTransform = преобразовать;

После того, как вы перестанете отображать уровень активности, убедитесь, что вы удалили преобразование.

person user2139266    schedule 06.03.2013