replay视频播放器_怎么让手机音乐跟视频一起放

replay视频播放器_怎么让手机音乐跟视频一起放以前项目中需要播放在线视频和在线音频,当时就研究了一下。下面只显示核心代码。1.AVPlayer(负责视频操作,例如播放,暂停,声音的大小,跳到指定的时间)2.AVPlayerLayer(负责视频的可视化区域,视频的播放模式,注意是CALayer,不能接手触摸)3.AVPlayItem(表示AVPlayer播放的资源对象,可以监听其状态)全屏的实现有2种方式1.可以

大家好,又见面了,我是你们的朋友全栈君。

以前项目中需要播放在线视频和在线音频,当时就研究了一下。下面只显示核心代码。

1.AVPlayer (负责视频操作,例如播放,暂停,声音的大小,跳到指定的时间)

2.AVPlayerLayer(负责视频的可视化区域,视频的播放模式,注意是CALayer,不能接手触摸)

3.AVPlayItem (表示AVPlayer播放的资源对象,可以监听其状态)

全屏的实现有2种方式

1.可以通过transform 来让view旋转(缺点是不能触发屏幕的旋转)。2可以通过autolayout 来实现

当视频或音频播放完之后,我们可以使App 自动去播放下一首视频或者音频。这是我们就需要为去注册一个通知,用这个通知去实现监听avplayer.currentItem 

代码如下

//AVPlayerItem添加播放完成通知

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(playbackFinished:) name:AVPlayerItemDidPlayToEndTimeNotification object:self.player.currentItem];

//播放完成之后会执行这个函数

-(void)playbackFinished:(NSNotification *)notification{

    MyLog(@”视频播放完成);

    AVPlayerItem * p = [notification object];

    //关键代码

    [p seekToTime:kCMTimeZero];

    [self pause];

    self.playBtn.selected=NO;

    self.playBtn.hidden=NO;

    if([_delegate respondsToSelector:@selector(playNextMusic)]){  //在这里我们可以去实现播放下一首视频和视频的操作。

        [self.delegate playNextMusic];

    }

}

//监听当前资源的状态属性,监听网络加载情况属性,监控缓存区大小此时我们都需要监听AVPlayerItem,

 //监控状态属性,注意AVPlayer也有一个status属性,通过监控它的status也可以获得播放状态

    [playerItem addObserver:self forKeyPath:@”status” options:NSKeyValueObservingOptionNew context:nil];

//监控网络加载情况属性

    [playerItem addObserver:self forKeyPath:@”loadedTimeRanges” options:NSKeyValueObservingOptionNew context:nil];

//监控缓冲区大小

    [playerItem addObserver:self forKeyPath:@”playbackBufferEmpty” options:NSKeyValueObservingOptionNew context:nil];

//我们可以使用这个方法来来显示当前的播放时的时间,代码如下

    [self performSelectorInBackground:@selector(initPlayTime) withObject:nil]; 




有时音乐播放器和视频播放器还需要一个播放进度条。 

待续……………………..



版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/125308.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • UEditor前端配置项说明

    UEditor前端配置项说明

    2021年11月5日
    61
  • org/w3c/dom/ElementTraversal 错误解决办法[通俗易懂]

    org/w3c/dom/ElementTraversal 错误解决办法[通俗易懂]org/w3c/dom/ElementTraversal错误解决办法不记得之前几天把什么maven依赖包删除了,今天利用htmlunit运行代码的时候报了下面的错误:Exceptioninthread”main”java.lang.NoClassDefFoundError:org/w3c/dom/ElementTraversal atjava….

    2022年10月25日
    0
  • Android中BindService和StartService「建议收藏」

    Android中BindService和StartService「建议收藏」一、首先,让我们确认下什么是service?       service就是android系统中的服务,它有这么几个特点:它无法与用户直接进行交互、它必须由用户或者其他程序显式的启动、它的优先级比较高,它比处于前台的应用优先级低,但是比后台的其他应用优先级高,这就决定了当系统因为缺少内存而销毁某些没被利用的资源时,它被销毁的概率很小哦。二、那么,什么时候,我们需要使用s

    2022年5月18日
    37
  • 集合基数[通俗易懂]

    集合基数[通俗易懂]通俗的说,集合的势是量度集合所含元素多少的量。集合的势越大,所含的元素越多。定理9.1设A,B,C是任意集合,(1)A≈A。(2)若A≈B,则B≈A。(3)若A≈B,B≈C,则A≈C。定义9.2(1)设A,B是集合,如果存在从A到B的单射函数,就称B优势于A,记作A·B。如果B不是优势于A,则记作A·B。(2)设A,B是集合,若A·B且AB,则称B真优势于A,记作A·B。如果B不是真优势于A,则记作A·B。关于DiscreteMathematics更多讨论与交流,敬请关注本博客和新浪微博s

    2022年6月25日
    51
  • Stairway to SQLCLR Level 5: Development (Using .NET within SQL Server)

    Stairway to SQLCLR Level 5: Development (Using .NET within SQL Server)原文链接:http://www.sqlservercentral.com/articles/Stairway+Series/119429/BySolomonRutzky,2015/03/11TheSeriesThisarticleispartoftheStairwaySeries:StairwaytoSQLCLRThepossibil

    2022年7月20日
    10
  • leveldb多线程读写(大数据高并发解决方案)

    在并发写入的时候,leveldb巧妙的利用一个时间窗口做batch写入,这部分代码值得一读:StatusDBImpl::Write(constWriteOptions&options,WriteBatch*my_batch){  //partA  Writerw(&mutex_);  w.batch=my_batch;  w.sync=options.syn…

    2022年4月16日
    185

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号