Domanda

Sto cercando di implementare la funzionalità AudioFileStreamSeek sul mio in streaming app. Ma non v'è alcun modo per ottenere questo correre. Anche Matt Gallagher , ha detto sul suo blog:

  

Icidentally, la funzione AudioFileStreamSeek sembra completamente rotto. Se non è possibile farlo funzionare (come non ho potuto) solo cercare di un nuovo punto del file, impostare a true discontinua e lasciare AudioFileStream accordo con esso.

Il mio codice kindda simile a questo, ma non riesco a farlo funzionare:

    NSString *path = [[NSString alloc] initWithContentsOfURL: url];

    NSLog(@"url = %@", path);
    SInt64 currentOffset;
    UInt32 flags = 0;

    OSStatus status = AudioFileStreamSeek( audioFileStream, 150, &currentOffset, &flags );
    NSLog(@"Setting next byte offset to: %qi, flags: %d", (long long)currentOffset, flags);

    NSFileHandle *fileHandle = [NSFileHandle fileHandleForReadingAtPath: path];
    // then read data from the new offset set by AudioFileStreamSeek
    [fileHandle seekToFileOffset:currentOffset];
    NSData * data = [fileHandle readDataOfLength:4096];

    NSLog(@"data length %d, bytes %d", [data length], [data bytes]);


    if (discontinuous)
    {
        err = AudioFileStreamParseBytes(audioFileStream, length, bytes, kAudioFileStreamParseFlag_Discontinuity);
        if (err)
        {
            [self failWithErrorCode:AS_FILE_STREAM_PARSE_BYTES_FAILED];
            return;
        }
    }
    else
    {
        err = AudioFileStreamParseBytes(audioFileStream, length, bytes, 0);
        if (err)
        {
            [self failWithErrorCode:AS_FILE_STREAM_PARSE_BYTES_FAILED];
            return;
        }
    }

Si prega di aiuto ...

È stato utile?

Soluzione

In mancanza di altre soluzioni, che cosa si può fare è creare un connessione NSConnection e poi come si riceve il NSData è possibile creare in modo efficace lo streaming dalla lavorazione di ogni nuovo pezzo di NSData che si riceve al vostro NSConnectionDelegate. Connessione NSConnection farà in modo di inviare a voi in ordine, in modo da non dovrà preoccuparsi di ottenere ha ordinato correttamente. Si noti però che, a seconda dell'applicazione in uso, potrebbe essere necessario fare questo al di fuori del thread dell'applicazione principale, in modo che l'utente può ancora lavorare con la vostra applicazione, anche se le bancarelle di download e si deve rebuffer.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top