如何在Red5中检测实时流分辨率? 我重写streamPublishStart(IBroadcastStream流),在那里(如果我错了,请纠正我)流启动:
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.getMetaData()。getHeader(),但它给了我 Header为null 错误。 我google了问题,我找不到任何解决方案。
答案 0 :(得分:0)
您需要解码传入的数据以获取所需的信息。 Red5不会对开箱即用的流进行解码。我们提取的唯一信息是AVC和AAC编码" config"数据,我不会称之为"解码"每本身。该配置仅提供有关AVC / h.264或AAC媒体的最少量信息。您可以在这两个类中看到配置信息:
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。您可以通过扩展此类或创建自己的侦听器来查看传入的音频和视频数据。
最后,如果广播公司或文件源提供了元数据内容,getMetaData()方法只会向您返回一些有价值的东西;另外," Header"不会包含比特率。
MetaData类:https://github.com/Red5/red5-io/blob/master/src/main/java/org/red5/io/flv/meta/MetaData.java
答案 1 :(得分:0)
由于这不是直接可行的,我将使用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: '
感谢Mondain。