当前:多媒体管道复用器
Kurento: multiple mediapipeline mux
我正在考虑创建一个 kms 过滤器,它将输入作为 2 个媒体管道 (A) (B) 并输出一个媒体管道 (C),视频来自第一个媒体管道 (A),音频来自第二个媒体管道 (B) .
我很困惑,我应该在 java 级别上执行此操作还是在 KMS 过滤级别上执行此操作,是否有可能在 Java/KMS 过滤层中实现此操作?
通过媒体管道,我认为你指的是媒体源,对吧?无法混合来自不同管道的媒体。
您可以使用 Composite
混合器元素进行检查。它从未经过测试,但它应该可以工作。将来自 B 的音频和来自 A 的视频混合在一起会非常简单。假设您通过 WebRtcEndpoint
获取该媒体
Composite composite = new Composite.Builder(pipeline).build();
HubPort hubPortA = new HubPort.Builder(composite).build();
webRtcA.connect(hubPortA, MediaType.VIDEO);
HubPort hubPortB = new HubPort.Builder(composite).build();
webRtcB.connect(hubPortB, MediaType.AUDIO);
WebRtcEndpoint
为清楚起见,未显示创建和协商。
编辑 1
以为你可能想要混合更多的不仅仅是这两个,但正如@santoscadenas 指出的那样,如果你只想混合两个不同类型的流,你可以直接使用 WebRtcEndpoint
。这也将节省资源并更好地扩展,因为 Composite
是一个非常饥饿的东西。取自其他答案,并根据您的命名约定进行调整,它将是
webRtcA.connect(webRtcOut, MediaType.VIDEO);
webRtcB.connect(webRtOut, MediaType.AUDIO);
最简单的方法是在一个管道中创建所有内容,因为不同的媒体管道无法轻松共享媒体。都可以从客户端实现(java 或 js)。
您可以从两个 Endpoints
(例如 WebRtcEndpoints
)、webRtcEp1
和 webRtcEp2
接收媒体并使用 webRtcEpOut
发射。然后像这样连接它们:
webRtcEp1.connect (webRtcEpOut, MediaType.AUDIO);
webRtcEp2.connect (webRtcEpOut, MediaType.VIDEO);
此时,WebRctOut
正在从 webRtcEp1
发出音频,从 webRtcEp2
发出视频。
我正在考虑创建一个 kms 过滤器,它将输入作为 2 个媒体管道 (A) (B) 并输出一个媒体管道 (C),视频来自第一个媒体管道 (A),音频来自第二个媒体管道 (B) .
我很困惑,我应该在 java 级别上执行此操作还是在 KMS 过滤级别上执行此操作,是否有可能在 Java/KMS 过滤层中实现此操作?
通过媒体管道,我认为你指的是媒体源,对吧?无法混合来自不同管道的媒体。
您可以使用 Composite
混合器元素进行检查。它从未经过测试,但它应该可以工作。将来自 B 的音频和来自 A 的视频混合在一起会非常简单。假设您通过 WebRtcEndpoint
Composite composite = new Composite.Builder(pipeline).build();
HubPort hubPortA = new HubPort.Builder(composite).build();
webRtcA.connect(hubPortA, MediaType.VIDEO);
HubPort hubPortB = new HubPort.Builder(composite).build();
webRtcB.connect(hubPortB, MediaType.AUDIO);
WebRtcEndpoint
为清楚起见,未显示创建和协商。
编辑 1
以为你可能想要混合更多的不仅仅是这两个,但正如@santoscadenas 指出的那样,如果你只想混合两个不同类型的流,你可以直接使用 WebRtcEndpoint
。这也将节省资源并更好地扩展,因为 Composite
是一个非常饥饿的东西。取自其他答案,并根据您的命名约定进行调整,它将是
webRtcA.connect(webRtcOut, MediaType.VIDEO);
webRtcB.connect(webRtOut, MediaType.AUDIO);
最简单的方法是在一个管道中创建所有内容,因为不同的媒体管道无法轻松共享媒体。都可以从客户端实现(java 或 js)。
您可以从两个 Endpoints
(例如 WebRtcEndpoints
)、webRtcEp1
和 webRtcEp2
接收媒体并使用 webRtcEpOut
发射。然后像这样连接它们:
webRtcEp1.connect (webRtcEpOut, MediaType.AUDIO);
webRtcEp2.connect (webRtcEpOut, MediaType.VIDEO);
此时,WebRctOut
正在从 webRtcEp1
发出音频,从 webRtcEp2
发出视频。