簡體   English   中英

從iPhone將大型視頻上傳到Web服務器

[英]Uploading a large video from iphone to web server

我正在嘗試將大型視頻從iPhone上傳到具有php腳本的Web服務器。

我使用NSInputStream來獲取文件視頻塊,並在每次遍歷時創建一個request(POST)

- (void)stream:(NSStream *)stream handleEvent:(NSStreamEvent)eventCode

方法,將讀取的數據作為參數傳遞。

這是我用來獲取數據塊的代碼

- (void)stream:(NSStream *)stream handleEvent:(NSStreamEvent)eventCode 
{
switch(eventCode) 
{
    case NSStreamEventHasBytesAvailable:
    {
        NSMutableData *dataSlice;

        uint8_t buf[1048576];
        unsigned int len = 0;
        len = [(NSInputStream *)stream read:buf maxLength:1048576];
        if(len) 
        {
            dataSlice = [NSMutableData dataWithBytes:(const void *)buf length:len];


            NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys:folderNameForUpload, kFolderName,
                                           @"abcd.MOV", kFileName,
                                           @"MOV", kFileType,
                                           nil];
            MKNetworkOperation *op = [self.networkEngine operationWithPath:@"upload.php" params:params httpMethod:@"POST"];

            [op addData:dataSlice forKey: @"file"
                             mimeType: @"image/mov"
                             fileName: @"abcd"];

            [op onCompletion:^(MKNetworkOperation *completedOperation) {

            } onError:^(NSError *error) {

            }];

            [[WebRequest sharedInstance].networkEngine enqueueOperation: op];


        }
        else 
        {
            NSLog(@"NO MORE BUFFER!");
        }
        break;
    }


    case NSStreamEventEndEncountered:
    {
        [stream close];
        [stream removeFromRunLoop:[NSRunLoop currentRunLoop]
                          forMode:NSDefaultRunLoopMode];
        [stream release];
        stream = nil;
        break;
    }
}
}

它正在將數據發送到服務器,並且我能夠將這些塊寫入文件中。 但是,問題在於,如果有多個塊,文件將被損壞,而我無法打開視頻文件。

我檢查了服務器和客戶端上的文件大小,兩者完全相同。

以下是php腳本,我用於合並視頻文件塊。

        $tmp_file = $_FILES['file']['tmp_name'];

        $write_handle = fopen($fileURL, "ab+");
        $read_handle = fopen($tmp_file, "rb");

        $contents = fread($read_handle, filesize($tmp_file));
        fwrite($write_handle, $contents);

        fclose($write_handle);
        fclose($read_handle);

我在這里做錯了什么?,請幫忙!

我被這個問題困住了!!

提前致謝,

蘇拉傑

我自己遇到了問題。 實際上,我同時發送了不同的視頻塊。 出現問題的原因是,隨后的視頻塊在第一部分視頻之前到達服務器。

我僅在第一個視頻塊到達Web服務器並在客戶端獲得響應后才發送第二個視頻塊,從而解決了該問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM