如何检测 Red5 中的实时流分辨率?
How do I detect live stream resolution in Red5?
如何检测 Red5 中的实时流分辨率?
我确实覆盖了 streamPublishStart(IBroadcastStream stream) 流开始的地方(如果我错了请纠正我):
public void streamPublishStart(IBroadcastStream stream) {
IConnection connection = Red5.getConnectionLocal();
log.info("W3C x-category:stream x-event:publish c-ip:{} x-sname:{} x-name:{}",
new Object[] { connection != null ? connection.getRemoteAddress() : "0.0.0.0", stream.getName(), stream.getPublishedName() });
}
我可以在哪里访问 stream 对象。
我如何检查它的分辨率?
我确实尝试过 stream.getMetaData().getHeader() 但它给了我 Header is null 错误。
我用谷歌搜索了问题,但找不到任何解决方案。
您需要对传入的数据进行解码以获取所需的信息。 Red5 不解码流 out-of-the-box。我们提取的唯一信息是 AVC 和 AAC 编码的 "config" 数据,我不会称其为 "decoding" per-se。该配置只会为您提供有关 AVC/h.264 或 AAC 媒体的最少量信息。在这两个class中可以看到配置信息:
https://github.com/Red5/red5-io/blob/master/src/main/java/org/red5/codec/AVCVideo.java
https://github.com/Red5/red5-io/blob/master/src/main/java/org/red5/codec/AACAudio.java
您发布的方法签名中显示的 "stream" 在大多数(如果不是所有)情况下都是 ClientBroadcastStream。您可以通过扩展此 class 或创建自己的侦听器来查看传入的音频和视频数据。
最后,如果广播公司或文件源提供了元数据内容,则 getMetaData() 方法只会 return 对您有价值的东西;此外,"Header" 将不包含比特率。
元数据class:https://github.com/Red5/red5-io/blob/master/src/main/java/org/red5/io/flv/meta/MetaData.java
Header class: https://github.com/Red5/red5-server-common/blob/master/src/main/java/org/red5/server/net/rtmp/message/Header.java
因为这不可能直接实现,所以我将使用 ffmpeg 下载 5s 部分,然后使用 ffprobe 检查它的比特率:
ffmpeg -t 5 -re -i "rtmp://192.168.1.102/ntcServer/glosno live=1 timeout=5" -y -c copy test.flv
ffprobe -pretty test.flv 2>&1 | egrep 'bitrate: '
谢谢蒙丹。
如何检测 Red5 中的实时流分辨率? 我确实覆盖了 streamPublishStart(IBroadcastStream stream) 流开始的地方(如果我错了请纠正我):
public void streamPublishStart(IBroadcastStream stream) {
IConnection connection = Red5.getConnectionLocal();
log.info("W3C x-category:stream x-event:publish c-ip:{} x-sname:{} x-name:{}",
new Object[] { connection != null ? connection.getRemoteAddress() : "0.0.0.0", stream.getName(), stream.getPublishedName() });
}
我可以在哪里访问 stream 对象。 我如何检查它的分辨率? 我确实尝试过 stream.getMetaData().getHeader() 但它给了我 Header is null 错误。 我用谷歌搜索了问题,但找不到任何解决方案。
您需要对传入的数据进行解码以获取所需的信息。 Red5 不解码流 out-of-the-box。我们提取的唯一信息是 AVC 和 AAC 编码的 "config" 数据,我不会称其为 "decoding" per-se。该配置只会为您提供有关 AVC/h.264 或 AAC 媒体的最少量信息。在这两个class中可以看到配置信息:
https://github.com/Red5/red5-io/blob/master/src/main/java/org/red5/codec/AVCVideo.java
https://github.com/Red5/red5-io/blob/master/src/main/java/org/red5/codec/AACAudio.java
您发布的方法签名中显示的 "stream" 在大多数(如果不是所有)情况下都是 ClientBroadcastStream。您可以通过扩展此 class 或创建自己的侦听器来查看传入的音频和视频数据。
最后,如果广播公司或文件源提供了元数据内容,则 getMetaData() 方法只会 return 对您有价值的东西;此外,"Header" 将不包含比特率。
元数据class:https://github.com/Red5/red5-io/blob/master/src/main/java/org/red5/io/flv/meta/MetaData.java
Header class: https://github.com/Red5/red5-server-common/blob/master/src/main/java/org/red5/server/net/rtmp/message/Header.java
因为这不可能直接实现,所以我将使用 ffmpeg 下载 5s 部分,然后使用 ffprobe 检查它的比特率:
ffmpeg -t 5 -re -i "rtmp://192.168.1.102/ntcServer/glosno live=1 timeout=5" -y -c copy test.flv
ffprobe -pretty test.flv 2>&1 | egrep 'bitrate: '
谢谢蒙丹。