Bu, en azından bir haftalığına gitmemi sağladı. AMS'ye bir video dosyası kaydetmeye çalışıyorum. Neredeyse 10 veya 15 kayıt seansı dışında neredeyse her zaman harika çalışıyor, akışı kapattığımda AMS'den netstream'de asla 'NetStream.Unpublish.Success' alıyorum. Bu olduğunda rtmpt kullanarak AMS'ye bağlanıyorum, rtmp üzerinde iyi çalışıyor gibi görünüyor. Ayrıca, bu sadece Mac'te safari'de olduğu gibi görünüyor, ama o kadar aralıklı olduğu için gerçekten ona güvenmiyorum. Şimdi bağlantı girişimi başına yeni bir NetConnection'ı kullanarak ve aynı zamanda (aşağıda benim 'cevabını' bakınız) portu 80 zorlama değilim AMS, yayından kaldırma komutunu alır. SOMETIMES, rtmpt üzerinden
// just a way to use promises with netStatusEvents
private function netListener(code:String, netObject:*):Promise {
var deferred:Deferred = new Deferred();
var netStatusHandler:Function = function (event:NetStatusEvent):void {
if (event.info.level == 'error') {
deferred.reject(event);
} else if (event.info.code == code) {
deferred.resolve(netObject);
// we want this to be a one time listener since the connection can swap between record/playback
netObject.removeEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
}
};
netObject.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
return deferred.promise;
}
// set up for recording
private function initRecord():void {
Settings.recordFile = Settings.uniquePrefix + (new Date()).getTime();
// detach any existing NetStream from the video
_view.video.attachNetStream(null);
// dispose of existing NetStream
if (_videoStream) {
_videoStream.dispose();
_videoStream = null;
}
// disconnect before connecting anew
(_nc.connected ? netListener('NetConnection.Connect.Closed', _nc) : Promise.when(_nc))
.then(function (nc:NetConnection):void {
netListener('NetConnection.Connect.Success', _nc)
.then(function (nc:NetConnection):void {
_view.video.attachCamera(_webcam);
// get new NetStream
_videoStream = getNetStream(_nc);
ExternalInterface.call("CTplayer." + Settings.instanceName + ".onRecordReady", true);
}, function(error:NetStatusEvent):void {
ExternalInterface.call("CTplayer." + Settings.instanceName + ".onError", error.info);
});
_nc.connect(Settings.recordServer);
}); // end ncClose
if (_nc.connected) _nc.close();
}
// stop recording
private function stop():void {
netListener('NetStream.Unpublish.Success', _videoStream)
.then(function (ns:NetStream):void {
ExternalInterface.call("CTplayer." + Settings.instanceName + ".onRecordStop", Settings.recordFile);
});
_videoStream.attachCamera(null);
_videoStream.attachAudio(null);
_videoStream.close();
}
// start recording
private function record():void {
netListener('NetStream.Publish.Start', _videoStream)
.then(function (ns:NetStream):void {
ExternalInterface.call("CTplayer." + Settings.instanceName + ".onRecording");
});
_videoStream.attachCamera(_webcam);
_videoStream.attachAudio(_microphone);
_videoStream.publish(Settings.recordFile, "record"); // fires NetStream.Publish.Success
}
Güncelleme: İşte benim temel akışıdır. Bu benim bağlantı sıkıntılarımı çözmedi, sadece örnekleri daha seyrek yaptı. Şimdi her hafta olduğu gibi ya da ams ya da flaşın hala rastgele bir başarısızlığı var. Son zamanlarda birisi bir kayıt yaptı ve daha sonra flash player, videoyu oynatma için yükleyemedi. Ams kayıtları bir bağlantı girişimi gösterir ve sonra hiçbir şey göstermez. Meta verileri yüklediğimde en azından bir oyun olayı olması gerekir. Bu oldukça sinir bozucu ve hata ayıklaması imkansız.
wireshark kullanmayı denediniz mi ve gerçekten kontrol ettiniz mi? – bond
Bu "** kontrol etmek için çok hızlı" bir sorun olabilir mi? Bir yayına/yakalamaya çalışabilirseniz, yayından kaldırma komutu başarısız olursa, yeniden yayından kaldırmayı denemeden önce bir dakika beklersiniz ..? RTMPT'nin (RTMP ve diğerleri için bir HTTP sarıcısı olmak) doğasının bazen hıçkırıklara neden olabileceğini düşünüyorum, bu yüzden belki de bir zamanlanmış tekrar denemeye yardımcı olabilir .. –
Tam olarak aynı sorunu yaşıyorum, bir çözüm buldunuz mu? NetStream.Unpublish.Success' alınmazsa bir süre sonra tekrar close() nasıl çağırılır? – SoftForge