iOS - VLC 简单播放


引言

上周接触到一个用手机链接车载记录仪来实时查看视频的项目,涉及到VLC,发现这个库很强大。这周开始入手简单研究下。

VLC 简述

VLC 是一款强大的本地播放器。

  • 支持几乎所有的主流媒体格式。可以播放来自网络、摄像头、磁盘、光驱的文件,支持包括MPEG 1/2/4, H264, VC-1, DivX, WMV, Vorbis, AC3, AAC等格式的解码。
  • 可播放那些没有下载完整的视频文件。
  • 可以扫描本地端口,然后通过输入用户名和密码浏览电脑的文件,点击视频和音频还能直接播放。
  • 只要本地开启SMB的文件共享服务,同一个局域网内的设备就能通过它访问电脑上的文件了。

在 Windows 和 Linux 上的 VLC 是使用C++/Qt写成,提供了一致的用户体验。同时 VLC 还专门为 OS X 提供了原生版本,OS X 版的 VLC 的用户界面使用Cocoa框架编写,在 OS X 下拥有卓越的原生体验。


SMB协议

Mac OS上,Windows和Linux都支持这种协议。

SMB的格式,长这样:
smb://{hostname}:{password}@{ip}/path

hostname是域名,一般创建SMB共享协议的时候,就需要指定;password是密码,ip是服务器的ip。

比如桌面上的一个mp4文件就应该长这样:
smb://xiaoming:123456@192.168.1.100/xiaoming/Desktop/233.mp4

优质 SMB 第三方:TOSMBClient


使用

一、导入 VLC 库

1、pod MobileVLCKit

在项目的podfile 中加入 pod 'MobileVLCKit', '~> 2.2.2' ,并 pod install 来讲库加入到项目中。
MobileVLCKit


2、导入 libstdc++

否则会报一下错误。如果还报错,则导入 libstdc++ 6.0.9
libstdc


3、在使用到 VLC的地方,添加 #import <MobileVLCKit/MobileVLCKit.h>


二、使用 VLCMediaPlayer

1、申明 VLCMediaPlayer

@property(nonatomic,strong) VLCMediaPlayer *player;//播放器
@property (nonatomic,strong) UIView *playView;//展示的View

2、初始化,

下面使用懒加载,你可以使用我的懒加载工具:
http://blog.csdn.net/lovechris00/article/details/77448356

- (UIView *)playView
{
    if(!_playView){
        _playView = [[UIView alloc] initWithFrame:CGRectMake(30, 100, 300, 300)];
        _playView.backgroundColor = [UIColor yellowColor];
        [self.view addSubview:_playView];
    }
    return _playView;
}

- (VLCMediaPlayer *)player
{
    if(!_player){
        _player = [[VLCMediaPlayer alloc]init];
        _player.delegate = self;
    }
    return _player;
}

3、添加多媒体文件

将mp4文件拖拽到工程中。并获取地址,创建 VLCMedia 文件。

NSString *path=[[NSBundle mainBundle] pathForResource:@"我飘向北方" ofType:@"mp4"];
VLCMedia *media = [VLCMedia mediaWithPath:path];
VLCMedia
  • mediaWithPath
    使用本地的文件

  • mediaWithURL
    使用远程链接初始化。如果后面跟的是本地地址的话,可能会崩溃。


3、播放

self.player.drawable = self.playView;
self.player.media = media;
[self.player play];

实现上述步骤,就可以播放这个mp4了。


三、VLCMediaPlayer 其他方法

播放

-(BOOL)play;

暂停

- (void)pause;

停止

- (void)stop;

下一帧

- (void)gotoNextFrame;

倒回

- (void)rewind;
- (void)rewindAtRate:(float)rate;

快进

- (void)fastForward;
- (void)fastForwardAtRate:(float)rate;//快退,rate 速率
- (void)jumpForward:(int)interval; //快进,时间为 interval,单位为秒
- (void)shortJumpForward;
- (void)extraShortJumpForward;
- (void)mediumJumpForward;
- (void)longJumpForward;

快退

- (void)jumpBackward:(int)interval; //快退,时间为 interval,单位为秒
- (void)extraShortJumpBackward;
- (void)shortJumpBackward;
- (void)mediumJumpBackward;
- (void)longJumpBackward;

四、VLCMediaPlayerDelegate

#pragma mark - VLCMediaPlayerDelegate

//播放状态改变的回调
- (void)mediaPlayerStateChanged:(NSNotification *)aNotification{
    
//    aNotification.userInfo
    NSLog(@"mediaPlayerStateChanged --- ");
    
}

//播放时间改变的回调
- (void)mediaPlayerTimeChanged:(NSNotification *)aNotification{
    
//    NSLog(@"mediaPlayerTimeChanged --- "); //会一直掉用
    
}

常见问题

运行后,你的控制台会打印一堆信息,没关系,他依然可以跑起来

  • Output of vertex shader ‘TexCoord1’ not read by fragment shader

  • core vout display error: Failed to set on top

  • if we’re in the real pre-commit handler we can’t actually add any new fences due to CA restriction
    翻译:由于CA限购,如果我们在真实预提交处理下,不能添加任何新的围栏。

这个问题是xcode 编译器设置的问题,其实并不影响app使用:

参考:http://blog.csdn.net/ws1836300/article/details/52957056


你的demo可以更精致一点

  • 可以把暂停、停止等按钮封装到 设置 drawable 的view中。
  • App退到后台,或者跳转到另外一个界面时,可以暂停音乐。
  • 快进和快退时,界面可以短暂提示 “快进xx秒”。
  • 添加时间显示。

我的demo(左) & 别人的demo(右)
VLC


我的demo 就不献丑了,别人的demo 下载地址:
https://code.videolan.org/videolan/VLCKit

别人demo的教程:
Pocket:VLC集成与使用
http://www.jianshu.com/p/178627b085c3

以及别人 iOS VLC-音乐播放(列表式播放封装)教程
http://www.jianshu.com/p/5519aa0f59c7


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI工程仔

请我喝杯伯爵奶茶~!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值