zoukankan      html  css  js  c++  java
  • IOS-视频

    一、简介

    iOS提供了MPMoviePlayerController、MPMoviePlayerViewController两个类,可以用来轻松播放视频和网络流媒体网络音频
    提示:网络音频同样使用此控制器播放
    YouTobe就是用MPMoviePlayerController实现的
    MPMoviePlayerViewController只能全屏播放视频
    上述两个类都定义在了MediaPlayer框架中
     
    二、MPMoviePlayerController支持的格式
    MPMoviePlayerController
    继承自NSObject
    内部有个view可以展示视频内容
    将该视图添加其他控制器的view上,即可显示视频内容
    MPMoviePlayerController可以播放的视频格式包括:
    H.264、MPEG-4等
    支持的文件扩展名包括:avi,mkv,mov,m4v,mp4等
     
    可以从苹果官网:http://support.apple.com/kb/HT1425下载一些用来测试的视频文件,文件都比较小
     
    提示:MPMoviePlayerController并不支持所有的视频格式,如果要播放不支持的视频格式,需要借助第三方框架进行解码,如VLC
     
    三、MPMoviePlayerController的使用
    加载视频资源(注意,如果url为nil同样可以加载)

    NSAssert(self.url, @"URL不能为空");

    [[MPMoviePlayerController alloc] initWithContentURL:self.url];

    显示

    [self.view addSubview:self.moviePlayer.view];

    通过设置AutoresizingMask属性可以在横竖屏转换时自动调整视图大小

    播放

    [self.moviePlayer play];

    全屏

    [self.moviePlayer setFullscreen:YES animated:YES];

     
    MPMoviePlayerController的播放状态是通过通知中心监听的
     
    四、常用监听通知事件
    状态变化

    MPMoviePlayerPlaybackStateDidChangeNotification

    播放结束

    MPMoviePlayerPlaybackDidFinishNotification

    退出全屏

    MPMoviePlayerDidExitFullscreenNotification

    截屏完成

    MPMoviePlayerThumbnailImageRequestDidFinishNotification 

    截屏方法

    -requestThumbnailImagesAtTimes:timeOption:

    五、VLC(基于FFmpeg)

    注意点
    存放VLC的文件夹名不要有空格
    一旦执行过编译脚本sh, 就别再修改存放VLC的文件夹名

    1.集成

    静态库 + 头文件
     
    依赖库
     
    C++标准库
     
    导入头文件, 播放视频

    #import "VLCMediaPlayer.h"

     

    self.vlcPlayer = [[VLCMediaPlayer alloc] init];

    self.vlcPlayer.drawable = self.view;

    self.vlcPlayer.media = [VLCMedia mediaWithURL:[NSURL URLWithString:@"http://streams.videolan.org/streams/mp4/Mr_MrsSmith-h264_aac.mp4"]];

    [self.vlcPlayer play];

     
    1.VLCMediaPlayer – 常见方法
    播放控制

    - (BOOL)play;

    - (void)pause;

    - (void)stop;

    - (BOOL)isPlaying;

    @property float rate; // 播放速率

    播放进度

    - (void)setTime:(VLCTime *)value; // 当前的播放时间

    - (VLCTime *)time;

    @property (readonly) VLCTime *remainingTime; // 剩余的播放时间

    - (void)setPosition:(float)newPosition; // 播放进度(0.0 ~ 1.0)

    - (float)position;

     
    播放的内容

    - (void)setMedia:(VLCMedia *)value;

    - (VLCMedia *)media;

    播放的载体(显示到哪里, 一般是一个UIView)

    @property (retain) id drawable;

    2.VLCMediaPlayer – 播放器的状态

    播放器的状态
    - (VLCMediaPlayerState)state;

    enum {

        VLCMediaPlayerStateStopped,        // 播放器已经停止

        VLCMediaPlayerStateOpening,        // 流正在打开

        VLCMediaPlayerStateBuffering,      // 流正在缓冲

        VLCMediaPlayerStateEnded,          // 流已经结束

        VLCMediaPlayerStateError,          // 播放器产生了错误

        VLCMediaPlayerStatePlaying,        //  流正在播放

        VLCMediaPlayerStatePaused          // 流被暂停了

    };

    3.VLCMediaPlayerDelegate

    通过代理对象可以监听播放器的状态
    当播放器的状态改变就调用

    - (void)mediaPlayerStateChanged:(NSNotification *)aNotification;

     
    当播放器的时间改变就调用

    - (void)mediaPlayerTimeChanged:(NSNotification *)aNotification;

     1 //
     2 //  ViewController.m
     3 //  IOS_0322_视频
     4 //
     5 //  Created by ma c on 16/3/22.
     6 //  Copyright © 2016年 博文科技. All rights reserved.
     7 //
     8 
     9 #import "ViewController.h"
    10 #import <MediaPlayer/MediaPlayer.h>
    11 #import <MobileVLCKit/MobileVLCKit.h>
    12 
    13 @interface ViewController ()
    14 
    15 @property (nonatomic, strong) VLCMediaPlayer *player;
    16 
    17 @end
    18 
    19 @implementation ViewController
    20 
    21 - (void)viewDidLoad {
    22     [super viewDidLoad];
    23     self.view.backgroundColor = [UIColor cyanColor];
    24 
    25 }
    26 
    27 - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
    28 {
    29 //    [self systemMoviePlayer];
    30     [self mobileVLCMoviePlayer];
    31     
    32 }
    33 
    34 - (void)mobileVLCMoviePlayer
    35 {
    36     NSURL *url = [[NSBundle mainBundle] URLForResource:@"11-传感器.mp4" withExtension:nil];
    37     self.player = [[VLCMediaPlayer alloc] init];
    38     self.player.media = [VLCMedia mediaWithURL:url];
    39     
    40     //设置播放界面的载体
    41     self.player.drawable = self.view;
    42     //播放
    43     [self.player play];
    44 
    45 }
    46 
    47 - (void)systemMoviePlayer
    48 {
    49     MPMoviePlayerController *mpc = [[MPMoviePlayerController alloc] init];
    50     mpc.contentURL = [[NSBundle mainBundle] URLForResource:@"11-传感器.mp4" withExtension:nil];
    51     
    52     //缓冲之后自动播放
    53 //    [mpc prepareToPlay];
    54     
    55     //隐藏自带的控制面板
    56 //    mpc.controlStyle = MPMovieControlStyleNone;
    57     
    58     //添加播放器的界面到控制器View上面
    59     mpc.view.frame = CGRectMake(7, 50, 400, 300);
    60     [self.view addSubview:mpc.view];
    61     
    62     //播放
    63     [mpc play];
    64 
    65 }
    66 
    67 @end
  • 相关阅读:
    anaconda里的python版本回退, requirements
    Django--实现分页功能,并且基于cookie实现用户定制每页的数据条数
    bootstrap 的 datetimepicker,同时有日期和时间, 且开始时间要早于结束时间
    python爬虫 mac下安装使用Fiddler
    【codeforces】【比赛题解】#960 CF Round #474 (Div. 1 + Div. 2, combined)
    【算法学习】Fhq-Treap(无旋Treap)
    【算法学习】点分治
    【codeforces】【比赛题解】#948 CF Round #470 (Div.2)
    【codeforces】【比赛题解】#950 CF Round #469 (Div. 2)
    【codeforces】【比赛题解】#931 CF Round #468 (Div. 2)
  • 原文地址:https://www.cnblogs.com/oc-bowen/p/5307347.html
Copyright © 2011-2022 走看看