首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Swift-NIO数据报的ChannelInboundHandler中未调用channelRead

在Swift-NIO数据报的ChannelInboundHandler中未调用channelRead
EN

Stack Overflow用户
提问于 2021-07-08 01:23:51
回答 1查看 70关注 0票数 1

我正在尝试在运行在Xcode中的(新的)蒸汽应用程序中捕获UDP视频流。数据是由ffmpeg流式传输的,我可以使用VLC在目标机器上成功地查看流,VLC也是使用udp://0.0.0.0:5000运行蒸汽应用程序的机器。我已经使用了Apple文档的不同部分来获得下面的代码。当我运行它时,我在控制台日志上得到了以下几行输出,但我想知道它们是否不相关:

代码语言:javascript
复制
2021-07-07 17:59:27.102681+0100 Run[10550:2494617] [si_destination_compare] send failed: Invalid argument
2021-07-07 17:59:27.104056+0100 Run[10550:2494617] [si_destination_compare] send failed: Undefined error: 0

在configure.swift中:

try setupClient()

这是客户端代码:

代码语言:javascript
复制
final class FrameHandler : ChannelInboundHandler {
    typealias InboundIn = AddressedEnvelope<ByteBuffer>
    typealias OutboundOut = AddressedEnvelope<ByteBuffer>

    func channelRead(ctx: ChannelHandlerContext, data: NIOAny) {
        // minimal for question
    }
    
    func errorCaught(ctx: ChannelHandlerContext, error: Error) {
        // minimal for question
    }
}

func setupClient() throws {
    let group = MultiThreadedEventLoopGroup(numberOfThreads: 1)
    let bootstrap = DatagramBootstrap(group: group)
        .channelOption(ChannelOptions.socketOption(.so_reuseaddr), value: 1)
        .channelInitializer { channel in
            channel.pipeline.addHandler(FrameHandler())
    }
    defer {
        try! group.syncShutdownGracefully()
    }

    let channel = try bootstrap.bind(host: "0.0.0.0", port: 5000).wait()
    try channel.closeFuture.wait()
}

问题是,尽管调用了channelRegisteredchannelActive,然后是永无止境的readComplete流,但重要的一点是channelRead永远不会被调用- errorCaught也不会。如果我注释掉对setupClient的调用,则没有网络活动,但是,如果它运行,则Xcode的网络监视器显示与ffmpeg中的级别一致的活动。所以,我相信连接正在建立中。

我想知道问题是否出在我设置处理程序的方式上?所有示例都使用echo或反射聊天示例,因此入站处理程序是使用上下文在数据写入函数的闭包中设置的,而不是将其添加到初始化器中(尽管出站处理程序是以这种方式设置的)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-08 02:01:46

我假设您使用的是基于SwiftNIO 2的Vapor4。在NIO2中,ChannelHandlerContext变量称为context,而不是ctx。因此,如果您只需将所有ctx重命名为context,我假设它会起作用。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68290563

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档