Pun*_*uLz 19 https android rtsp gstreamer gstreamer-1.0
我有一个通过HTTPS进行RTSP的流.
握手是安全的(通过https),但握手完成后的数据未加密(在RTSP中).
默认情况下,GStreamer不会流式传输,因为它也希望数据加密(在RTSPS中),这不是我的情况.
我尝试了很多东西但似乎没什么用.例如,在我开始获取流后,我尝试将其写入本地端口并将该URL传递给GStreamer,但它不会播放.
我是这个GStreamer的新手,所以我对玩家的了解有限.我正在寻找一种方法来通过GStreamer完成握手,这是HTTPS(安全),然后我得到的流没有加密.如果有人做过类似的事情,请告诉我任何流式RTSP的方法.我尝试过类似的东西
nativeSetPipeline("rtspsrc location=rtsph://<URL of the video stream> latency=100 ! rtph264depay ! avdec_h264 ! glimagesink");
Run Code Online (Sandbox Code Playgroud)
上面的管道默认工作,GStreamer通过HTTP播放RTSP,但是当我通过HTTPS尝试RTSP时
nativeSetPipeline("rtspsrc debug = TRUE do-rtcp=false location=\"rtspsh://<secured URL of the stream>" latency=100 do-rtsp-keep-alive=true ! rtph264depay ! avdec_h264 ! glimagesink");
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为GStreamer也希望流也得到保护.有关如何通过HTTPS流式传输RTSP的任何想法/代码段或示例?我使用的当前版本是1.10.4.
因为我找不到任何方法让 GStreamer 在内部完成所有工作。我写了一个中间层。它充当我的服务器和 GStreamer 之间的接口。我打开了两个套接字连接。一个在我的中间层和服务器之间,另一个在 GStreamer 和我的中间层之间。我的中间层和 GStreamer 之间的套接字是本地主机。
channel = ServerSocketChannel.open();
channel.configureBlocking(false);
InetAddress ih = InetAddress.getLocalHost();
InetSocketAddress isa = new InetSocketAddress(inetAddress, inetPort);
channel.socket().bind(isa);
Run Code Online (Sandbox Code Playgroud)
用于我的中间层和服务器之间的通信。我有一个 SSL 连接,类似的东西。
SocketFactory socketFactory = SSLSocketFactory.getDefault();
socket = socketFactory.createSocket(serverAddress, serverPort);
if (null == dataInputStream) {
dataInputStream = new DataInputStream(socket.getInputStream());
}
if (null == inputStreamReader) {
inputStreamReader = new InputStreamReader((socket.getInputStream()));
}
Run Code Online (Sandbox Code Playgroud)
我定义了两个传输数据/消息的接口。所以基本上我让 SSL Socket 帮我与服务器进行握手。我使用接口将从服务器获取的数据/消息传递到中间层,然后写入 GStreamer。同样,无论我使用接口从 GStreamer 获取什么数据/消息,我都会将其传递到中间层,然后将其写入服务器。我用于 GStreamer 的管道是。
pipelineURL = String.format("playbin uri=\"%s\" ! rtpjitterbuffer ! rtph264depay ! avdec_h264 ! xvimagesink", url);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1104 次 |
| 最近记录: |