added simple depacketizer and test h264 file

This commit is contained in:
Diego Waxemberg
2014-01-18 05:00:36 -05:00
parent 8fdc5ad97b
commit d7a703828a
7 changed files with 165 additions and 0 deletions

View File

@@ -7,6 +7,7 @@
//
#import "MainFrameViewController.h"
#import "VideoDepacketizer.h"
@interface MainFrameViewController ()
@@ -22,6 +23,12 @@
- (void)StreamButton:(UIButton *)sender
{
NSLog(@"Stream Button Pressed!");
VideoDepacketizer* depacketizer = [[VideoDepacketizer alloc] init];
NSString* path = [[NSBundle mainBundle] pathForResource:@"notpadded"
ofType:@"h264"];
NSLog(@"Path: %@", path);
[depacketizer readFile:path];
}
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component

View File

@@ -0,0 +1,19 @@
//
// VideoDepacketizer.h
// Limelight-iOS
//
// Created by Diego Waxemberg on 1/18/14.
// Copyright (c) 2014 Diego Waxemberg. All rights reserved.
//
#import <Foundation/Foundation.h>
#import "VideoDecoder.h"
@interface VideoDepacketizer : NSObject <NSStreamDelegate>
@property uint8_t* byteBuffer;
@property unsigned int offset;
@property VideoDecoder* decoder;
- (void) readFile:(NSString*) file;
@end

View File

@@ -0,0 +1,89 @@
//
// VideoDepacketizer.m
// Limelight-iOS
//
// Created by Diego Waxemberg on 1/18/14.
// Copyright (c) 2014 Diego Waxemberg. All rights reserved.
//
#import "VideoDepacketizer.h"
@implementation VideoDepacketizer
static int BUFFER_LENGTH = 131072;
- (void) readFile:(NSString*) file
{
NSLog(@"Allocating input stream\n");
NSInputStream* inStream = [[NSInputStream alloc] initWithFileAtPath:file];
NSLog(@"Allocating byteBuffer");
self.byteBuffer = malloc(BUFFER_LENGTH);
NSLog(@"byte pointer: %p", self.byteBuffer);
[inStream setDelegate:self];
NSLog(@"Allocating decoder");
self.decoder = [[VideoDecoder alloc]init];
NSLog(@"old self pointer: %p", self);
[inStream open];
while ([inStream streamStatus] != NSStreamStatusOpen) {
NSLog(@"stream status: %d", [inStream streamStatus]);
sleep(1);
}
while ([inStream streamStatus] != NSStreamStatusAtEnd)
{
unsigned int len = 0;
NSLog(@"Reading File\n");
NSLog(@"stream pointer: %p", inStream);
NSLog(@"self pointer: %p", self);
NSLog(@"byte buffer pointer: %p", self.byteBuffer);
len = [(NSInputStream *)inStream read:self.byteBuffer maxLength:BUFFER_LENGTH];
if (len)
{
NSLog(@"len: %u\n", len);
BOOL firstStart = false;
for (int i = 0; i < len - 4; i++) {
if (self.byteBuffer[i] == 0 && self.byteBuffer[i+1] == 0
&& self.byteBuffer[i+2] == 0 && self.byteBuffer[i+3] == 1)
{
NSLog(@"i: %d", i);
self.offset++;
if (firstStart)
{
// decode the first i-1 bytes
[self.decoder decode:self.byteBuffer length:i-1];
[inStream setProperty:[[NSNumber alloc] initWithInt:self.offset-4] forKey:NSStreamFileCurrentOffsetKey];
self.offset -= 4;
} else
{
firstStart = true;
}
}
}
}
else
{
NSLog(@"No Buffer!");
}
}
}
- (void)stream:(NSStream *)stream handleEvent:(NSStreamEvent)eventCode
{
switch (eventCode)
{
case NSStreamEventHasBytesAvailable:
{
break;
}
default:
{
NSLog(@"eventCode: %u", eventCode);
}
}
}
@end

View File

@@ -0,0 +1,13 @@
//
// VideoDecoder.h
// Limelight-iOS
//
// Created by Diego Waxemberg on 1/18/14.
// Copyright (c) 2014 Diego Waxemberg. All rights reserved.
//
#import <Foundation/Foundation.h>
@interface VideoDecoder : NSObject
- (void) decode:(uint8_t*)buffer length:(unsigned int)length;
@end

View File

@@ -0,0 +1,23 @@
//
// VideoDecoder.m
// Limelight-iOS
//
// Created by Diego Waxemberg on 1/18/14.
// Copyright (c) 2014 Diego Waxemberg. All rights reserved.
//
#import "VideoDecoder.h"
@implementation VideoDecoder
- (void)decode:(uint8_t *)buffer length:(unsigned int)length
{
for (int i = 0; i < length; i++) {
printf("%02x ", buffer[i]);
if (i != 0 && i % 16 == 0) {
NSLog(@"");
}
}
}
@end

Binary file not shown.