最简iOS播放器(一)

前言

关于音视频的学习已经持续了一年左右,中间因为很多事情总是断断续续的,最近终于可以抽出时间来总结一下,打算连续写几篇博客,包括iOS最简播放器、软解码、硬解码等。
最简iOS播放器使用ffmpeg软解码视频数据,SDL_thread窗口管理,SDL_render渲染视频数据,SDL_audio播放音频数据,SDL_thread管理线程。

正文

一、工具库准备

编译准备ffmpeg和SDL。

  • ffmpeg

ffmpeg的编译可以参考我的博客FFmpeg在iOS开发中编译并使用,这里使用的是ffmpeg-3.4.2。

  • SDL
  1. 下载
    SDL源代码可以到SDL官网下载SDL2.0,如下图
    SDL2下载.png
  2. 编译
    下载好后,解压,在Xcode-iOS目录下打开SDL文件里SDL项目,分别选择模拟器和真机build,生成真机和模拟器的.a库,在products目录下右键libSDL2.a,show in finder显示如下图,Debug-iphoneos和Debug-iphonesimulator下各有一个libSDL2.a.


    build生成.a文件
  3. 合并
    合并模拟器和真机的.a文件,以便在模拟器和真机下都可以使用。
lipo -create 真机build生成的.a文件路径 模拟器build生成的.a文件路径 -output 合并后的路径/合并后的文件名

例如我的:
lipo -create /Users/jusun/Library/Developer/Xcode/DerivedData/SDL-dchfilmmlxomauhaifiahcfggttg/Build/Products/Debug-iphoneos/libSDL2.a /Users/jusun/Library/Developer/Xcode/DerivedData/SDL-dchfilmmlxomauhaifiahcfggttg/Build/Products/Debug-iphonesimulator/libSDL2.a -output /Users/jusun/Desktop/SDL2/libSDL2.a

最后把合并生成的libSDL2.a和头文件放在同一个文件夹下。
SDL2.png

二、环境配置

  1. 把两个编译好的库加入到自己的项目,修改两个库的头文件路径:在build setting里搜索Search Path,找到Header Search Paths,可以看到这里的头文件路径是空的,下一行Library Search Paths是正确的Library路径,双击打开,分别复制粘贴到Header Search Paths这一行,并修改$(PROJECT_DIR)/simple-player/FFmpeg-iOS/lib$(PROJECT_DIR)/simple-player/FFmpeg-iOS/include,同样$(PROJECT_DIR)/simple-player/SDL/lib修改为$(PROJECT_DIR)/simple-player/SDL/include,如下图:
    头文件路径设置.png
  2. 添加必须的三个依赖库
libz.tbd
libbz2.tbd
libiconv.tbd
  1. ViewController.m里导入系统库头文件
#import <VideoToolbox/VideoToolbox.h>
#import <AVFoundation/AVFoundation.h>
#import <GameController/GameController.h>
#import <CoreMotion/CoreMotion.h>

环境配置成功后的目录结构如下图:


目录结构.png

build无报错
,大功告成,环境配置完成。

三、项目构建与改造

  1. 在/Users/jusun/Downloads/FFmpeg-iOS-build-script-master/ffmpeg-3.4.2/fftools目录下
    找到ffplay.c、cmdutils.h、cmdutils.c三个文件拖入项目
  2. 在/Users/jusun/Downloads/FFmpeg-iOS-build-script-master/scratch/arm64目录下找到config.c文件拖入项目
    build项目,cmdutils.h里报错的都注释掉。
  3. ffplay.c搜索找到static const char *input_filename
    修改为
static const char *input_filename = "http://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/gear1/prog_index.m3u8"
  1. 注释掉main.m里的所有代码,就会默认走ffplay.c里的main方法。
    最终目录结构如下:
最终结构.png

运行项目,如果有弹窗,选择always ignore,就可以正常播放:


正常播放.png

四、总结

基于ffmpeg(软解码)和SDL的最简播放器已经完工,但问题很明显,视频显示不在UIView上,而是显示在了SDLWindow上,如何把视频显示到UIView花了我很大一段时间去研究,也因此学习了openGL,下一篇准备使用shader、openGL渲染到UIView、GLKView上总结一篇博客,还有本篇里涉及到解码流程、渲染流程、线程管理、队列管理知识也很多,抽时间再总结一下写一篇博客。

本篇博客我的代码地址

五、参考学习

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

推荐阅读更多精彩内容

  • 转载自:[总结]FFMPEG视音频编解码零基础学习方法中国传媒大学雷霄骅博士CSDN博客--致敬雷神 一些资料: ...
    路漫漫其修远兮Wzt阅读 2,998评论 1 43
  • 宝贝,妈妈不是不要你了… 离开你的前一晚 妈妈抱了你一整夜哭了一整夜 妈妈熬不下去了 在那样的一个家庭 妈妈想带你...
    Autisan阅读 216评论 0 0
  • 我最近很焦虑,因为临近毕业了,就业压力比较大。又没有收入来源,未来没有着落,感觉自己像一个漂浮在空中的气球,随时会...
    整理师黄婷阅读 1,000评论 0 2
  • 引子黄河之水天上来,奔流到海不复回,亦诗亦画,可诉不了山村的凄凉。绵绵的洮河水,之于会宁人,那可是三代人的记忆。爷...
    众望城主阅读 375评论 0 1