gpt4 book ai didi

swift - 音频流在哪里添加libjingle?

转载 作者:可可西里 更新时间:2023-11-01 02:10:03 33 4
gpt4 key购买 nike

我找不到将音频流添加到“扬声器”的位置。有没有可能我自己修改流,以后再添加?我感觉 libjingle 正在处理流并添加它。

我已经在我的代码中添加了 libjingle 部分:

import AVFoundation
import UIKit

let TAG = "ViewController"
let AUDIO_TRACK_ID = TAG + "AUDIO"
let LOCAL_MEDIA_STREAM_ID = TAG + "STREAM"

class ViewController: UIViewController, RTCSessionDescriptionDelegate, RTCPeerConnectionDelegate {

var mediaStream: RTCMediaStream!
var localAudioTrack: RTCAudioTrack!
var remoteAudioTrack: RTCAudioTrack!
var renderer: RTCEAGLVideoView!
var renderer_sub: RTCEAGLVideoView!
var roomName: String!

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.

initWebRTC();
sigConnect(wsUrl: "http://192.168.1.59:3000");

localAudioTrack = peerConnectionFactory.audioTrack(withID: AUDIO_TRACK_ID)
mediaStream = peerConnectionFactory.mediaStream(withLabel: LOCAL_MEDIA_STREAM_ID)
mediaStream.addAudioTrack(localAudioTrack)
}

var peerConnectionFactory: RTCPeerConnectionFactory! = nil
var peerConnection: RTCPeerConnection! = nil
var pcConstraints: RTCMediaConstraints! = nil
var audioConstraints: RTCMediaConstraints! = nil
var mediaConstraints: RTCMediaConstraints! = nil

var wsServerUrl: String! = nil
var peerStarted: Bool = false

func initWebRTC() {
RTCPeerConnectionFactory.initializeSSL()
peerConnectionFactory = RTCPeerConnectionFactory()

pcConstraints = RTCMediaConstraints()
audioConstraints = RTCMediaConstraints()
mediaConstraints = RTCMediaConstraints(
mandatoryConstraints: [
RTCPair(key: "OfferToReceiveAudio", value: "true"),
],
optionalConstraints: nil)
}

func prepareNewConnection() -> RTCPeerConnection {
var icsServers: [RTCICEServer] = []

icsServers.append(RTCICEServer(uri: NSURL(string: "stun:stun.l.google.com:19302") as URL!, username: "",
password: ""))

let rtcConfig: RTCConfiguration = RTCConfiguration()
rtcConfig.tcpCandidatePolicy = RTCTcpCandidatePolicy.disabled
rtcConfig.bundlePolicy = RTCBundlePolicy.maxBundle
rtcConfig.rtcpMuxPolicy = RTCRtcpMuxPolicy.require

peerConnection = peerConnectionFactory.peerConnection(withICEServers: icsServers, constraints: pcConstraints, delegate: self)
peerConnection.add(mediaStream);
return peerConnection;
}


func peerConnection(_ peerConnection: RTCPeerConnection!, signalingStateChanged stateChanged: RTCSignalingState) {
}

func peerConnection(_ peerConnection: RTCPeerConnection!, iceConnectionChanged newState: RTCICEConnectionState) {
}

func peerConnection(_ peerConnection: RTCPeerConnection!, iceGatheringChanged newState: RTCICEGatheringState) {
}

func peerConnection(_ peerConnection: RTCPeerConnection!, gotICECandidate candidate: RTCICECandidate!) {
if (candidate != nil) {
print("iceCandidate: " + candidate.description)
let json:[String: AnyObject] = [
"type" : "candidate" as AnyObject,
"sdpMLineIndex" : candidate.sdpMLineIndex as AnyObject,
"sdpMid" : candidate.sdpMid as AnyObject,
"candidate" : candidate.sdp as AnyObject
]
sigSend(msg: json as NSDictionary)
} else {
print("End of candidates. -------------------")
}
}

func peerConnection(_ peerConnection: RTCPeerConnection!, addedStream stream: RTCMediaStream!) {
if (peerConnection == nil) {
return
}

if (stream.audioTracks.count > 1) {
print("Weird-looking stream: " + stream.description)
return
}
}

func peerConnection(_ peerConnection: RTCPeerConnection!, removedStream stream: RTCMediaStream!) {
}

func peerConnection(_ peerConnection: RTCPeerConnection!, didOpen dataChannel: RTCDataChannel!) {
}

func peerConnection(onRenegotiationNeeded peerConnection: RTCPeerConnection!) {

}
}

我的想法是,我可以在这个命令下的函数中捕获音频流。那是对的吗?另外,我可以手动将流添加到扬声器吗?

 func peerConnection(_ peerConnection: RTCPeerConnection!, addedStream stream: RTCMediaStream!) {
if (peerConnection == nil) {
return
}

if (stream.audioTracks.count > 1) {
print("Weird-looking stream: " + stream.description)
return
}
}

最佳答案

当 webRTC 调用连接时,Webrtc 堆栈使用平台 API 来播放或录制音频。你只能控制类似

的东西
  1. 将音频流静音或取消静音
  2. 使用系统 API 来增大或减小音量或更改音频配置

您不能手动将流添加到扬声器,但您可以选择将默认音频输出更改为扬声器或耳机,以便将 webrtc 音频重定向到正确的输出。这可以使用 avfoundation API 来完成

关于swift - 音频流在哪里添加libjingle?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41251916/

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