美文网首页音视频iOSios
浅谈iOS视频播放的N种解决方案

浅谈iOS视频播放的N种解决方案

作者: Maru | 来源:发表于2016-03-22 20:46 被阅读59649次
header.jpeg

前言

虽然我不同意你的观点 但我誓死捍卫你说话的权利!--伏尔泰

很长时间没有写文章了,这个题目其实我很早就想动笔写了,因为从我第一个完整的APP项目开始,几乎每一个APP都有视频播放的需求,但是我却迟迟不敢动笔,因为我觉得关于视频播放的底层技术实现我还是一知半解。但还是写下了这篇,希望路过的大神可以不吝赐教,也希望和我一样正在进步的人可以有所收益,少走弯路,看完这篇文章以后可以选择最适合自己的技术实现方案。

青铜时代

还记得刚学iOS的时候吗?那个时候惊讶于各种牛逼的功能只需要几句简单的代码就可以完成。视频播放也是这样,翻开几本陈旧的iOS教材,你就可以在目录里看到它。没错,它就是:

<MediaPlayer/MediaPlayer.h>

在MediaPlayer框架中,如果你足够懒,那么利用MPMoviePlayerViewController你便可以三行代码完成你的播放功能。然而,抬头看看各大视频APP,他们的播放界面是这样的:

UC播放器.jpg

低头看看自己的播放器,却是这样的:

艺术要求,请勿当真.png

妈蛋,好Low啊有木有,是可忍孰不可忍!好在Apple官方还给我们提供了一个类MPMoviePlayerController,通过这个类我们可以自定义播放器的UI,在这里推荐一款由国内工程师开源的基于MPMoviePlayerController播放器KRVideoPlayer,相信小伙伴们的大多数数的需求可以完美的解决。

工业时代

历史的车轮滚滚向前,永不停歇、

然而MPMoviePlayerController自定义播放器并不是完美的:

  1. MPMoviePlayerController在iOS9被Apple废弃了;
  2. 当我们的需求需要深度定制播放器的时候,MPMoviePlayerController就显得力不从心了,比如笔者之前在做一个配音软件时,需要只播放视频的画面,而不需要视频的声音,同时还需要开启音频的录制,以及另开一个音频播放器播放背景音效。这个时候,MPMoviePlayerController哭了。

鉴于<MediaPlayer/MediaPlayer.h>的局限性,新的框架应运而生--AVKit。

AVKit是建立在AVFoundation上,解决视频播放的高级对象。从AVFoundation Programming Guide中我们可以看到这样一张技术栈示意图:

屏幕快照 2016-03-22 下午6.45.36.png

如果有人记得AVFoundation刚出那年的WWDC的话,一定对AVFoundation的性能表现印象深刻,同时播放100部视频而丝毫不卡顿!在笔者的使用过程中也验证了这一点,无论是对于本地视频还是网络在线点播,AVFoundation表现都异常优异。

我们先来看看AVKit的结构:

AVKit结构.png

由于本篇只是起一个“导购”的作用,而且关于AVKit的相关文章文档多如牛毛因此便不再介绍。下面推荐几个基于AVKit的第三方视频框架:

  1. VKVideoPlayer
  2. ALMoviePlayerController
  3. PBJVideoPlayer

后工业时代

然而,凡事总会有一个然而,AVKit也并非完美无瑕,当我们需要播放一些非常规格式的视频的时候(比如RMVB),AVKit又只能望洋兴叹了。

相信Mac用户都很熟悉一款VLC播放器,这款播放器在Mac上表现异常优异,支持的格式几乎涵盖了所有格式(就是这么屌!)。没错,就是它创造者--VideoLAN,开源了一款牛逼的视频播放框架MobileVLCKit!

我们先来看看它所支持的格式:

*.rmvb *.asf *.avi *.divx *.dv *.flv *.gxf *.m1v *.m2v *.m2ts *.m4v *.mkv *.mov *.mp2 *.mp4 *.mpeg *.mpeg1 *.mpeg2 *.mpeg4 *.mpg *.mts *.mxf *.ogg *.ogm *.ps *.ts *.vob *.wmv *.a52 *.aac *.ac3 *.dts *.flac *.m4a *.m4p *.mka *.mod *.mp1 *.mp2 *.mp3 *.ogg.

是不是很心动呢?那我们就开始吧!

1. 框架编译

在Show you code之前,我们总需要先有它的库吧?官方给出了详细的教程,英文不好?翻墙网速不好?没关系!这里有编译完成的VLC框架,下载下来就好啦!

MobileVLCKit静态库下载链接

2.项目编译

MobileVLCKit的静态库非常大,解压下来以后差不多有600+MB,但是编译之后只有几M而已,所以放心使用吧。

  1. Linked Frameworks and Libraries中添加下载完成的MobileVLCKit;

  2. 添加依赖框架,MobileVLCKit依赖于以下的框架:

屏幕快照 2016-03-22 下午8.11.05.png
  1. 修改编译选项,由于该框架底层由C++所编写,所以我们需要更改相关的编译选项;
6DF02A9C-7E7A-422F-BF69-41F381F2659B.png
  1. 修改Framework Search Paths,否则工程无法找到该框架;
CDFC9F51-D803-4376-A698-F29BDB542576.png

PS: "std::ios_base::Init::~Init()", referenced from
出现这样的编译问题,是需要再加进libstdc++.dylib和libstdc++.6.dylib(为6.1使用,xcode5以后默认complier也可以编译通过)

OK!不错意外的话,CMD + B编译成功了!

为了抛砖引玉,献上我自己基于MobileVLCKit写的播放器:MRVLCPlayer,本来我只是想做一个Demo的,但是做着做着想做成一个框架,现在还有很多功能没有完善,但是作为一个Demo应该是够用了。

MRVLCPlayer.gif

信息时代

当然啦,如果你懂得一些视频解码更专业的知识,你还可以使用ffmpeglive555,这样可以更加底层的学习视频相关的技术。当然啦,博主现在也在学习这方面的知识,在此只是推荐给大家,顺便悄悄的说一句,其实MobileVLCKit也是基于ffmpeg二次开发的。

石器时代后记

无论多么牛逼多么晦涩难懂的技术,最终的目的都是服务于人。人类从石器时代进化到如今,手中的工具换了一茬又一茬,一味的炫技没有任何意义,选择适合自己的工具才是正道。我相信,百分之九十以上的需求,在本文的信息时代之前都能解决,选择权在你的手中。好了不说了,我要把我旁边的母猿打晕拖进洞穴了,我们下次见~

相关文章

网友评论

  • MH杭:为什么4G 播放不了呢
  • 滚来滚去的桔子:不支持 swf....
    目目生鱼:@滚来滚去的桔子 https://mp.weixin.qq.com/s/-osKQftaR1NQ2PpGsW-oyg
    滚来滚去的桔子:@Maru 项目中可能有swf,找翻天都不知道要怎么才能支持:sob:
    Maru:@滚来滚去的桔子 swf不算是视频吧……
  • tunny:你好,试了试rtmp流播放时没有画面是什么原因呢?
  • WKCaesar:有个问题 同一个mp4文件,用mac的quicktime和手机微信都是正常的。但是用AVPlayer播的时候总是跳过开始几秒才播。搞不懂。。。
  • 风规自远:如果demo中的代码加上注释就更完美了
  • 不辣先生:支持h265解码播放么??硬解还是软解?老铁
  • Maru:@L_YHY 库导入的不对或者你编译的不支持arm64
  • L_YHY:Undefined symbols for architecture arm64:
    "_VTIsHardwareDecodeSupported", referenced from:
    _OpenDecoder in MobileVLCKit(libvideotoolbox_plugin_la-videotoolbox.o)
    ld: symbol(s) not found for architecture arm64
    clang: error: linker command failed with exit code 1 (use -v to see invocation)

    请问楼主,这个问题怎么解决
  • 5f3040a1cc26:楼主,请问一下在播放网络视频的时候,想要获取缓冲进度怎么获取,VLC好像没有这个接口啊,不知楼主能否赐教,谢谢。。
  • TymonShaw:demo快进怎么不好用?拖动进度条到中间,直接就不播放了,一直转。。。
  • 8f64fc6e6524:CoreAnimation: [EAGLContext renderbufferStorage:fromDrawable:] was called from a non-main thread in an implicit transaction! Note that this may be unsafe without an explicit CATransaction or a call to [CATransaction flush].
    shader program 1: WARNING: Output of vertex shader 'TexCoord1' not read by fragment shader
    WARNING: Output of vertex shader 'TexCoord2' not read by fragment shader
    我集成成功了,可是播放avi没有声音
  • 远方的枸杞:我是进来找资源的
  • 程旭媛:请问网络不稳定情况下如何保证视频最佳观看体验呢?
  • e8f45d421f4b:我引入这个框架出错,最后排查出来是因为跟cocoapod冲突。。。。难受,还不知道咋解决
  • 903615cfd441:楼主:问一下,这个能否直接播放NSData类型的传递数据呢?
  • 903615cfd441:楼主:有个问题请教一下,如果我获取的直接是NSData类型的音频数据流,那将怎样实时播放呢?
  • starfox寒流:也就是说 MobileVLCKit 和 ijkPlayer是同一级的,都是基于FFMPEG二次开发。
    Maru:@starfox寒流 差不多吧,但是前者更封装层次更低一点,毕竟是个Kit嘛
  • danson:之前用的好好的 现在一打开视频就报一堆东西 然后播放 到17秒的时候 视频就自动结束播放了
    楼楼有没有什么建议呀 我查资料也没找到有效的解决办法

    初始化后的日志:
    2017-09-07 16:00:05.419949+0800 jiaPei[2069:705365] creating player instance using shared library
    [000000010ee07d68] core generic error: option marq-color does not exist
    [000000010ee07d68] core generic error: option marq-opacity does not exist
    [000000010ee07d68] core generic error: option marq-position does not exist
    [000000010ee07d68] core generic error: option marq-refresh does not exist
    [000000010ee07d68] core generic error: option marq-size does not exist
    [000000010ee07d68] core generic error: option marq-timeout does not exist
    [000000010ee07d68] core generic error: option marq-x does not exist
    [000000010ee07d68] core generic error: option marq-y does not exist
    [000000010d712398] http access error: seek too far
    2017-09-07 16:00:07.943686+0800 jiaPei[2069:705770] Metal GPU Frame Capture Enabled
    2017-09-07 16:00:07.945175+0800 jiaPei[2069:705770] Metal API Validation Enabled
    2017-09-07 16:00:08.002795+0800 jiaPei[2069:705770] libMobileGestalt MobileGestaltSupport.m:153: pid 2069 (jiaPei) does not have sandbox access for frZQaeyWLUvLjeuEK43hmg and IS NOT appropriately entitled
    2017-09-07 16:00:08.002871+0800 jiaPei[2069:705770] libMobileGestalt MobileGestalt.c:550: no access to InverseDeviceID (see <rdar://problem/11744455>)
    shader program 1: WARNING: Output of vertex shader 'TexCoord1' not read by fragment shader
    WARNING: Output of vertex shader 'TexCoord2' not read by fragment shader

    视频自动结束前的日志
    [000000010d712398] core access error: read error: Connection reset by peer
    [h264 @ 0x104a57400] AVC: nal size 240047
    [h264 @ 0x104a57400] AVC: nal size 240047
    [h264 @ 0x104a57400] no frame!
    [000000010d712398] http access error: seek failed
    [mov,mp4,m4a,3gp,3g2,mj2 @ 0x1049f4e00] stream 1, offset 0x59b39a: partial file
  • ws小c:播放网络视频,一直播放不了,什么原因?换了demo中的网络视频地址也是播放不了
    ws小c:@Maru framework库我是从官方下载下来的
    ws小c:@Maru 我换成这个链接 http://streams.videolan.org/streams/mp4/Mr_MrsSmith-h264_aac.mp4 也是一样不行。
    Maru:@ws小c Demo里面的URL确实播放不了,不过那个是URL的问题。。。其他能在浏览器打开的视频应该都是可以的
  • aa3d1c0d483c:楼主 为啥网络播放不了
    ws小c:同问
  • 36a4a194388b:大神,带中文URL怎么播放,转换UTF8 也不行
    36a4a194388b:@Maru 除了最下面的URL。http://flv3.bn.netease.com/videolib3/1707/27/uwUMB9833/SD/uwUMB9833-mobile.mp4可以 剩下的2个都不行
    36a4a194388b:@Maru NSString *string=@"http://210.76.0.33/mdata/admin/2016/3/4/2015年《班组杂志》表彰会召开.mp4";
    //http://120.25.226.186:32812/resources/videos/minion_02.mp4
    //http://flv3.bn.netease.com/videolib3/1707/27/uwUMB9833/SD/uwUMB9833-mobile.mp4

    player.mediaURL = [NSURL URLWithString:[string stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
    Maru:@DreamSky_ab84 你怎么转换的啊,把代码和URL贴出来?
  • Albus111:这个可以边下边播吗?可以缓存吗?
  • 蒙牛神探:如何编译?
  • 我的大名叫小爱:APP可以实现 网易云音乐? 然后打开录音 ???
  • MrJ的杂货铺:你好,真机编译不通过是什么原因啊
  • e939502bbb11:大哥您好,我成功的集成您的項目
    但出現了一個問題
    多次來回播放後「Terminated due to memory issue」
    閃退了,內存泄露的原因完全找不到....求救
    Maru:@L2EB 相关的使用教程互联网上有很多,建议你搜索一下,我现在在外面,作为一个iOS从业者,instrument肯定也是必须的
    e939502bbb11:@Maru 沒有使用過可以教學一下嗎?
    Maru:@L2EB 你用instrument看到他泄露的是哪些东西么?
  • XTShow:您好,请问一下,您的demo我这边正常能够运行,但是自己新建工程后,导入MobileVLCKit,添加所需framework什么的都正常,在.m里引入#import <MobileVLCKit/MobileVLCKit.h>后编译也成功,但是只要一在后面使用这个框架,就会报错“: Linker command failed with exit code 1 (use -v to see invocation)”,正常应该是路径不对,但是如果路径不对的话,为什么还能在引入头文件之后编译成功呢?报错问题怎么能解决呢?谢谢!
    XTShow:@Maru 哦哦~学习到了~谢谢哈!
    Maru:@没有人知道我是谁丨让我吐槽个够 如果开启bitcode那么,整个项目所有的编译之后的代码都要经过bitcode的编译优化,而这个VLC编译成framework的时候并没有经过bitcode的优化编译,所以就会编译不通过,除非不使用下载的framework我们自己来重新编译,这样才行
    XTShow:我擦。。。竟然是Enable Bitcode的问题。。。必须得是NO。。。C++的框架确实听说过这个问题,但是为什么会报那么个错呢。。。
  • 我还没想好12138:谢谢大神的分享,这就是我要找的视频播放解决方案了。
  • across_fate:按照步骤来的,竟然还是提示找不到这个framework
  • AncientMing:做过视频的App,觉得自己算是懂的了,看了这篇感觉高度有所增加。越来越觉得自己无知。之前有用MobileVLCKit,亏了看了你的文章才知道这是一个很出名的库。。汗:sweat:
  • 经天纬地:播放器左边上下滑动不能调节亮度?
    Maru:@经天纬地 可以的啊
  • CRAZYBADAM:大神,谢谢分享,这个框架有本地缓存么,怎么清除本地缓存。
  • 只因我为足球而生:风格比较喜欢。
  • 黄梦轩:楼主你好,我现在也需要通过ffmpeg来实现视频的播放功能,但是不知道该怎么把通过ffmpeg获取到的视频数据传送给AVPlayer来进行播放。所以想向你请教。希望楼主能讲解一下,多谢!!
  • 小代码仔:楼主, 在使用MobileVLCKit 这个框架的前提下,对于播放的界面应该怎么个性化设置呢?
  • b64b9c7b56d3:我用完archive准备上传App Store 那个ipa包直接变成200多M,咋回事?
  • beb2cef84e25:请问下在播放rtsp流媒体时会偶尔发生花屏的现象该如何解决?谢谢!
  • 630c5eeb35d3:运行加载视频一直报错怎么解决呢?
    报错控制台输出: MRVLCPlayer was compiled with optimization - stepping may behave oddly; variables may not be available.
  • 4f31c987a041:使用非系统播放器,会不会存在特别耗电的问题啊?
    Maru:@希希乌龟 ijk你是不是开启了硬解码,开了就会很耗电
    4f31c987a041:@Maru 我知道系统的省电,MobileVLCKit 也很省电吗?我现在用了一个ijkplayer,感觉跟这个差不多,就是特别耗电。
    Maru:@希希乌龟 不会啊,系统播放器很省电的
  • 94f4261a6606:您好 竖屏播放器的位置可以调吗 没找到在哪里挑
  • 08caf6707801:2017-02-13 16:21:33.031019 MRVLCPlayer[407:86960] [DYMTLInitPlatform] platform initialization successful
    2017-02-13 16:21:43.069536 MRVLCPlayer[407:86881] creating player instance using shared library
    进度条一直转,请问楼主怎么解决?
  • 韩大熊宝要姓张:不错, 感谢分享.
  • 异乡有悟:您好.我想用ios来播放ogg的音频文件,不是播放视频,这个库可以实现吗?有类似的第三方库推荐吗?:flushed: 求教
    异乡有悟:@Maru 谢谢指教,我去查查看
    Maru:@codeCui VLC是支持的,官方有说支持该格式
  • 打猪菜:MobileVLCKit静态库下载链接 这个链接进不去 下载不了啊 楼主 求解决
    Maru:@乡野书生 我这里点进去没有问题啊,你再试试看
  • 大大金:楼主我在模拟器上没问题,在真机上报错:

    clang: warning: libstdc++ is deprecated; move to libc++
    ld: '/Users/wangchong/Desktop/qiutu/qiutu/MobileVLCKit.framework/MobileVLCKit(audio.o)' does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. for architecture arm64
    clang: error: linker command failed with exit code 1 (use -v to see invocation)请问是怎么回事
    Maru:@大大金 库用错了
  • beb2cef84e25:测试了下demo,发现横竖屏切换视频播放会卡死,但是进度条在走,在模拟器上测试的。有没有人遇到同样的问题?
    beb2cef84e25:拿真机调试发现没有这种情况。。。
  • beb2cef84e25:你好,请问下播放RTSP视频流时,有没有方法更改播放延时?
  • kkkore:风趣幽默~。点赞:+1:
  • 不会游泳的飞鱼:

    UIView *playView = [[UIView alloc]initWithFrame:CGRectMake(0, 64, kScreenWidth, 300)];
    // playView.backgroundColor = [UIColor redColor];
    [self.view addSubview:playView];
    [playView setAutoresizingMask:UIViewAutoresizingFlexibleWidth ];
    //创建视频播放控制者
    self.viewPlayer = [[VLCMediaPlayer alloc]init];

    self.viewPlayer.delegate =self;

    VLCMedia *media = [VLCMedia mediaWithPath:[[NSBundle mainBundle] pathForResource:@"02" ofType:@"mov"]];
    self.viewPlayer.media = media;

    self.viewPlayer.drawable=playView;

    [self.viewPlayer play];
    楼主能帮我看一下吗?怎么都播放不出来
  • OnePi:这个进化史写得相当不错啊!加深了认识...
  • akali:看过uc播放器没有,在视频播放前有一个加载到多少的百分比,楼主知道他是怎么实现这个的吗
  • ripperhe:算是给我科普了一下 :smile:
  • 项啊丑:楼主大大可以发个完整的demo到我邮箱么,你的demo没有vlc静态库,上面的静态库链接一直404,万分感谢,937979874@qq.com
    Maru:@项啊丑 给你百度网盘链接吧:https://pan.baidu.com/s/1nv0gDkP
  • 繁华乱世沧桑了谁的容颜:我想说我只记住了最后一句话
  • 一悸木槿伤: :sob: 静态库下了五遍了都下不下来 心好酸
    一悸木槿伤:@Maru 大神 我用你的demo本地视频可以播放 但是远程视频放不出来 是黑屏 进度条在动
    一悸木槿伤:@Maru 谢谢大神,终于下好了
    Maru:@一悸木槿伤 https://pan.baidu.com/s/1jH8Jjl8 我百度云上面也有,你可以试试
  • Miles_miles:棒棒哒
  • bdcd68daddc0:卤煮,那个图片建议你用些小清新的,第二张图肉体占据了屏幕的一半,乍一看老板看见以为我不是在学习
    Maru:@nayibuzai 哈哈哈,其实老板的意思是这么好的网站为什么不分享给他…简书是以第一次发布的第一张图片作为封面的,所以我改不了了…🙃
  • 可尼南柯:写的很好,感谢楼主!
  • 483335776e5a:大神们,我播放远程视频总是提示这个,然后视频播放窗口一直在转圈,是怎么回事~~~
    creating player instance using shared library
    小代码仔:你们应该已经解决了,但是为了后来的新人和小白,我在这里啰嗦一句:“一直转圈,没有图像出来”可能是因为楼主写的那个视频路径和你本地的不一样导致的,自己更改一下就可以了
    慧至我心:怎么破?
    08caf6707801:我也是,请问你解决了吗?
  • Mr_墨:我这边有个问题,播放点播视频(在线视频和本地视频)他会直接全部加载到内存中,造成还没有播放就崩溃的问题,有办法解决么?
  • red_yellow:大神 真机上有声音无图像 有遇到么?
  • ljqjbb:creating player instance using shared library
    [00007fc18a63d228] core generic error: option marq-color does not exist
    [00007fc18a63d228] core generic error: option marq-opacity does not exist
    [00007fc18a63d228] core generic error: option marq-position does not exist
    [00007fc18a63d228] core generic error: option marq-refresh does not exist
    [00007fc18a63d228] core generic error: option marq-size does not exist
    [00007fc18a63d228] core generic error: option marq-timeout does not exist
    [00007fc18a63d228] core generic error: option marq-x does not exist
    [00007fc18a63d228] core generic error: option marq-y does not exist

    博主,我这个是为什么呀?~~url绝对没问题。
    Jack_Liao:@ws小c 你有 demo吗,我搞下来用不了
    ws小c:同问,你这是不是从沙盒读视频播放出现的问题?
  • JohnQ:博主 还有每次播放的时候都会弹出这个警告
    shader program 1: WARNING: Output of vertex shader 'TexCoord1' not read by fragment shader
    WARNING: Output of vertex shader 'TexCoord2' not read by fragment shader
  • JohnQ:还有能不能播放结束后能不能恢复到最初播放状态
    JohnQ:@Maru 博主 我把你的这个放到聊天列表里面进行展示 可是我遇到一个问题是为什么我一进入页面的时候视频的声音为什么会播放呢?还有我在设置全局断点的时候总是会在libc++abi.dylib`__cxa_throw:
    -> 0x1142fe867 <+0>: pushq %rbp
    0x1142fe868 <+1>: movq %rsp, %rbp
    0x1142fe86b <+4>: pushq %r15
    0x1142fe86d <+6>: pushq %r14
    0x1142fe86f <+8>: pushq %r12
    0x1142fe871 <+10>: pushq %rbx
    0x1142fe872 <+11>: movq %rdx, %r14
    0x1142fe875 <+14>: movq %rsi, %r15
    0x1142fe878 <+17>: movq %rdi, %rbx
    0x1142fe87b <+20>: callq 0x1142fe475 ; __cxa_get_globals
    0x1142fe880 <+25>: movq %rax, %r12
    0x1142fe883 <+28>: callq 0x1142fee20 ; std::get_unexpected()
    0x1142fe888 <+33>: movq %rax, -0x60(%rbx)
    0x1142fe88c <+37>: callq 0x1142fee53 ; std::get_terminate()
    0x1142fe891 <+42>: movq %rax, -0x58(%rbx)
    0x1142fe895 <+46>: movq %r15, -0x70(%rbx)
    0x1142fe899 <+50>: movq %r14, -0x68(%rbx)
    0x1142fe89d <+54>: leaq -0x20(%rbx), %r14
    0x1142fe8a1 <+58>: movabsq $0x434c4e47432b2b00, %rax ; imm = 0x434C4E47432B2B00 这里breakpotion
    Maru:@JohnQ MRVLCPlayer.mm 里面的setupControlView方法里面就有关于关闭时间的处理啊,至于播放完毕的监听,你去VLC暴露的.h那里找一下,我记得是有一个通知的,要不就是代理,很久没有搞VLC了,至于播放到最初状态要么seek到最初的时间点,要么切换播放源,这都没有问题吧
  • JohnQ:刚刚提的问题解决了 还有一个问题 博主 你写的关闭按钮的事件在哪里啊 我怎么找不到啊 我想在关闭按钮那边做一个代理方法 还有这个怎么去做一个视频播放完毕的监听事件呢
  • Maru:不好意思啊,我也还没有进行Xcode8的适配。。。不过看Log信息感觉应该跟VLC的静态库有关,过一段时间看看VLC官方有没有更新,估计更新了就好了吧
  • JohnQ:博主 为什么xcode升级到8后跟你写的步骤进行引用会编译报错
    Undefined symbols for architecture x86_64:
    "_VTDecompressionSessionCreate", referenced from:
    _StartVideoToolbox in MobileVLCKit(videotoolbox.o)
    "_VTDecompressionSessionDecodeFrame", referenced from:
    _DecodeBlock in MobileVLCKit(videotoolbox.o)
    "_VTDecompressionSessionInvalidate", referenced from:
    _StopVideoToolbox in MobileVLCKit(videotoolbox.o)
    "_VTDecompressionSessionWaitForAsynchronousFrames", referenced from:
    _OpenDecoder in MobileVLCKit(videotoolbox.o)
    _CloseDecoder in MobileVLCKit(videotoolbox.o)
    "_iconv", referenced from:
    _sub_recode in MobileVLCKit(ass.o)
    _print_unicode in MobileVLCKit(exp-txt.o)
    _vlc_iconv in MobileVLCKit(libc.o)
    _vbi_ucs2be in MobileVLCKit(export.o)
    _smb_iconv in MobileVLCKit(smb_utils.o)
    _iconv_ucs2 in MobileVLCKit(conv.o)
    __vbi_iconv_open in MobileVLCKit(conv.o)
    ...
    (maybe you meant: _vbi_fputs_iconv_ucs2, _vbi_strndup_iconv_caption , __vbi_iconv_open , __vbi_iconv_close , _vbi_export_puts_iconv_ucs2 , __vbi_strndup_iconv , __vbi_iconv_ucs2 , _vbi_strndup_iconv_ucs2 , _vbi_fputs_iconv , _vbi_export_puts_iconv , _vlc_iconv , _vlc_iconv_open , _vbi_strndup_iconv , _vlc_iconv_close )
    "_iconv_close", referenced from:
    _sub_recode in MobileVLCKit(ass.o)
    _vbi_print_page_region in MobileVLCKit(exp-txt.o)
    _export in MobileVLCKit(exp-txt.o)
    _vlc_iconv_close in MobileVLCKit(libc.o)
    _vbi_ucs2be in MobileVLCKit(export.o)
    _smb_iconv in MobileVLCKit(smb_utils.o)
    __vbi_iconv_close in MobileVLCKit(conv.o)
    ...
    (maybe you meant: __vbi_iconv_close, _vlc_iconv_close )
    "_iconv_open", referenced from:
  • 3f2b7f0a58c7:我要为博主的文笔点个赞
  • JohnQ:博主为什么不把那个报红的框架一起放到代码中去呢
    Maru:@JohnQ 没有写啊,最近项目太催了,木有时间:cry:
    JohnQ:@Maru 博主 问一下你的这个demo播放远程数据有写视频缓存吗
    Maru:@JohnQ 那个静态库600M,传到github上面太蛋疼了,
  • yehkong:报错:Undefined symbols for architecture arm64:
    "_merge16_arm64_neon", referenced from:
    _Open in MobileVLCKit(libdeinterlace_plugin_la-deinterlace.o)
    "_merge8_arm64_neon", referenced from:
    _Open in MobileVLCKit(libdeinterlace_plugin_la-deinterlace.o)
    ld: symbol(s) not found for architecture arm64
    是什么原因呢,怎么解决啊
    Maru:@yehkong 我觉得应该你还是遗落了什么东西,按照文章中的步骤仔细检查一下,因为很多人都成功了的,谢谢支持
  • 9652fb49e2e0:文章很棒 楼主封装的Demo也很棒 希望楼主的Demo多加几个接口 比如移除 下一个视频之类的
    Maru:@岂有此理1 谢谢建议,一起加油吧!
  • Goooo:楼主,下面这个问题麻烦帮忙看下,谢谢
    Undefined symbols for architecture arm64:
"_merge16_arm64_neon", referenced from:
_Open in MobileVLCKit(libdeinterlace_plugin_la-deinterlace.o)
"_merge8_arm64_neon", referenced from:
_Open in MobileVLCKit(libdeinterlace_plugin_la-deinterlace.o)
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
  • avi9111:不错,支持一个
  • 知守勋:请问输出下面这段是什么原因?我在播放本地MP4 格式的时候偶尔会蹦.能不能帮忙告知是什么原因.
    creating player instance using shared library
    shader program 1: WARNING: Output of vertex shader 'TexCoord1' not read by fragment shader
    WARNING: Output of vertex shader 'TexCoord2' not read by fragment shader

    知守勋:@oc_swift 没有,项目中加了直播框架冲突就换了播放器
    crossyf:请问你解决了吗?我也是,本地视频,播放不了,
  • 1b24457b8dc0:谢谢分享,编译成功了
  • 4cd939fe3d89:Undefined symbols for architecture arm64:
    "_merge16_arm64_neon", referenced from:
    _Open in MobileVLCKit(libdeinterlace_plugin_la-deinterlace.o)
    "_merge8_arm64_neon", referenced from:
    _Open in MobileVLCKit(libdeinterlace_plugin_la-deinterlace.o)
    ld: symbol(s) not found for architecture arm64
    clang: error: linker command failed with exit code 1 (use -v to see invocation)

    请问楼主,这个是什么问题?
    L_YHY:我也遇到这个问题了,你解决了么?
    Goooo:@孤独患者1992 我也遇到了,解决了吗
    SlowWalker:@孤独患者1992 我也遇到这个问题了,你解决了么?
  • 孤独感爆棚:你好,请问一下,基于AVKit那几个第三方播放器支持缓存吗
  • 4bdc7e7078d0:貌似如果路径中有中文就播放不了了,很奇怪,楼主有遇到过么
    36a4a194388b:@wzh005313 这个怎么解决的?
    4bdc7e7078d0:@wzh005313 我已经转过中文的URL了~
  • Small_Potato:你好,请问这个怎么在真机上运行啊?
  • 9ac72c204f4b:我的问题好了,我新建的工程没有引楼主说的那些库 引完就编译无错了
  • 9ac72c204f4b:project 里是YES,targets里是NO
    我看楼主的demo工程是这样设置的,但是我的编译报错 100多个错误
  • 9ac72c204f4b:demo运行成功了,但是放在我的工程里 引用都弄完了,编译提示

    /Desktop/02_Libs/MobileVLCKit.framework/MobileVLCKit(ios2.o)' does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. for architecture armv7

    我看了下我的bitcode是YES,如果改成NO的话有100多个错误。。。全是c的错误
  • 9ac72c204f4b:下载了您的demo。MobileVLCKit lib没有集成在代码工程里是吗 还需要自己下载大的工程,自己编译成一个lib吗
    9ac72c204f4b:@蕾蕾是女神 那个链接里面有一堆build 我下载第一个解压缩后是好几个工程,该用哪个编译呢,或者哪里有直接编译好的lib库可以直接引用的呢,谢谢。
    蕾蕾是女神:@ios开发小小白 作者已经有编译好的了,在文章中有链接。不过你可以自己试着编译一个静态库。
  • lpzlzp:非常完美
  • FTC陳:demo运行网络URL,播放wmv格式的时候,快进的时候,会有花屏/灰屏现象,请教一下这个应该怎么解决?
  • 蜕变163:项目不完整啊:#import <MobileVLCKit/MobileVLCKit.h> 报红
    蜕变163:@Maru 好吧
    Maru:你没下载VLC静态库文件,文章里面 有链接,这个库解压之后600M所以我没传上去
  • 6821efe06262:楼主,demo播放远程视频的时候为什么点击暂停就到最后了点击播放有从头开始了,怎么解决呢
  • FlyingPenguin:ijkplayer
  • super_lian:刚好想学习下,多谢 :smile:
  • 1995Oneself:成功播放视频,成就感爆棚,谢谢博主。 PS:我是学弟--。
    Maru:@Oneself_ 66666,你还可以去看一下billbill开源的一个播放器ijkplayer,更进阶
  • 我要有腹肌了:楼主您好 我现在要优化视频功能 就是不点击进入视频界面 在controller界面就可以播放视频,不需要用户点击进入视频详情界面.这个需要我掌握什么技术.期待您的回复 :wink:
  • neobuger:请问你自己的demo 有下载么?
    neobuger:@Maru mobilevlckit/mobilevlckit.h file not found 一直提示这个是为嘛啊
    neobuger:@Maru 哦吼吼 没注意 :grin:
    Maru:@neobuger 文章里有Github的地址啊
  • leejunhui:楼主给力!!
  • 可能是含钙最高的钙钙:非常感谢楼主,刚做视频播放这块,还要多想楼主请教下
  • 醉春风:昨天还在研究MobileVLCKit 这个框架!!谢谢分享!学习了 !请教下楼主这个框架可以做直播吗?
  • 你看见我的小象了吗:我不知道为什么我的项目引入框架之后,编译运行很慢,而且在真机调试的时候出现下面的警告:(null): warning: (armv7) could not find object file symbol for symbol _ff_yuv2planeX_8_neon
    dc7825001545:@星星月亮落一地 你这个问题解决没,我也遇到同样的问题了,在demo里面能够运行并成功播放,但是植入到项目当中编译就出现这样的警告,虽然可以编译通过,但是播放不了

本文标题:浅谈iOS视频播放的N种解决方案

本文链接:https://www.haomeiwen.com/subject/xxrllttx.html