我正在尝试在适用于 iOS 和 Android 的 Cordova 混合应用程序中包含流媒体服务。我们选择 red5pro 是因为它是 1 个广播者对 n 个订阅者的情况,而且他们因为我们需要一个向订阅者广播的服务器。广播只是通过笔记本电脑上的网络浏览器完成的,这没有问题,但接收将在应用程序内部。
red5pro 有 3 个用于 HTML 流、原生 Android 和原生 iOS 的示例用例。我们正在开发一个混合移动应用程序,所以我们选择了 HTML 方法。
我们做了一个测试设置,你可以在任何网络浏览器中打开一个 URL 并查看 Steam,它在 firefox、chrome 和 safari 上运行良好。但是,如果我们尝试在 Android 设备上通过 chrome 打开流,我们会收到以下错误消息:
2017-11-10T15:57:26.862Z - [red5pro-sdk] error: (RTCSubscriber) [onsdperror] red5pro-sdk.min.js:9
2017-11-10T15:57:26.877Z - [red5pro-sdk] error: (OperationError: Failed to set remote offer sdp: Session error code: ERROR_CONTENT. Session error description: Failed to set remote video description send parameters..) undefined red5pro-sdk.min.js:9
Uncaught (in promise) Invalid SDP.
value @ red5pro-sdk.min.js:9
(anonymous) @ red5pro-sdk.min.js:9
Promise rejected (async)
value @ red5pro-sdk.min.js:9
value @ red5pro-sdk.min.js:9
value @ red5pro-sdk.min.js:9
value @ red5pro-sdk.min.js:9
e.onmessage @ red5pro-sdk.min.js:9
2017-11-10T15:57:26.889Z - [red5pro-sdk] error: (RTCSubscriber)[onsdperror] red5pro-sdk.min.js:9
2017-11-10T15:57:26.892Z - [red5pro-sdk] error: (OperationError: Failed to set local sdp: Session error code: ERROR_CONTENT. Session error description: Failed to set remote video description send parameters..) undefined red5pro-sdk.min.js:9
2017-11-10T15:57:31.059Z - [red5pro-sdk] error: (RTCSubscriber) Error in stream subscription: Session start failed for lukas.
订阅流完成后会出现“无效 SDP”此消息。
我的客户端示例代码:HTML:
<!doctype html>
<html>
<head>
<!-- Recommended shim for cross-browser WebRTC support. -->
<script src="https://webrtc.github.io/adapter/adapter-latest.js">
</script>
<!-- Default Red5 Pro Playback Control styles. -->
<link href="lib/red5pro/red5pro-media.css" rel="stylesheet">
<!-- Fullscreen shim. -->
<script src="lib/screenfull/screenfull.min.js"></script>
</head>
<body>
<video id="red5pro-subscriber"
class="red5pro-media red5pro-media-background"
autoplay controls>
</video>
<!-- Exposes `red5prosdk` on the window global. -->
<script src="lib/red5pro/red5pro-sdk.min.js"></script>
<!-- Example script below. -->
<script src="js/main.js"></script>
</body>
</html>
和 Main.js:
(function (red5prosdk) {
// Create a new instance of the WebRTC subcriber.
var subscriber = new red5prosdk.RTCSubscriber();
// Initialize
subscriber.init({
protocol: 'wss',
port: 8083,
host: 'our.host.url',
app: 'live',
streamName: 'chosenStreamname',
iceServers: [{urls: 'stun:stun2.l.google.com:19302'}],
bandwidth: {
audio: 56,
video: 128
}
})
.then(function(subscriber) {
// `subcriber` is the WebRTC Subscriber instance.
subscriber.subscribe();
})
.then(function(subscriber) {
// subscription is complete.
// playback should begin immediately due to
// declaration of `autoplay` on the `video` element.
})
.catch(function(error) {
// A fault occurred while trying to initialize and playback the stream.
console.error(error)
});
})(window.red5prosdk);
该流既不适用于 iOS Safari,也不适用于 Android chrome。有人有这种设置的经验并且可以提供帮助吗?