imdogma
22.06.2009, 17:22
Такая ситуация: есть плеер, который тянет по rtmp два потока - один видео, другой аудио. Смысл в том что аудиопоток заменяет собой звук у видео (а у видео потока я просто отключаю через receiveAudio(false) звук).
Не могу понять, как решить вот какой момент:
предположим у видео кончился буфер (оно останавливается), но у аудио потока буфер еще есть. Соотв звук продолжает играть а видео начинает подгружаться. Такое положение вещей меня не совсем устраивает (мне нужна синхронность - кончился у одного из потоков буфер - оба встали, второй дождался пока первый дозагрузится - и снова вместе заиграли). Пробовал вот так:
ns_video.addEventListener(NetStatusEvent.NET_STATUS, handleVideostream);
ns_audio.addEventListener(NetStatusEvent.NET_STATUS, handleAudiostream);
function handleVideostream(e:NetStatusEvent):void
{
if(e.info.code == "NetStream.Buffer.Empty")
{
ns_audio.pause();
trace("stop");
}
if(e.info.code == "NetStream.Buffer.Full")
{
ns_audio.resume();
trace("go");
}
}
function handleAudiostream(e:NetStatusEvent):void
{
if(e.info.code == "NetStream.Buffer.Empty")
{
ns_video.pause();
trace("stop");
}
if(e.info.code == "NetStream.Buffer.Full")
{
ns_video.resume();
trace("go");
}
}
в итоге получаю вообще нерабочий плеер. Если оставить только handleVideostream - еще как то более менее похоже на то, что мне нужно, но тогда я не могу проверять состояние буфера звука, и соотв. часто может видео играть без звука на какое то время. Какие есть соображения, друзья?:)
Не могу понять, как решить вот какой момент:
предположим у видео кончился буфер (оно останавливается), но у аудио потока буфер еще есть. Соотв звук продолжает играть а видео начинает подгружаться. Такое положение вещей меня не совсем устраивает (мне нужна синхронность - кончился у одного из потоков буфер - оба встали, второй дождался пока первый дозагрузится - и снова вместе заиграли). Пробовал вот так:
ns_video.addEventListener(NetStatusEvent.NET_STATUS, handleVideostream);
ns_audio.addEventListener(NetStatusEvent.NET_STATUS, handleAudiostream);
function handleVideostream(e:NetStatusEvent):void
{
if(e.info.code == "NetStream.Buffer.Empty")
{
ns_audio.pause();
trace("stop");
}
if(e.info.code == "NetStream.Buffer.Full")
{
ns_audio.resume();
trace("go");
}
}
function handleAudiostream(e:NetStatusEvent):void
{
if(e.info.code == "NetStream.Buffer.Empty")
{
ns_video.pause();
trace("stop");
}
if(e.info.code == "NetStream.Buffer.Full")
{
ns_video.resume();
trace("go");
}
}
в итоге получаю вообще нерабочий плеер. Если оставить только handleVideostream - еще как то более менее похоже на то, что мне нужно, но тогда я не могу проверять состояние буфера звука, и соотв. часто может видео играть без звука на какое то время. Какие есть соображения, друзья?:)