Как играть видео локально в цели-c для iPhone?

Я хочу играть видео на iPhone локально путем хранения видео в приложении. как я могу сделать?

6
задан uttam 24 February 2010 в 07:25
поделиться

1 ответ

Метод init () вызывается для каждой Задачи при анализе файла сборки, а также после привязки Задачи к ее владеющему проекту. Таким образом, задача может выполнять работу с экземпляром Project .

-121--4998099-

Обновление : мой первоначальный анализ ниже был неверным...

К сожалению, я ошибся в поведении < < 32 - C # предписывает, чтобы оператор левого сдвига ограничивал число сдвигов младшими 5 битами правого операнда (6 бит для сдвига с участием 64-битного левого операнда). Таким образом, ваш исходный код был хорошо определен и корректен в C # (это неопределенное поведение в C/C + +). По существу, это выражение сдвига:

(this.Array[i] << shift)

эквивалентно:

(this.Array[i] << (shift & 0x1f))

Я бы, вероятно, все еще изменил сдвиг, чтобы сделать его явным (если по какой-либо другой причине, что когда я посмотрел на этот код 6 месяцев спустя я не наткнулся бы на тот же ошибочный анализ), используя вышеуказанный вместо если (сдвиг = 32) проверка.

Исходный анализ:


OK, так что вот второй ответ. Самое главное, я думаю, что оригинальное решение имеет ошибку в случае, когда битовая длина вашего ImmutureBitArray кратна 32 битам, вы вернете true для 2 массивов, которые отличаются в последнем Int32 [] элементе массива.

Рассмотрим, например, ImmutureBitArray с разной битовой длиной 32 бит. Исходный метод Equals () выполнит операцию сдвига для одного и только Int32 в массиве, но он сдвинет значения 32 биты, так как

int shift = 0x20 - (this.length % 0x20);

вычислит до 32.

Это означает, что следующий тест:

if (this.Array[i] << shift != other.Array[i] << shift)

Will test for (0! = 0) и, следовательно, return false не будет выполнен.

Я бы изменил ваш метод Equals () на что-то вроде следующего, что не является серьезным изменением - я думаю, что он заботится о вышеупомянутой ошибке и меняет пару других вещей, которые строго связаны со стилем, так что может не иметь никакого интереса для вас. Также обратите внимание, что на самом деле я не скомпилировал и не протестировал мой метод Equals () , поэтому существует почти 100% вероятность появления ошибки (или, по крайней мере, синтаксической ошибки):

public bool Equals(ImmutableBitArray other)
{
    if (this.length != other.length)
    {
        return false;
    }

    int finalIndex = this.Array.Length - 1;

    for (int i = 0; i < finalIndex; i++)
    {
        if (this.Array[i] != other.Array[i])
        {
            return false;
        }
    }

    // check the last array element, making sure to ignore padding bits

    int shift = 32 - (this.length % 32);
    if (shift == 32) {
        // the last array element has no padding bits - don't shift
        shift = 0;
    }

    if (this.Array[finalIndex] << shift != other.Array[finalIndex] << shift)
    {
        return false;
    }

    return true;
}

Обратите внимание, что строго говоря, исходный метод GetHashCode () не прослушивается, даже если он имеет тот же недостаток, потому что даже если вы не правильно смешиваете последний элемент, когда битовая длина кратна 32, равный объект все равно вернет тот же хэш-код. Но я все еще, вероятно, решил бы устранить недостаток таким же образом в GetHashCode () .

-121--4950360-

Чтобы сохранить видео в приложении, можно просто добавить его с этапом копирования файлов в сборке. Для примера воспроизведения фильма ознакомьтесь с документами Media Player и, в частности, с образцом кода MovurePlayer .

9
ответ дан 8 December 2019 в 04:52
поделиться