Swift——初识ijkplayer时遇到的疑难杂症

2,572 阅读2分钟

直接进入主题,ijkplayer需要自己配置使用。

关于ijkplayer的编译、打包framework和https支持 推荐大家看hext123的这篇文章ijkplayer 的编译、打包 framework 和 https 支持 还有iOS_小刚哥的这篇iOS直播之ijkplayer的集成与简单使用(播放)。这篇文章更为详细,虽然正常情况下开发者的环境配置对于ijkplayer来说应该只差一个brew install yasm,但是万一有需要这也是很好的指导。

如果不想去配置,想提前看效果,节省时间的话,可以直接去下载我放在Github的framework —— ijkplayer-framework

以下内容是对我遇到的问题的总结,从零开始的话,建议去看上面的文章或者网上的其他教程。有很多,我就不再总结了

执行这一步时报错,如下。

./compile-ffmpeg.sh all
AS  libavcodec/arm/aacpsdsp_neon.o
./libavutil/arm/asm.S:50:9: error: unknown directive
        .arch armv7-a
        ^
make: *** [libavcodec/arm/aacpsdsp_neon.o] Error 1
make: *** Waiting for unfinished jobs....

需要在 compile-ffmpeg.sh 删除 armv7 , 修改方法如下:

删除前

删除后

也就是将

FF_ALL_ARCHS_IOS8_SDK="armv7 arm64 i386 x86_64"

改为

FF_ALL_ARCHS_IOS8_SDK="arm64 i386 x86_64"

我这里有测试过是否需要删除所有的armv7,我只删除了上图那一行的armv7,编译通过。所以应该是不需要的。

接着重新执行编译ffmpeg的命令:

./compile-ffmpeg.sh all

####编译报错问题 需要注释两个文件的引用代码。两个文件分别是avconfig.hconfig.h 如果点击报错的地方没反应,全局搜索也找不到,那么你就需要直接到文件目录去找了

avconfig.h Not Found

反键选择Reveal in Log,根据路径找到avconfig.h

avconfig.h
直接打开,然后注释掉# include "armv7/avconfig.h"
注释掉

config.h也是同理

config.h Not Found

config.h
也是打开,然后注释掉# include "armv7/config.h"
注释掉

打包完Framework并添加到工程后,需要测试框架是否正常

环境:

Xcode 10.1 swift 4.2

示例代码

视频源直接上网搜索就好,这是个我搜索出来的网址

//
//  PlayerViewController.swift
//  ProjectFramework
//
//  Created by Bart Simpson on 2018/11/16.
//  Copyright © 2018年 simpsons. All rights reserved.
//

import UIKit
import IJKMediaFramework

class PlayerViewController: UIViewController {

    var player:IJKFFMoviePlayerController!
    
    override func viewDidLoad() {
        super.viewDidLoad()

        self.view.backgroundColor = UIColor.white
        showVideo()
        // Do any additional setup after loading the view.
    }
    

    func showVideo(){
        
        let options = IJKFFOptions.byDefault()
        
        //视频源地址
        let url = URL.init(string: "http://ivi.bupt.edu.cn/hls/cctv1hd.m3u8")
        
        //初始化播放器,播放在线视频或直播(RTMP)
        player = IJKFFMoviePlayerController.init(contentURL: url, with: options)
        //播放页面视图宽高自适应
        let autoresize = UIView.AutoresizingMask.flexibleWidth.rawValue |
            UIView.AutoresizingMask.flexibleHeight.rawValue
        player.view.autoresizingMask = UIView.AutoresizingMask(rawValue: autoresize)
        
        player.view.frame = self.view.bounds
        player.scalingMode = .aspectFit //缩放模式
        player.shouldAutoplay = true //开启自动播放
        
        self.view.autoresizesSubviews = true
        self.view.addSubview(player.view)
        
    }
    
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        //开始播放
        self.player.prepareToPlay()
    }
    
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        //关闭播放器
        self.player.shutdown()
    }
}