我的要求是获取 iphone 相机源,将其编码为 H264 格式并将其发送到服务器。在搜索中,我发现使用 x264 (libx264) 的 ffmpeg lib 可以进行编码部分。但现在下一个任务是使用 rtsp 将编码数据发送到 Wowza 服务器。
如果有人知道这一点,请分享一些代码或有用的文档。
还有另一个用于编码目的的库 live555。但我不确定它是否可以使用 rtsp 将数据发送到服务器。
实际上,我制作了一个 iOS 流媒体应用程序(以 wowza 作为流媒体服务器)
我相信您只能使用具有 rtsp 协议的 FFmpeg 流式传输视频,尽管 FFmpeg 并不完全支持它
但是,使用 ffmpeg,您可以获得有效的 SDP 并使用 RTCP 协议将其传递给 wowza - ANNOUNCE OPTION SETUP RECORD -
我没有使用 FFmpeg 进行编码,但是如果您可以获得原始 H264 数据,您可以将其打包以使用rfc6184制作有效的 RTP 数据包
编辑:这是连接 wowza 的示例:
NSString* response = [NSString stringWithFormat:@"ANNOUNCE %@ RTSP/1.0\r\n",self->addr];
response = [response stringByAppendingFormat:@"CSeq: %d\r\n",self->cseq];
response = [response stringByAppendingFormat:@"Content-Type: application/sdp\r\nContent-Length: %d\r\n\r\n", [self->sdp length] ];
response = [response stringByAppendingString:self->sdp];
NSString* result = [self sendAndRecvData:response];
其中 sendAndRecvData 是绑定到 wowza_ip:1935 的 tcp 套接字
您可以对 SETUP 使用相同类型的代码,它将发回您应该发送数据的 RTP (+RTCP) 端口
您使用 live555 ,您可以使用设备上的实时 555 服务器发送音频和视频,这将为您提供 rtsp+rtcp 流到 wowza,因为直播 555 有一个不受支持的 dss 模块。
Wowza 有一个名为 GoCoder 的 iPhone 应用程序,它将实时编码流发送到 Wowza 服务器。
您可以使用 RTMP 而不是 RTSP 直接流式传输到 Wowza 服务器。ffmpeg 命令类似于:
ffmpeg -re -i localFile.mp4 -c copy -f flv rtmp://server/live/streamName
只要您将输出格式指定为 flv 并将输出目标指定为 rtmp://xxx ,那么您应该没问题。
来源: ffmpeg 流媒体