百思不得姐数据挖掘第三篇

播放视频的界面现在只剩下视频的功能了,对于这种播放视频的应该属于功能块。我们可以单独把这个功能提取出来。

我们新建一个包Plugins专门放置各种功能,我称作为插件。因为要封装的功能是被其他人一键调用,别人无需知道实现,只要知道接口即可,在其他人眼中也就是Manger功能。

我们在Plugins包里面新建一个Video的包。

对于播放视频的功能只在2013年做过,貌似叫做MP开头的类,差不多忘记了。我们可以谷歌一下,不怕不会,只怕不会搜索。

我们轻松的搜到播放视频需要这个类MPMoviePlayerController,我们导入试一下。

import MediaPlayer

我们新建一个类VideoPlugin先做一个叫做playVideo方法试一下是否能播放。

func playVideo() {
        let videoFile = Bundle.main.path(forResource: "app_splash_movie", ofType: "mp4")
        assert((videoFile != nil),"视频地址不能为空!")
        let videoUrl = URL(fileURLWithPath:videoFile!)
        let videoPlay = MPMoviePlayerViewController(contentURL: videoUrl)
    }

当我去查看怎么播放时候,发现MPMoviePlayerViewController已经在iOS9之后过时。系统提示用Use AVPlayerViewController in AVKit.

既然MPMoviePlayerViewController这个类已经过时了,我们就导入AVKit使用最新的类AVPlayerViewController如果这个类是9.0之后出的,我们就做兼容模式,如果8.0就出现了,我们就可以直接使用最新的,因为我们是从iOS8.0开始的。

@available(iOS 8.0, *)
open class AVPlayerViewController : UIViewController {

果然和我们预想的一样,果然是兼容iOS8.0的。我们把代码改成下面的样子。

let videoPlay = AVPlayerViewController()

发现AVPlayerViewController已经不像MPMoviePlayerViewController这样的初始化,应该有其他的方法。

open var player: AVPlayer?

我们第一眼就看到这个属性,看名字很像。点进入发现类方法需要传入我们刚才的文件地址,并且有播放和暂停等功能。这个应该是我们所需要的。

let videoPlay = AVPlayer(url: videoUrl)
let videoPlayController = AVPlayerViewController()

我们需要放置在我们播放视频界面的模板上面,我们就写一个初始化方法让外部把父试图传进来。

init(contentView:UIView) {
        videoView = contentView
        super.init()
    }

再次修改我们的代码

func playVideo() {
        let videoFile = Bundle.main.path(forResource: "app_splash_movie", ofType: "mp4")
        assert((videoFile != nil),"视频地址不能为空!")
        let videoUrl = URL(fileURLWithPath:videoFile!)
        let videoPlay = AVPlayer(url: videoUrl)
        let videoPlayController = AVPlayerViewController()
        videoPlayController.view.frame = videoView.frame
        videoPlay.play()

    }

在我们的播放界面测试一下。

/// 进入页面自动播放视频
    func autoPlayVideo() {
        let videoPlay = VideoPlugin(contentView: videoView)
        videoPlay.playVideo()
    }

我们在viewDidLoad方法里面调用autoPlayVideo

发现并没有播放,原来是忘记addSubView了,犯了低级错了。

视频截图
视频截图

黑乎乎的,应该界面是出来了,但是播放不了。

仔细的查看了代码,忘记给属性赋值。

open var player: AVPlayer?

我们赋值一下。再次试一下看看。

videoPlayController.player = videoPlay

播放的界面总算是出来了,但是点击按钮会崩溃,崩溃信息如下。

2016-11-07 10:57:13.541 BaiSiBuDeJie[14481:162524] 10:57:13.541 ERROR:     98: Error '!obj' trying to fetch default input device's sample rate
2016-11-07 10:57:13.541 BaiSiBuDeJie[14481:162524] 10:57:13.541 ERROR:     100: Error getting audio input device sample rate: '!obj'
2016-11-07 10:57:13.541 BaiSiBuDeJie[14481:162524] 10:57:13.541 WARNING:   230: The input device is 0x0; '(null)'
2016-11-07 10:57:13.541 BaiSiBuDeJie[14481:162524] 10:57:13.541 WARNING:   234: The output device is 0x27; 'AppleHDAEngineOutput:1B,0,1,2:0'
2016-11-07 10:57:13.542 BaiSiBuDeJie[14481:162524] 10:57:13.542 ERROR:     296: error '!obj'
2016-11-07 10:57:13.542 BaiSiBuDeJie[14481:162524] 10:57:13.542 ERROR:     113: * * * NULL AQIONode object
2016-11-07 10:57:13.542 BaiSiBuDeJie[14481:162344] 10:57:13.542 ERROR:     296: error -66680
2016-11-07 10:57:13.542 BaiSiBuDeJie[14481:162524] 10:57:13.542 ERROR:     703: Can't make UISound Renderer
2016-11-07 10:57:13.542 BaiSiBuDeJie[14481:162344] 10:57:13.542 ERROR:     296: error -66680
2016-11-07 10:57:13.543 BaiSiBuDeJie[14481:162344] 10:57:13.542 ERROR:     296: error -66680
2016-11-07 10:57:13.543 BaiSiBuDeJie[14481:162344] 10:57:13.543 ERROR:     296: error -66680

这错误信息看得我一头雾水,我们搜一下错误码试一下。

谷歌的意思,iOS模拟器要使用输入设备和输出设备,但是Mac电脑没有,会造成这样的结果。因为AVPlayer造成这些错误的信息。

再次从AVPlayer找到一个叫做Error的属性,输入一下看看有什么错误的信息。然并卵,这个属性为nil,看来我们初始化也没有什么问题。

我们测试一下真机,看看问题是否解决。

经过测试视频可以正常的播放,但是一直悬浮功能栏,我们看看能不能去掉,有什么属性没有。

open var showsPlaybackControls: Bool

这个属性有点像,而且属性的默认值是true,我们设置false试一下。

经过测试也是可以的,界面看着有点丑 我们把按钮距离底部约束为40,删除之前的上约束。

这是最后的界面。

对应的工程文件下载下载

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,905评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,140评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,791评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,483评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,476评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,516评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,905评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,560评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,778评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,557评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,635评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,338评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,925评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,898评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,142评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,818评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,347评论 2 342

推荐阅读更多精彩内容