gpt4 book ai didi

actionscript-3 - AMS 有时不会通过 rtmpt 收到取消发布命令

转载 作者:行者123 更新时间:2023-12-04 16:09:08 27 4
gpt4 key购买 nike

这个至少让我走了一个星期。我正在尝试将视频文件录制到 AMS。它几乎在所有时间都运行良好,除了大约十分之一或 15 个录制 session 之外,当我关闭流时,我从未在我的网络流上收到来自 AMS 的“NetStream.Unpublish.Success”。发生这种情况时,我正在使用 rtmpt 连接到 AMS,它似乎在 rtmp 上工作正常。此外,这似乎只发生在 mac 上的 safari 中,但由于它是如此断断续续,我不太相信。这是我的基本流程:

// 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

}

更新
我现在每次连接尝试都使用新的 NetConnection,并且也不强制使用端口 80(请参阅下面的“答案”)。这并没有解决我的连接问题,只是使实例更加不频繁。现在就像每周左右一样,我仍然有一些 ams 或 flash 随机故障。最近有人进行了录制,然后 Flash Player 无法加载视频进行播放。 ams 日志显示连接尝试,然后什么也没有。当我加载元数据时,至少应该记录一个播放事件。这非常令人沮丧并且无法调试。

最佳答案

我会尝试 2 个不同的 NetConnection 对象,一个用于记录,一个用于重放。这将消除您围绕监听器添加/删除和连接/重新连接/断开连接逻辑的复杂性,并且 IMO 会更清晰。
NetConnections 很便宜,而且我总是为手头的每个任务使用一个。另一个优点是您可以在启动时连接两者,以便立即准备好重放连接。

我之前没有看到这里使用过 Promise,但我没有资格评论这是否会导致问题。

关于actionscript-3 - AMS 有时不会通过 rtmpt 收到取消发布命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27116218/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com