java - vlcj Mediastatistic do not show stats
问题描述
I have been struggling with this for a very long time. I did not find information on the Internet on this issue. And I don't understand why the statistics aren't displayed. I stream videos from webcams.
0 - audioBuffersPlayed()
0 - decodedAudio()
0 - decodedVideo()
55.4688 - demuxBitrate()
-1308714496 - demuxBytesRead()
0 - demuxCorrupted()
0 - demuxDiscontinuity()
0.0 - inputBitrate()
0 - inputBytesRead()
0 - picturesDisplayed()
0 - picturesLost()
0.0 - sendBitrate()
0 - sentBytes()
0 - sentPackets()
My code:
class Stream(
private val videoCodec: String,
private val audioCodec: String,
private val bitRate: Int,
private val dr: DisplayResolution,
private val protocol: String
) {
private val mediaPlayerFactory: MediaPlayerFactory
private val mediaPlayer: MediaPlayer
private val isHttpProtocol: Boolean = protocol == "http"
private var hwInfo: HardwareInfo = HardwareInfo()
private val mediaStatistics = MediaStatistics()
init {
val media: String = "dshow://" //"screen://" "dshow://"
val deviseOptions: String = formatOptions()
val streamOptions: String = formatRtspStream(deviseOptions, "localhost", 8080, "demo")
mediaPlayerFactory = MediaPlayerFactory(media)
mediaPlayer = mediaPlayerFactory.mediaPlayers().newMediaPlayer()
if (isHttpProtocol) {
mediaPlayer.media().play(
media,
streamOptions,
)
} else {
mediaPlayer.media().play(
media,
streamOptions,
"encoding etc",
":no-sout-rtp-sap",
":no-sout-standard-sap",
":sout-all",
":sout-keep",
)
}
TaskController.add(createTask(it), 1000L)
}
private fun formatOptions(): String {
var options: String = ""
options += ":sout=#transcode{"
options += "vcodec=$videoCodec,"
options += "vb=$bitRate,"
options += "fps=25,"
options += "scale=1,"
options += "acodec=$audioCodec,"
options += "ab=252," //128
options += "channels=2,"
options += "samplerate=44100,"
options += "weight=${dr.weight},"
options += "height=${dr.height}"
options += "}"
return options
}
private fun formatRtspStream(deviseOptions: String, serverAddress: String, serverPort: Int, id: String): String {
return if (isHttpProtocol) "$deviseOptions:duplicate{dst=std{access=http,mux=ts,dst=$serverAddress:$serverPort}}"
else "$deviseOptions:rtp{sdp=rtsp://@$serverAddress:$serverPort/$id}"
}
private fun createTask(dc: DynamicChart): TimerTask {
return timerTask {
val info = mediaPlayer.media().info().statistics(mediaStatistics)
println(mediaStatistics.sendBitrate())
println(mediaStatistics.decodedAudio())
println(mediaStatistics.demuxBitrate())
println(mediaStatistics.inputBitrate())
println(mediaStatistics.demuxDiscontinuity())
// And so on...
}
}
"TaskContorller" Simply manages start / stop tasks. I use the http or rtsp protocol. But in both cases only demuxBitrate is displayed from the statistics. Streaming video is broadcast, and everything works fine except for statistics. Please help me.
解决方案
推荐阅读
- amazon-s3 - 如何正确搜索 AWS S3 存储桶上的对象?(list_objects 最多只能返回 1000 个键)
- javascript - 过滤数组数组中的重复项
- spring - 在 Spring Boot 中选择性地应用 JPA 存储库 BootstrapMode
- wamp - 尝试运行 WAMP 时出现错误消息(Windows 10)
- jquery - 添加新项目时的购物车模式 - rails 5 jquery
- python - 运行 python unittest 直到它失败
- android - BigQuery 时间戳时区
- javascript - amChart 日期轴偏移
- dns - 域映射 - 您可以使用 CNAME 代替“a”记录吗
- python - 为什么它跳过 else 语句而不传递正确的图像?