ExoPlayer 无法与摄像机 IP 地址建立连接

Posted

技术标签:

【中文标题】ExoPlayer 无法与摄像机 IP 地址建立连接【英文标题】:ExoPlayer unable to make connection with camera IP Address 【发布时间】:2018-03-12 19:26:25 【问题描述】:

我正在尝试使用 RTMP 协议在应用程序中流式传输相机预览。一周以来,我正在调试 ExoPlayer 和 Librtmp 客户端,但不知何故,Librtmp 客户端无法建立连接并触发 RtmpIOException,内部出现 ECONNREFUSED 错误。尝试使用 Socket 编程,但得到了同样的错误。 IP ping 工作正常。我的同事最近在 Librtmp GitHub repo 上提交了一个问题。自 1 月以来,Devs 没有回复。

我们尝试使用其他库,如 IJKPlayer(内部使用 FFmpeg),它能够流式预览,但在流式预览之前有更多的延迟以及相机 wifi 断开连接问题。由于使用 JNI 构建,无法在内部进一步调试。

代码:

private val bandwidthMeater = DefaultBandwidthMeter()
private val adaptiveTrackSelectionFactory = AdaptiveTrackSelection.Factory(bandwidthMeater)
private val trackSelector = DefaultTrackSelector(adaptiveTrackSelectionFactory)

private val player = ExoPlayerFactory.newSimpleInstance(context, trackSelector)

fun init() 
    player.setVideoSurface(holder.surface)


fun startStream(streamUrl: String, startListener: () -> Unit) 
    //e.g. streamUrl = rtmp://192.168.42.5:1936/live/myStream (IP is android device IP provide by camera when connected to its wifi)
    val rtmpDatasourceFactory = RtmpDatasource.RtmpDataSourceFactory()
    val factory = ExtractorMediaSource.Factory(rtmpDatasourceFactory)
    val extractorMediaSource =factory.createMediaSource(Uri.parse(streamUrl))   

    player.prepare(extractorMediaSource)
    player.playWhenReady = true

ExoPlayer 错误:

E/ExoPlayerImplInternal: Source error.
       net.butterflytv.rtmp_client.RtmpClient$RtmpIOException
           at net.butterflytv.rtmp_client.RtmpClient.open(RtmpClient.java:56)
           at com.google.android.exoplayer2.ext.rtmp.RtmpDataSource.open(RtmpDataSource.java:57)
           at com.google.android.exoplayer2.source.ExtractorMediaPeriod$ExtractingLoadable.load(ExtractorMediaPeriod.java:841)
           at com.google.android.exoplayer2.upstream.Loader$LoadTask.run(Loader.java:308)
           at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
           at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
           at java.lang.Thread.run(Thread.java:818)

连接错误:

java.net.ConnectException: failed to connect to /192.168.42.5 (port 1936): connect failed: ECONNREFUSED (Connection refused)

【问题讨论】:

引用github.com/ant-media/LibRtmp-Client-for-Android/issues/59 【参考方案1】:

您是否在运行时请求许可?

每次我遇到这种类型的错误,这就是我忘记做的事情。

https://developer.android.com/training/permissions/requesting#java

【讨论】:

以上是关于ExoPlayer 无法与摄像机 IP 地址建立连接的主要内容,如果未能解决你的问题,请参考以下文章

电脑出现ip地址错误网络连不上网怎么办

海康网络录像机上网设置

大华录像机怎么导出IP

OpenCV 无法流式传输 IP 摄像机

如何给海康摄像头修改IP地址

海康威视摄像头ip地址怎么查