ありがとうございました!SwiftでLinphone SDKのパスを整形する際に問題が発生しました
私は、Mac OS上でスウィフトでLinphoneはSDKを使用して通話を録音しようとしている、とのトラブル関数にパスを渡すことが生じています:正しく動作
func linphone_call_params_set_record_file(_ cp: OpaquePointer!, _ path: UnsafePointer<Int8>!)
は(SDKはCで書かれています私はSwiftとブリッジヘッダーを使用してアクセスしていますが)。 Linphone SDKは正常に動作し、完全なオーディオサポートを使用してプログラムで呼び出しを行い、受け取ることができます。 Iは、記録ファイルを保存したい
let pathtofile = "/Users/Alex/Safety/1.wav"
:コールレコーダーを起動しようとする際に
は、Iのような、この機能をパス(pathtofile
)を渡します。
func SafetyNetAVRecorderInitializer(pathtofile: String) -> Bool {
// Convert pathtofile to UnsafePointer<Int8>.
let cpathtofile = (pathtofile as NSString).utf8String
let path = UnsafeMutablePointer<Int8>(mutating: cpathtofile)
// Actually begin call recording.
if currentcall != nil {
let currentcallparameters = linphone_call_get_current_params(currentcall)
linphone_call_params_set_record_file (currentcallparameters, path)
linphone_call_start_recording(currentcall)
return true
}
return false
}
んが、実行時エラーがlinphone_call_params_set_record_file()
に遭遇されていないが、私はlinphone_call_start_recording()
を起動しようとすると、録音が開始されていない、とエラーが読み込み、コンソールに出力されます。
ortp、エラー - linphone_call_start_recording():出力ファイルが指定されていません。 linphone_call_params_set_record_file()を使用してください。
linphone_call_params_set_record_file()
に有効なパスを正しく渡すにはどうすればよいですか?私はUnsafePointer<Int8>
の代わりに無地のスウィフトString
を直接渡してみました。パスがCでどのようにフォーマットされているのか誤解していますか?参考のため
、SDKメソッドのソースは次のとおりです。
void linphone_call_params_set_record_file(LinphoneCallParams *cp, const char *path){
if (cp->record_file){
ms_free(cp->record_file);
cp->record_file=NULL;
}
if (path) cp->record_file=ms_strdup(path);
}
おかげで再び!
は、unfortunately--はしかし、あなたの助けをありがとう! – kmypwn
@kmypwnあなたは本当に[パススルーパス](http://stackoverflow.com/a/41308592/819340) 'pathtofile:String'も本当にできるはずです。あなたのバグは他の場所にあるかもしれません... :-( –
Linphone SDKについてのより深い知識を持っている人が、洞察を得られることを願っています。 – kmypwn