H264流媒体到iOS无法正常工作

时间:2015-12-28 08:26:01

标签: ios objective-c streaming video-streaming h.264

我正在尝试从相机获取视频流并将其显示在iOS应用上。摄像机通过udp端口发送流。为此,我只是打开一个GCDAsyncUDPSocket并开始收听代表。我的问题在数据开始到来时开始。

我有NSData对象到达委托,并且由于流是H264并且遵循WWDC2014的信息,我将NSData剥离成小块,将其分隔为0x000001。这应该是NALU,每个我得到的类型:

- (int)getNALUType:(NSData *)NALU {
    uint8_t * bytes = (uint8_t *) NALU.bytes;

    return bytes[0] & 0x1F;
}

如果type为7或8,我创建了SPS和PPS对象,当我同时拥有它们时,我使用CMVideoFormatDescriptionCreateFromH264ParameterSets创建格式描述。

最后,通过格式描述,我开始将类型为1和5的对象(IDR和非IDR图片)添加到AVSampleBufferDisplayLayer块缓冲区。

我正在使用此处的代码来处理NALU:

https://github.com/niswegmann/H264Streamer/blob/master/H264Streamer/ViewController.m

这就是我处理从流中到达的数据的方式:

-(void)udpSocket:(GCDAsyncUdpSocket *)sock didReceiveData:(NSData *)data fromAddress:(NSData *)address withFilterContext:(id)filterContext{

    UInt8 TxDataBytes[10];
    int TxDataIndex = 0;

    TxDataBytes[TxDataIndex++] = 0x00;
    TxDataBytes[TxDataIndex++] = 0x00;
    TxDataBytes[TxDataIndex++] = 0x01;

    NSData *NALUStartData = [NSData dataWithBytes:&TxDataBytes length:TxDataIndex];

    NSArray* NALUArray = [data componentsSplitByDataBytes:NALUStartData];

    for (NSData* NALU in NALUArray) {
        [self parseNALU:NALU];
    }
}

componentSplitByDataBytes来自此回购:

https://github.com/watr/NSData-SplitByData

我很确定我的问题是如何从NSData获取NALU,但我不知道还有什么可以尝试。

0 个答案:

没有答案