iPad 2 视频子系统是不是不稳定?

Posted

技术标签:

【中文标题】iPad 2 视频子系统是不是不稳定?【英文标题】:Is iPad 2 video subsystem unstable?iPad 2 视频子系统是否不稳定? 【发布时间】:2011-07-19 22:15:58 【问题描述】:

我正在为 iPad 开发一个应用程序(使用 Titanium Appcelerator),该应用程序旨在录制和播放多个视频文件。此时,我可以无休止地录制视频,但是当我播放它们时,应用程序会崩溃,似乎是随机的。例如:播放视频 A,然后播放视频 B,然后播放 C,然后返回 A,应用在播放过程中崩溃并返回主屏幕。重新启动应用程序并执行完全相同的操作,就可以了,让我再播放几个视频,然后当我返回视频列表时崩溃。崩溃日志通常以此开头:

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x4650974c
Crashed Thread:  0

Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   libobjc.A.dylib                 0x33adbca4 0x33ad9000 + 11428
1   MediaPlayer                     0x354469d6 0x353d9000 + 448982
2   Foundation                      0x333dd7c6 0x3334d000 + 591814
3   CoreFoundation                  0x3712ea40 0x370b9000 + 481856
4   CoreFoundation                  0x37130ec4 0x370b9000 + 491204
5   CoreFoundation                  0x3713183e 0x370b9000 + 493630
6   CoreFoundation                  0x370c1ebc 0x370b9000 + 36540
7   CoreFoundation                  0x370c1dc4 0x370b9000 + 36292
8   GraphicsServices                0x36ffc418 0x36ff8000 + 17432
9   GraphicsServices                0x36ffc4c4 0x36ff8000 + 17604
10  UIKit                           0x35009d62 0x34fdb000 + 191842
11  UIKit                           0x35007800 0x34fdb000 + 182272
12  VideoRiver                      0x000042bc 0x1000 + 12988
13  VideoRiver                      0x00003b60 0x1000 + 11104
ios SDK 4.3, XCode 3.2.6, 钛 SDK 1.7.1, iPad 2, 32GB 3G, iPad iOS 4.3.3

【问题讨论】:

如果您希望别人提供帮助,您应该返回并接受您之前问题的答案。 :)..就您的问题而言,这听起来像是内存泄漏。确保您不再保留不再需要的视频的数据。 谢谢,杰西,我会这样做的。据我所知,我正在做可以做的事情,即停止视频并在完成后调用 .release() 方法:myVideo.stop(); myVideo.release(); 【参考方案1】:

我相信我找到了解决方法。到目前为止,在我的问题中概述的相同情况下没有崩溃。不同之处在于,我不是为视频创建一个单独的窗口,而是将视频播放器放在一个视图上,然后根据需要隐藏和显示它。下面是一些适用于 Titanium Appcelerator 的代码:

function Playback() 

    var self = this;
    this.activeMovie = null;
    this.baseView = null;

    this.create = function () 

        self.activeMovie = Ti.Media.createVideoPlayer(
            top: 0,
            left: 0,
            width: Ti.Platform.displayCaps.platformWidth,
            height: Ti.Platform.displayCaps.platformHeight,
            backgroundColor: '#111',
            movieControlStyle: Ti.Media.VIDEO_CONTROL_EMBEDDED,
            scalingMode: Ti.Media.VIDEO_SCALING_ASPECT_FIT
        );

        self.baseView = Ti.UI.createView(
            top: 0,
            left: 0,
            width: Ti.Platform.displayCaps.platformWidth,
            height: Ti.Platform.displayCaps.platformHeight
        );

        self.baseView.hide();

        self.doneBtn = Ti.UI.createButton(
            title: 'Done',
            color: '#fff',
            backgroundColor: 'blue',
            backgroundImage: 'none',
            bottom: '15%',
            width: 120,
            height: 40,
            font: fontSize: 16,fontWeight: 'bold',fontFamily: 'Helvetica Neue',
            borderRadius:5,
            borderWidth:1,
            borderColor:'#a6a6a6'
        );

        self.doneBtn.addEventListener('click', function () 
            self.hide();
        );

        self.activeMovie.addEventListener('playbackState', function (e) 
            //*** Hide the video window when done.  Comment out if you don't want to do this.
            if (e.playbackState == 0) 
                self.hide();
            
        );

        self.baseView.add(self.activeMovie);
        self.baseView.add(self.doneBtn);

    ;

    Playback.prototype.getView = function () 
        return self.baseView;
    ;

    Playback.prototype.show = function (filename) 
        self.activeMovie.url = Titanium.Filesystem.applicationDataDirectory + '/' + filename;
        self.baseView.show();
        self.activeMovie.play();
    ;

    Playback.prototype.hide = function () 
        self.baseView.hide();
        self.activeMovie.stop();
    ;

    this.create();

要使用它,请执行以下操作:

var player = new Playback();
Titanium.UI.currentWindow.add(player.getView());
player.show("mymovie.mov");

享受吧!

【讨论】:

应在声明中添加:this.doneBtn = null; 以保持其整洁。

以上是关于iPad 2 视频子系统是不是不稳定?的主要内容,如果未能解决你的问题,请参考以下文章

玩CS1.6,FPS不稳定,怎么办?

稳定排序和不稳定排序的区别和代表

“异地灾备”——农业厅体系视频会议的稳定保障

媒体基金会:第 6 次循环视频不稳定

视频稳定的最佳算法

EasyNVR因为拉流失败导致反复出现大量视频不在线或不稳定的情况优化