Ошибка видеоплеера Titanium: iOS 5 (или iPhone 4s с iOS 5)

#ios5 #titanium #appcelerator #appcelerator-mobile #titanium-mobile

#ios5 #titanium #ускоритель приложений #ускоритель приложений-мобильный #titanium-мобильный

Вопрос:

Я разрабатывал приложение, которое, помимо прочего, поддерживает потоковое видео и аудио. Я добился, чтобы все работало идеально на моем iPhone 3S с iOS 4, а также на моем устройстве Android. Сегодня вечером я развернул приложение на своем новом iPhone 4S с iOS5, и теперь видеоплеер не завершается, когда я нажимаю на кнопку «Готово» в верхнем левом углу строки заголовка! Видео воспроизводится во весь экран, и я не могу вернуться ни к одному из экранов моего приложения. Это известная ошибка?

Вот мой код для просмотра для просмотра или для воспроизведения:

 var contentURL = 'http://streaming.alburhan.tv/Video/GetURL/ME';
var win = Titanium.UI.currentWindow;
win.orientationModes = [Titanium.UI.PORTRAIT, Titanium.UI.LANDSCAPE_LEFT, Titanium.UI.LANDSCAPE_RIGHT];

var videoURL = "";
getURL:);

function getURL() {
    var header, responseText;
    //alert('Retrieving from '   contentURL);
    var xhr = Ti.Network.createHTTPClient();

    xhr.timeout = 15000;
    xhr.onload = function() {
        try {
            //alert('Connecting...');
            Ti.API.info(this.responseText);
            Ti.API.info(this.status);
            if(this.status == 200) {
                Ti.API.info('Response '   this.responseText);
                responseText = this.responseText;
            } else {
                Ti.API.info:'Status '   this.status:;
                Ti.API.info('Response '   this.responseText:;
            }
            //alert:responseText);
            if :responseText            //alert:evaluated.URL);
                videoURL = evaluated.URL;

                var activeMovie = Titanium.Media.createVideoPlayer:{
                    contentURL: videoURL,
                    backgroundColor:'#111',
                    //movieControlMode:Titanium.Media.VIDEO_CONTROL_DEFAULT,
                    //scalingMode:Titanium.Media.VIDEO_SCALING_MODE_FILL
                    movieControlMode:Titanium.Media.VIDEO_CONTROL_FULLSCREEN,
                    scalingMode:Titanium.Media.VIDEO_SCALING_ASPECT_FIT,
                    sourceType:Titanium.Media.VIDEO_SOURCE_TYPE_STREAMING
                }:;

                if (parseFloat(Titanium.Platform.version) >= 3.2)
                {
                    win.add(activeMovie);
                }

                var windowClosed = false;

                activeMovie.addEventListener('complete',function()
                {
                    if :!windowClosed)
                    {
                        //Titanium.UI.createAlertDialog:{title:'Movie', message:'Completed!'}:.show();
                    }
                    win.close:);
                }:;

                activeMovie.fullscreen = true;
                activeMovie.play:);

                win.addEventListener('close', function() 
                {
                    if (!windowClosed)
                    {
                        windowClosed = true;
                        //alert:"Window closed":;
                        activeMovie.stop();
                    }
                });
            }
            else {
                alert('Could not load video data from the server. Please try again later.');
            }
        }
        catch(E){
            alert('There was an error retrieving stream data from the server: '   E);
        }
    };
    xhr.onerror = function(e) {
        Ti.API.debug(e.error);
        alert('Could not connect to the server in order to retrieve stream data: '   e.error);
    };
    xhr.open("GET", contentURL);
    xhr.send();
}
  

Ответ №1:

Хорошо, я исправил проблему. Для всех, кто следит за этой проблемой или кто столкнется с ней в будущем, это то, что я в конечном итоге сделал / изменил, чтобы заставить ее правильно функционировать на iOS 5:

movieControlMode:Titanium.Media.VIDEO_CONTROL_EMBEDDED

Кроме того, я добавил следующие прослушиватели событий:

 activeMovie.addEventListener('complete', function() {
                    //alert('completed');
                    if (!windowClosed) {
                        activeMovie.fullscreen = true;
                        activeMovie.stop();
                        activeMovie.release();
                        windowClosed = true;
                        win.close();
                    }
                });

                activeMovie.addEventListener('fullscreen', function(e) { // When fullscreen status is changed.
                    if (!e.entering) { // User pressed 'done' or video finished.
                        activeMovie.fullscreen = true;
                        activeMovie.stop();
                        activeMovie.release();
                        windowClosed = true;
                        win.remove(activeMovie);
                        win.close();
                    }
                });
  

Почему мне пришлось вносить эти изменения (особенно movieControlMode ), чтобы заставить его работать должным образом на iOS 5, для меня загадка.

Ответ №2:

Измените эту строку:

 activeMovie.fullscreen = true;
  

к этому:

 activeMovie.fullscreen = false;
  

Я знаю, это не имеет смысла. Добро пожаловать в Titanium.

Комментарии:

1. Спасибо за ответ. Технически это устраняет проблему, но я хочу, чтобы фильм был во весь экран. Кроме того, когда это не на весь экран, возникает еще одна ошибка. Вот как это воспроизвести: при воспроизведении видео поверните экран так, чтобы он находился в альбомном режиме. Затем щелкните двойные стрелки, чтобы увеличить масштаб фильма. Что происходит тогда, так это то, что верхняя строка состояния уменьшается примерно на 150 пикселей или около того, оставляя пробел в верхней части экрана и перекрывая часть верхней части видео. Странно то, что в iOS 4 полноэкранный режим нормально завершается, когда я нажимаю кнопку «Готово». Есть какие-нибудь предложения?