视频的播放

//

//  ViewController.m

//  UI-NO-21

//

//  Created by Bruce on 15/8/21.

//  Copyright (c) 2015年 Bruce. All rights reserved.

//

 

#import "ViewController.h"

//播放视频 导入<MediaPlayer/MediaPlayer.h>

#import <MediaPlayer/MediaPlayer.h>

 

//如果想使用AVAssetImageGenerator 获得截图 必须导入AVFoundation

#import <AVFoundation/AVFoundation.h>

//AVAsset 通过URL 获得视频的资源

//AVAssetImageGenerator 可以得到 视频里面的图片

 

@interface ViewController ()

{

    

    MPMoviePlayerController *moviePlayer;

}

@end

 

@implementation ViewController

 

- (void)viewDidLoad {

    [super viewDidLoad];

    self.view.backgroundColor = [UIColor blackColor];

    

    

//    moviewPlayer 可以通过 通知 来检测到  视频播放的状态  MPMoviePlayerPlaybackStateDidChangeNotification

    

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changeSate:) name:MPMoviePlayerPlaybackStateDidChangeNotification object:nil];

    

    

    

    NSString *path = [[NSBundle mainBundle] pathForResource:@"IMG_8435" ofType:@"m4v"];

    

    UIImage *image = [self thumbnailImage:path];

    

    self.view.backgroundColor = [UIColor colorWithPatternImage:image];

    

    /*

    

//    播放视频的类

    moviePlayer = [[MPMoviePlayerController alloc]initWithContentURL:[NSURL fileURLWithPath:path]];

//    *****还需要 设置 moviePlayer.view   的frame

    moviePlayer.view.frame = CGRectMake(100, 200, 200, 300);

    moviePlayer.view.backgroundColor = [UIColor redColor];

    

//    设置视频显示控制的样式

    moviePlayer.controlStyle = MPMovieControlStyleFullscreen;

    

//    设置 视频 是否循环播放

//    MPMovieRepeatModeNone, 不循环

//    MPMovieRepeatModeOne    循环

    moviePlayer.repeatMode = MPMovieRepeatModeOne;

 

//    *****需要把 视频播放器的view 添加在  需要播放的视图上

    [self.view addSubview:moviePlayer.view];

    

//    是否允许分享到airPlay

    moviePlayer.allowsAirPlay = YES;

    

    NSLog(@"是否 使用了 AirPlay %d",moviePlayer.airPlayVideoActive);

    

//    如果播放的是网络视频  是否需要 自动继续播放

    moviePlayer.shouldAutoplay = YES;

    

//  设置 视频 全屏

//    moviePlayer.fullscreen = YES;

//    [moviePlayer setFullscreen:YES animated:YES];

    

//    播放

    [moviePlayer play];

    

    NSLog(@"是否是全屏 %d",moviePlayer.isFullscreen);

 

    

    

//    获得视频的加载状态

//    MPMovieLoadStateUnknown        = 0, 未知的状态

//    MPMovieLoadStatePlayable       = 1 << 0, 可以播放的状态

//    MPMovieLoadStatePlaythroughOK  = 1 << 1,  Playback will be automatically started in this state when shouldAutoplay is YES   如果使用了shouldAutoplay = YES  有可以播放的 自动播放

//    MPMovieLoadStateStalled        = 1 << 2, // 没有网络数据 可以播放的时候

//    moviePlayer.loadState

     */

    

//    [moviePlayer stop];

}

 

- (void)changeSate:(NSNotification *)not

{

    

    NSLog(@"视频播放的当前时间%f",moviePlayer.currentPlaybackTime);

    

    

//    可以获得 整个视频播放的对象

    MPMoviePlayerController *mp = not.object;

    

//    playbackState 只读的属性   可以通过它  来获取到  视频播放的状态

    

//    MPMoviePlaybackStateStopped, 停止

//    MPMoviePlaybackStatePlaying, 播放

//    MPMoviePlaybackStatePaused, 暂停

//    MPMoviePlaybackStateInterrupted, 中断

//    MPMoviePlaybackStateSeekingForward, 快进

//    MPMoviePlaybackStateSeekingBackward 回退

    

    switch (mp.playbackState) {

        case MPMoviePlaybackStateStopped: {

            NSLog(@"停止");

            break;

        }

        case MPMoviePlaybackStatePlaying: {

            NSLog(@"正在播放");

            break;

        }

        case MPMoviePlaybackStatePaused: {

            NSLog(@"暂停");

            break;

        }

        case MPMoviePlaybackStateInterrupted: {

            NSLog(@"中断");

            break;

        }

        case MPMoviePlaybackStateSeekingForward: {

            NSLog(@"快进");

            break;

        }

        case MPMoviePlaybackStateSeekingBackward: {

            NSLog(@"回退");

            break;

        }

        default: {

            break;

        }

    }

//    通过moviePlayerController  获得截图的方法

//    MPMovieTimeOptionNearestKeyFrame, 获得相对时间截图

//    MPMovieTimeOptionExact 获得绝对时间的截图

//    [moviePlayer requestThumbnailImagesAtTimes:@[@(1),@(5)] timeOption:MPMovieTimeOptionNearestKeyFrame];

//    检测截图成功的通知名字

//    MPMoviePlayerThumbnailImageRequestDidFinishNotification

    

//    可以获得 通知传过来 内容的 图片的key

//    MPMoviePlayerThumbnailImageKey

}

 

//FFMPEG VFL 转码的开源框架

- (UIImage *)thumbnailImage:(NSString *)path

{

//    1、通过URL获得视频的资源

//    AVAsset

//    AVURLAsset

    

    AVAsset *asset = [AVAsset assetWithURL:[NSURL fileURLWithPath:path]];

//    AVURLAsset *asset = [AVURLAsset assetWithURL:[NSURL fileURLWithPath:path]];

    

    

//    2、初始化 视频资源图片的持有者

    AVAssetImageGenerator *generator = [[AVAssetImageGenerator alloc]initWithAsset:asset];

    

//    3、开始截图

//    <#(CMTime)#>  包含了 时间的值

//    帧数

//    copyCGImageAtTime  拷贝哪个时间段的图片(包扣了哪一帧)

//    CGImageRef 是图片的数据  参数

    CGImageRef ref = [generator copyCGImageAtTime:CMTimeMake(1, 2) actualTime:nil error:nil];

    

//    CGImageRef 转换成UIImage

    UIImage *image = [UIImage imageWithCGImage:ref];

    

    return image;

}

 

 

- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}

 

@end

 

时间: 2024-07-30 20:51:01

视频的播放的相关文章

在滚动列表中实现视频的播放(ListView &amp; RecyclerView)

英文原文:Implementing video playback in a scrolled list (ListView & RecyclerView) 本文将讲解如何在列表中实现视频播放.类似于诸如 Facebook, Instagram 或者 Magisto这些热门应用的效果: Facebook: Magisto: Instagram: 这片文章基于开源项目: VideoPlayerManager. 所有的代码和示例都在那里.本文将跳过许多东西.因此如果你要真正理解它是如何工作的,最好下载

用OpenCV制作视频控制播放器(无声音)

申明:OpenCV是计算机视觉库,所以用在图片或视频处理上,故播放的视频暂时没有声音 软件:用OpenCV制作视频控制播放器(无声音) 功能说明:新建播放窗口,添加进度条可以拖动视频播放. 流程图: 功能说明: 1. 新建进度条 cvCreatTrackbar("","",&,frames,callback) 2.获取总帧数 cvGetCaptureProperty(&,id) double cvGetCaptureProperty( CvCaptu

配置 nginx 支持 f4v视频格式播放

Nginx默认不支持f4v视频格式播放,解决方法为编辑mime.types文件,在video/mp4加上f4v即可 types {   # Data interchange     application/atom+xml                  atom;     application/json                      json map topojson;     application/ld+json                   jsonld;     

利用VS C# 实现串口控制视频的播放 use VLC

开发环境:VS2013, C#, VLC播放器 实现的功能: 1.利用串口通信来控制视频的播放, 2.接收到"1"时播放第一个视频,若10s内没有接收到"1",自动播放第二个视频,期间忽略接受到的0: 3.若正在播放第二个视频,接收到"1",立马播放视频1, 整个功能的实现主要就用到了2个控件和1个VLC类,控件SerialPort和timer&&类VlcPlayer.cs 重要提示:项目必须使用.NET 2.0,并且电脑需要安装

手机影音第七天 视频的播放下一个视频功能实现,视频进度、电量变化的实现

先看下效果图: 在这里,视频进度条会根据视频播放变化,下方的按钮中,播放下一个,上一个都已实现. 代码已经托管到码云上,想下载看的小伙伴可以从下方地址中获取 https://git.oschina.net/joy_yuan/MobilePlayer 1.在这张图上,自定义的显示电量的那一列已经被系统自带的状态栏遮盖,下面就说一下实现方法: 系统电量变化时,系统会发送一个广播,所有对这个广播感兴趣的activity都可以注册广播来接收这个广播.在这里接收系统电量变化,屏幕锁屏.开屏的广播,只能使用

github视频录制播放相关功能-参考

lookingstars/JZVideoDemo  视频播放器 Updated on 11 Aug Objective-C 15 10 caoguoqing/VideoEditDemo  iOS video cut ,also can add blackgroundmusic iOS 视频剪辑,视频添加背景音乐 Updated on 13 Jun 2014 Objective-C 139 50 835239104/KrVideoPlayerPlus  根据36Kr开源的KRVideoPlayer

Android MediaStore检索视频并播放

该文章是为了检索手机上sd卡中的视频,然后将检索出来的相应视频的缩略图,名称等视频信息显示在ListView上.点击每个item后播放相应的视频. 源代码: 布局文件: activity_main: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:la

WPF之路三:视频的播放

同图片一样,把视频资源复制到文件夹路径下,修改资源属性复制到输出目录"始终复制",生成操作改为"内容", 把<MediaElement  Name="myVid" Source="./media/1.mp4" Width="480" Height="320" IsMuted="True" Volume="3.5"  LoadedBehavio

视频加密播放

最近在研究视频加密播放,我发现了一款比较不错的FLV/MP4视频加密系统.它分为2个程序端,加密端和播放端:加密端:负责对视频文件加密,加密后的视频只能通过播放端才能播放. 播放端:负责播放加密和未加密的视频 视频加密主要是加密算法,简单说下思路,代码就不贴了. 1.首先,随机生成一个32个字符长度的密钥. 2.对文件内容,使用前面生成的密钥,进行RC4加密处理. 3.在加密前,文件的头部加上一些加密标记,来区别是否是加密文件. 改进后的RC4加密算法,优点是,加密后长度不变,并且可以任意位置进

照相、从相册上取照片、播放音频、播放本地视频、播放网络视频、MPMoviePlayerController

一.照相.从相册上去照片 1. 先判断是否支持照相功能 *判断当前设备是否支持照相功能,支持返回YES 否则返回NO 注意:模拟器不支持照相功能 把握一个原则只要是物理硬件相关的功能模拟器都不支持 例如: UIImagePickerController 专门处理与照片相关的功能类 是一个控制器 继承于导航视图控制器 if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]