惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 聂微东
罗磊的独立博客
S
SegmentFault 最新的问题
The GitHub Blog
The GitHub Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
L
LINUX DO - 最新话题
Webroot Blog
Webroot Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Microsoft Azure Blog
Microsoft Azure Blog
GbyAI
GbyAI
T
Tenable Blog
Help Net Security
Help Net Security
WordPress大学
WordPress大学
H
Heimdal Security Blog
SecWiki News
SecWiki News
V2EX - 技术
V2EX - 技术
C
CERT Recently Published Vulnerability Notes
P
Privacy International News Feed
T
Tailwind CSS Blog
L
LINUX DO - 热门话题
Scott Helme
Scott Helme
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
O
OpenAI News
Latest news
Latest news
月光博客
月光博客
L
LangChain Blog
Google DeepMind News
Google DeepMind News
爱范儿
爱范儿
I
InfoQ
T
Threat Research - Cisco Blogs
人人都是产品经理
人人都是产品经理
Forbes - Security
Forbes - Security
Recent Commits to openclaw:main
Recent Commits to openclaw:main
博客园_首页
雷峰网
雷峰网
T
Tor Project blog
Security Archives - TechRepublic
Security Archives - TechRepublic
G
GRAHAM CLULEY
Project Zero
Project Zero
MyScale Blog
MyScale Blog
V
V2EX
Vercel News
Vercel News
F
Fortinet All Blogs
The Register - Security
The Register - Security
N
News and Events Feed by Topic
P
Palo Alto Networks Blog
H
Hacker News: Front Page
Application and Cybersecurity Blog
Application and Cybersecurity Blog
博客园 - 司徒正美

Oragekk's Blog

OpenSpec 技术分享:用规格驱动 AI 编程 ChatGPT&Codex订阅教程 一个 waline 评论系统bug引发的思考 Jenkins 远程触发构建踩坑记 Git SSH 密钥配置 初识Rust vuepress-plugin-meting2 谷歌发布多平台应用开发神器Project IDX!PaLM 2加持 Vue常见优化手段 Vue2响应式原理解析 Dart 中的并发 Flutter 工作原理 如何利用GitHub Action提交URL到搜索引擎 提交URL到搜索引擎(百度、Bing、Google) GitHub Actions 使用介绍 素材设计 前端-Q&A 浏览器的事件循环 你不知道的 CSS 之包含块 CSS 属性计算过程 Vercel deploy忽略指定分支 评论插件 Waline 之邮件通知配置 公开API 终端究极美化iTerm2+Pure 使用Bing API提交网站URL Flutter 基础大集合 关于本站 关于本站 关于我 Markdown 展示 使用n命令管理node版本 幻灯片页 ReactNative State(状态) ReactNative开发环境配置,ES6语法介绍 ReactNative介绍 更优雅强大的终端ZSH 神经网络模型训练 YYCache优秀的缓存设计 WebViewJavascriptBridge NSError WCDB漫谈 优雅的实现TableViewCell单选 初探机器学习框架CoreML 深入理解swift中闭包的捕捉语义 iOS 配置https iOS timelineLogistics iOS Cookie的配置及使用 WKWebView拦截URL WKWebView使用及自适应高度 textfield限制输入字符 评论系统从多说迁移到disqus指南 利用Runtime进行快速归档 iOS 10.3 keychain 重大更新 Cell的accessoryType属性标记单元格之后,出现的重用问题 通过UserAgent判断设备 AFNetworking A memory leak 一人一句宋词 OC 中的枚举类型 iOS - Image compression algorithm iOS程序启动原理(下) iOS程序启动原理(上) NSOperatioin TableView性能优化 Runloop Test Three ways to call Update Cocoapods 1.1.1 减小iOS-App或者静态库体积 Jekyll旧站回忆 JavaScript ES6 CommonJS,RequireJS,SeaJS 归纳笔记 Unix/Linux 扫盲笔记
ijkPlayer 集成
Oragekk · 2017-08-30 · via Oragekk's Blog

参考地址
ijkplayer 是一款做视频直播的框架,基于 FFmpeg,支持 Android 和 iOS。这里介绍一下 iOS 中集成 ijkplayer

一、FFmpeg

FFmpeg 是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。它包括了领先的音/视频编码库 libavcodec 等。

libavformat:用于各种音视频封装格式的生成和解析,包括获取解码所需信息以生成解码上下文结构
和读取音视频帧等功能;

libavcodec:用于各种类型声音/图像编解码;

libavutil:包含一些公共的工具函数;

libswscale:用于视频场景比例缩放、色彩映射转换;

libpostproc:用于后期效果处理;

ffmpeg:该项目提供的一个工具,可用于格式转换、解码或电视卡即时编码等;

ffsever:一个 HTTP 多媒体即时广播串流服务器;

ffplay:是一个简单的播放器,使用 ffmpeg 库解析和解码,通过 SDL 显示;

支持的编码

源自 FFmpeg 项目组的两个视频编码:

Snow

FFV1

支持的格式

ASF

AVI

BFI[7]

IFF[8]

RL2[9]

FLV

MXF, Material eXchange Format, SMPTE 377M

Matroska

Maxis XA[10]

MSN Webcam stream[11]

MPEG transport stream

TXD[6]

OMA[12]

GXF, General eXchange Format, SMPTE 360M

mov,mp4,m4a,3gp,

支持的协议

HTTP

RTP

RTSP

RealMedia RTSP/RDT

TCP

UDP

Gopher

RTMP

RTMPT, RTMPE, RTMPTE, RTMPS (via librtmp)

SDP

MMS over TCP

二、下载 ijkplayer

ijkplayer 下载地址:https://github.com/Bilibili/ijkplayer

下载完成后解压, 解压后文件夹内部目录如下图:
ijkplayer.png

三、编译

其实这里主要是编译 FFmpeg,因为他是一个 C 语言的跨平台库,需要 sh 脚本来进行编译

  1. 打开终端, cd 到 jkplayer-master 文件夹中, 也就是下载完解压后的文件夹, 如下图:1.png
  2. 执行命令行**./init-ios.sh**, 这一步是去下载 ffmpeg 的, 时间会久一点, 耐心等一下.如下图:2.png
  3. cd 到 ios 目录中
  4. 执行**./compile-ffmpeg.sh clean**3.png
  5. 执行**./compile-ffmpeg.sh all**进行 FFmpeg 的编译,时间较久4.png

其实集成 ijkplayer 有两种方法,一种是按照 Demo 中的导入 IJKMediaPlayer.xcodeproj,此方法不是很推荐

下面主要说另一种把 ijkplayer 打包成 framework 导入工程中使用.
首先打开工程 IJKMediaPlayer.xcodeproj,IJKMediaPlayer.xcodeproj

选择 IJKMediaFramework 点击 EditScheme

选择 release

设置好 scheme 后, 分别选择真机和模拟器进行编译, 编译完成后, 进入 Finder,

下面开始合并真机和模拟器版本的 framework, 注意不要合并错了, 合并的是这个文件, 如下图:

打开终端, 进行合并, 命令行具体格式为:
lipo -create 真机版本路径 模拟器版本路径 -output 合并后的文件路径

合并后如下图

用合并后的 IJKMediaFramework 把原来的 IJKMediaFramework 替换掉

五、在 iOS 项目中集成 ijkplayer

新建工程, 导入合并后的 IJKMediaFramework.framework 以及相关依赖框架以及相关依赖框架,如下图:
5.png

导入框架后在 ViewController.m 中进行 buid,如果成功,说明集成成功。然后可以在控制器中写一个 Demo 测试Snip20170831_10.png
可以是 mp4 格式,也可以是 m3u8,rtmp,hls 等流媒体

demo 地址