背景:
我的所有OpenTok方法都ViewController被推入视图中,就像典型的Master/detail VC关系一样.detailVC根据您的选择将您连接到不同的房间.当我按下后退按钮弹出视图时,我发生了崩溃(可能是7次中的1次):
[OTMessenger setRumorPingForeground] message sent to deallocated instance xxxxx
Run Code Online (Sandbox Code Playgroud)
要么
[OTSession setSessionConnectionStatus:]: message sent to deallocated instance 0x1e1ee440
Run Code Online (Sandbox Code Playgroud)
我在viewDidDisappear中放置了取消发布/断开连接方法:
-(void)viewDidDisappear:(BOOL)animated{
//dispatch_async(self.opentokQueue, ^{
[self.session removeObserver:self forKeyPath:@"connectionCount"];
if(self.subscriber){
[self.subscriber close];
self.subscriber = nil;
}
if (self.publisher) {
[self doUnpublish];
}
if (self.session) {
[self.session disconnect];
self.session = nil;
}
//});
[self doCloseRoomId:self.room.roomId position:self.room.position];
}
Run Code Online (Sandbox Code Playgroud)
这是一个痕迹:

这是Github上的DetailViewController:链接在这里
如何重现:
从MasterVC中进行选择,将您带入DetailVC,立即尝试连接到会话并发布
通常在会话有机会发布流之前,快速回到之前的MasterVC
试试几次,最终会崩溃.
如果我放慢速度并允许发布者有机会进行连接和发布,则不太可能导致崩溃.
预期结果:
它应该断开会话/取消发布并开始一个新的会话,因为我在Master/DetailVC之间来回走动.
其他:
您的设备和操作系统版本是什么?iOS 6
你在什么类型的连接?无线上网
僵尸已启用?是
ARC启用了吗?是
代表们定为零?是的,据我所知
任何帮助解决此崩溃将非常感激.也许我错过了一些我根本无法看到的基本知识.
似乎发生的事情是OpenTok库中的OTSession对象继续向该库中的对象发送消息,这些对象已经被切换视图解除分配.该库有一个[会话断开]方法,如果你给它足够的时间,它可以正常工作,但它需要接近2-3秒,这是在视图之间暂停应用程序的很长时间.
这可能是一个愚蠢的问题,但是:无论如何都要停止某个VC启动的所有进程?
当我在iOS上发布流时,TokBox使用默认摄像头.有没有办法向发布者添加实时过滤器?
我只想要一些关于如何创建过滤器并将其附加到opentok发布者对象(OTVideoCapture)的简单示例代码.
或者,如果这不是正确的方法...在订户端附加过滤器也可以.
怎么能轻松完成?
我想在我的网站上提供视频聊天,并想知道是否有人可以推荐一个API /服务,让我这样做.我熟悉OpenTok,但不喜欢它使用Flash.此外,音频往往有很多噪音/反馈 - 除非你戴着耳机.
建议?
编辑:
我现在正在将它用于P2P,但是希望将来能够进行群组视频聊天.
Flash是我主要关心的问题之一.当我使用OpenTok时,我注意到Flash有时会崩溃.虽然Flash也会在其他时间崩溃 - 但在将其用于OpenTok时似乎更频繁.我理解Flash有它的好处(对我来说最重要的是我几乎可以指望我的用户拥有它),但我想尽可能探索其他选项.Flash应该是一种垂死的技术?
音频是另一个主要问题.通常会出现回声和明显的延迟.使用相同的设置(互联网连接,计算机,麦克风/扬声器等)并将其与Skype进行比较,显然Skype更加优越.
玩家是我最后的关注点.以下是我不喜欢的事情:
我知道有两种情况会导致以下错误:
ld: warning: instance method 'resetAudioSystem' in category from /opentok-ios-sdk/Opentok.framework/Opentok(OTPublisher+AudioSnoop.o) conflicts with same method from another category
ld: warning: instance method 'attachAudioSnoopBlock:' in category from /opentok-ios-sdk/Opentok.framework/Opentok(OTPublisher+AudioSnoop.o) conflicts with same method from another category
ld: warning: instance method 'setVideoSnoopDelegate:' in category from /opentok-ios-sdk/Opentok.framework/Opentok(OTPublisher+VideoSnoop.o) conflicts with same method from another category
Run Code Online (Sandbox Code Playgroud)
可能性1:类别实例方法被声明两次.(在此描述:SO)
但是,当我搜索3个实例方法中的任何一个(在Xcode或Grep中)时,我发现它没有被声明两次.
可能性2:意外导入.m文件.(在此描述:SO)
但是,我检查了所有的导入,我只在整个项目中导入一次框架.此外,仅在Build Phases中显示一次.
我的程序在没有崩溃的情况下运行,可能是因为使用了添加的最后一个类别定义并且它恰好是正确的.(来源)
问题1:在添加之前,有没有办法告诉两个类别的位置?
问题2:关于如何解决这个问题的任何其他想法?
注意:Opentok Framework是一个二进制文件
发生在:
xcode 4.6&xcode 5
iOS6和iOS7
Android 电信管理器在添加的 VOIP 呼叫中没有传入的音频/声音
我正在尝试在我的应用中添加 VOIP 视频通话。我已经注册了电话帐户并将呼叫添加到 TelecomManager。呼叫被成功接受。我已经实现了 Connection 和 ConnectionService。
我正在使用以下代码添加呼叫。
var uri = Android.Net.Uri.FromParts(PhoneAccount.SchemeSip, voipCallInfo.Payload?.CallerName, null);
extras.PutParcelable(TelecomManager.ExtraIncomingCallAddress, uri);
extras.PutParcelable(TelecomManager.ExtraPhoneAccountHandle, phoneAccountHandle);
telecomManager.AddNewIncomingCall(phoneAccountHandle, extras);
Run Code Online (Sandbox Code Playgroud)
我正在使用下面的代码来接听来电。
var telecomManager = GetTelecomManager();
if (telecomManager == null)
{
logger.Error("Telecom Manager is null, May be permissions not granted");
return;
}
try
{
.
.
.
telecomManager.AcceptRingingCall();
.
.
}
catch (Exception ex)
{
logger.Error("RequestSystemToAnswerCall Exception : " + ex.Message);
}
Run Code Online (Sandbox Code Playgroud)
我试图请求音频焦点,但是当我在电信管理器中添加呼叫时,我的应用程序失去了焦点,因为电话开始响铃。在我接受通话应用程序后,我没有获得焦点,我相信 Telecom/Call 有焦点,但我什么也听不到。通话中的另一个人可以毫无问题地听到我的声音。当我结束通话时,应用程序会重新获得焦点。
我可以在日志中看到下面的内容。
2020-06-22,14:09:34.831 WebRTCManager Trace IsAudioSubscriptionEnabled True
[AudioManager] Use of stream …Run Code Online (Sandbox Code Playgroud) 我正在使用Opentok JavaScript WebRTC库来托管一对一的视频聊天(点对点).我可以看到我的同伴的视频,并完美地听到音频.
我的愿望是录制其他聊天方(远程)的音频/视频.为此,我正在使用RecordRTC.我能够录制其他聊天参与者的视频(视频输出到HTML视频元素),但到目前为止,我还没有成功录制音频(死音静音.wav文件是我能得到的).使用Chrome Canary(30.0.1554.0).这是我的方法:
var clientVideo = $('#peerdiv video')[0];//peer's video (html element)
var serverVideo = $('#myselfdiv video')[0];//my video (html element)
var context = new webkitAudioContext();
var clientStream = context.createMediaStreamSource(clientVideo.webRTCStream);
var serverStream = context.createMediaStreamSource(serverVideo.webRTCStream);
Run Code Online (Sandbox Code Playgroud)
webRTCStream是我通过修改opentok js库的源来分配给HTMLVideoElement对象的自定义属性.它包含链接到相应<video>元素的MediaStream对象.
var recorder = RecordRTC({
video: clientVideo,
stream: clientStream
});
recorder.recordAudio();
recorder.recordVideo();
Run Code Online (Sandbox Code Playgroud)
录制视频.音频文件也被创建,它的长度接近视频的长度,然而,它是完全静音的(是的,录制期间在另一侧产生了很多噪音)
我用视频元素测试了这个,它显示了我的网络摄像头的视频流(和音频),并且它有效:录制了音频和视频:
...
var recorder = RecordRTC({
video: serverVideo,
stream: serverStream
});
...
Run Code Online (Sandbox Code Playgroud)
源自远程位置的流有什么特别之处吗?关于这个问题的任何指导都会非常有帮助.
我正在使用OpenTok并用我自己的包含GPUImage的子类版本替换了他们的Publisher.我的目标是添加过滤器.
应用程序构建并运行,但崩溃在这里:
func willOutputSampleBuffer(sampleBuffer: CMSampleBuffer!) {
let imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer)
CVPixelBufferLockBaseAddress(imageBuffer!, 0)
videoFrame?.clearPlanes()
for var i = 0 ; i < CVPixelBufferGetPlaneCount(imageBuffer!); i++ {
print(i)
videoFrame?.planes.addPointer(CVPixelBufferGetBaseAddressOfPlane(imageBuffer!, i))
}
videoFrame?.orientation = OTVideoOrientation.Left
videoCaptureConsumer.consumeFrame(videoFrame) //comment this out to stop app from crashing. Otherwise, it crashes here.
CVPixelBufferUnlockBaseAddress(imageBuffer!, 0)
}
Run Code Online (Sandbox Code Playgroud)
如果我评论该行,我就可以运行应用程序而不会崩溃.事实上,我看到过滤器正确应用,但它正在闪烁.Nothings发布到Opentok.
我的整个代码库都可以下载.单击此处查看特定文件:这是该类的特定文件.它实际上很容易运行 - 只需在运行之前进行pod安装.
经过检查,可能videoCaptureConsumer是没有初始化.协议参考
我不知道我的代码意味着什么.我直接从这个客观的C文件中翻译了它:Tokbox的示例项目
我们制作了一个应用程序,可以在两个设备(ios,android和web)之间进行视频通话.使用cordova,opentok,nodejs和cordova-opentok-plugin.在测试期间,我们注意到Android设备上的声音有点低,很难听到对方说话.我们测试了应用程序中的声音,并将其与Google Hangouts和普通电话的测试进行了比较.从这些测试中我们可以看到音频在我们的应用程序中处于最大音量.音频流通过所有这些应用程序的呼叫通道和我们自己的应用程序.
我们使用Skype测试了相同的设备,也通过呼叫频道进行了测试,而且Skype上的声音比我们自己的应用程序和Google Hangouts甚至是普通的电话都要大得多.
所以看来Skype已经找到了一种提升Android音频的方法.有谁知道我们如何实现这种音频通道的增强/放大?
提前致谢.
在我使用 OpenTok 的一对一视频通话应用程序中,发布者的视图在进入后台模式并进入前台后变为黑色。订阅者也无法看到视图(只能看到黑框)。
我将发布者和订阅者属性设置为:
publisher.publishVideo = true
subscriber.subscribeToVideo = true
任何解决方案都会非常有帮助。
我试图在我的 android 应用程序中同时拥有 jitsi 和 opentok,并相应地切换它们。
这些是我的 build.gradle(app) 依赖项
//使用opentok依赖
implementation files('libs/opentok-android-sdk-2.15.2.aar')
Run Code Online (Sandbox Code Playgroud)
//使用jitsi依赖
implementation ('org.jitsi.react:jitsi-meet-sdk:2.5.0')
Run Code Online (Sandbox Code Playgroud)
我的构建失败并出现这样的错误
Duplicate class org.webrtc.AudioSource found in modules jetified-opentok-android-sdk-2.15.2-runtime.jar (opentok-android-sdk-2.15.2.aar) and jetified-react-native-webrtc-1.75.2-jitsi-2994175-runtime.jar (com.facebook.react:react-native-webrtc:1.75.2-jitsi-2994175)
Duplicate class org.webrtc.AudioTrack found in modules jetified-opentok-android-sdk-2.15.2-runtime.jar (opentok-android-sdk-2.15.2.aar) and jetified-react-native-webrtc-1.75.2-jitsi-2994175-runtime.jar (com.facebook.react:react-native-webrtc:1.75.2-jitsi-2994175)
Duplicate class org.webrtc.BaseBitrateAdjuster found in modules jetified-opentok-android-sdk-2.15.2-runtime.jar (opentok-android-sdk-2.15.2.aar) and jetified-react-native-webrtc-1.75.2-jitsi-2994175-runtime.jar (com.facebook.react:react-native-webrtc:1.75.2-jitsi-2994175)
Duplicate class org.webrtc.BitrateAdjuster found in modules jetified-opentok-android-sdk-2.15.2-runtime.jar (opentok-android-sdk-2.15.2.aar) and jetified-react-native-webrtc-1.75.2-jitsi-2994175-runtime.jar (com.facebook.react:react-native-webrtc:1.75.2-jitsi-2994175)
Duplicate class org.webrtc.CallSessionFileRotatingLogSink found in modules jetified-opentok-android-sdk-2.15.2-runtime.jar (opentok-android-sdk-2.15.2.aar) and jetified-react-native-webrtc-1.75.2-jitsi-2994175-runtime.jar (com.facebook.react:react-native-webrtc:1.75.2-jitsi-2994175)
Duplicate class org.webrtc.Camera1Capturer found in modules jetified-opentok-android-sdk-2.15.2-runtime.jar (opentok-android-sdk-2.15.2.aar) and …Run Code Online (Sandbox Code Playgroud)