精华内容
参与话题
问答
  • 快进

    2010-01-12 22:22:00
    day 50,还有133天。 需要

      day 50,还有133天。

      需要快。

    展开全文
  • 一、快进式合并 这是Git合并时候的默认选项。在Git中,分支进行合并的时候,如果能够采用快进(fast-forward, ff)方式合并,则会直接以快进方式合并,分支的提交历史没有 "开叉" 现象,也就是没有多个父提交节点...

    一、快进式合并

           这是 Git 合并时候的默认选项。在 Git 中,分支进行合并的时候,如果能够采用快进(fast-forward, ff)方式合并,则会直接以快进方式合并,分支的提交历史没有 "开叉" 现象,也就是没有多个父提交节点。

          就像下面这样的例子:

           F1---F2---  feature
          /
    M1---M2----------  master
    

      feature分支是从master分支M2切出来的。之后 feature 分支产生了 2 个提交,master 没有提交。

    此时,我在 master 分支下,如果我采用以下的命令将 feature 分支到 master 分支上:

    $ git merge feature
    

    由于 master 上面没有新的提交,所以能够进行快进合并,合并后的分支如下:

    M1---M2---F1---F2---  master/feature
    

    也就是,master 和 feature 在同一个位置。master 直接快进到 feature 了。

    二、非快进式合并

    如果我们想保留合并历史记录,像下面这样,强制在 master 分支上产生一个新的合并提交:

           F1---F2---feature
          /       \
    M1---M2--------MC---  master
    
    

     其中,MC就是强制产生出的新的合并提交记录。那么应该怎样做?不快进合并即可。

    在 merge 的时候指定--no-ff参数,即以非快进方式进行合并达到上面的结果。

    $ git merge --no-ff feature
    

    此时再考虑删除 feature 分支,此时 feature 分支的历史合并记录就被完整地记录下来了。

    三、总结

           默认情况下,Git执行"快进式合并"(fast-farward merge),会直接将Master分支指向Develop分支,就像下面这样:

         使用--no-ff参数后,会执行正常合并,且会在Master分支上生成一个新节点。为了保证版本演进的清晰,我们希望采用这种做法。就像下面这样:

    展开全文
  • 视频播放器,支持快进、快退、全屏等。
  • 禁止用户快进播放

    2021-01-08 18:14:44
    课程视频不希望用户快进播放,防止刷课时。 添加一个配置字段,实现禁止用户快进播放。目前我下载了源码,修改了一段代码后功能实现了。请问修改符合规范吗?另外如何集成到线上? ...
  • 主要介绍了python gstreamer 实现视频快进/快退/循环播放功能,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
  • audio可以进行进度拖拽控制,进度快进快退,下载功能。audio可以进行进度拖拽控制,进度快进快退,下载功能。audio可以进行进度拖拽控制,进度快进快退,下载功能。audio可以进行进度拖拽控制,进度快进快退,下载...
  • 两款FLASH播放器可快进
  • <div><p>滑动快进的时候 视屏太快了 正常的是以秒走的 但是我轻轻滑动一下直接几分钟的视频过去了 ,布局文件设置了fastforward_increment和rewind_increment也无效</p><p>该提问来源于开源项目:...
  • <div><p>是否支持歌曲快进功能,目前进度条不能点击,不能拖拽,点击下就会回到起点位置;如何解决,是否支持快进功能;</p><p>该提问来源于开源项目:SevenOutman/vue-a...
  • MPMoviePlayerController点击快进快退会黑屏,请问如何实现点击快进快退后,不作出响应或者让视频暂停
  • git快进合并

    2019-04-28 18:17:28
    我们常常会遇到一个情况:项目中有若干个分支,往往只有一个分支在持续的工作. 例如以下情况: 前期分支A和分支B合并到一起....快进和并的优点是能简化版本库的历史记录并使其保持线性发展.缺点是我们不能根...

    我们常常会遇到一个情况:项目中有若干个分支,往往只有一个分支在持续的工作.

    例如以下情况:

    在这里插入图片描述
    前期分支A和分支B合并到一起.然后开发者们都在分支A上开发,而分支B上没有.当分支A和分支B这两个分支要合并时.此时git要做的内容就非常简单了.只需要移动一下指针到A的位置.这个过程不必产生合并提交.这种情况我们称之为快进合并.

    快进和并的优点是能简化版本库的历史记录并使其保持线性发展.缺点是我们不能根据已经合并过的历史记录来看版本库的这一发展.git提供了–no-ff的选项,以强制其产生一次提新的提交.

    git merge --no-ff branch-A
    

    在这里插入图片描述

    展开全文
  • ffmpeg 快进快退

    千次阅读 2013-08-15 17:04:08
    处理快进快退命令   现在我们来为我们的播放器加入一些快进和快退的功能,因为如果你不能全局搜索一部电影是很让人讨厌的。同时,这将告诉你av_seek_frame函数是多么容易使用。 我们将在电影播放中使用左方向键和右...
    处理快进快退命令

     

    http://blog.sina.com.cn/s/blog_46dc65a90100a9wg.html


    现在我们来为我们的播放器加入一些快进和快退的功能,因为如果你不能全局搜索一部电影是很让人讨厌的。同时,这将告诉你av_seek_frame函数是多么容易使用。
    我们将在电影播放中使用左方向键和右方向键来表示向后和向前一小段,使用向上和向下键来表示向前和向后一大段。这里一小段是10秒,一大段是60秒。所以我们需要设置我们的主循环来捕捉键盘事件。然而当我们捕捉到键盘事件后我们不能直接调用av_seek_frame函数。我们要主要的解码线程decode_thread的循环中做这些。所以,我们要添加一些变量到大结构体中,用来包含新的跳转位置和一些跳转标志:
      int             seek_req;
      int             seek_flags;
      int64_t         seek_pos;
    现在让我们在主循环中捕捉按键:
      for(;;) {
        double incr, pos;
     
        SDL_WaitEvent(&event);
        switch(event.type) {
        case SDL_KEYDOWN:
          switch(event.key.keysym.sym) {
          case SDLK_LEFT:
        incr = -10.0;
        goto do_seek;
          case SDLK_RIGHT:
        incr = 10.0;
        goto do_seek;
          case SDLK_UP:
        incr = 60.0;
        goto do_seek;
          case SDLK_DOWN:
        incr = -60.0;
        goto do_seek;
          do_seek:
        if(global_video_state) {
          pos = get_master_clock(global_video_state);
          pos += incr;
          stream_seek(global_video_state,
                          (int64_t)(pos * AV_TIME_BASE), incr);
        }
        break;
          default:
        break;
          }
          break;
    为了检测按键,我们先查了一下是否有SDL_KEYDOWN事件。然后我们使用event.key.keysym.sym来判断哪个按键被按下。一旦我们知道了如何来跳转,我们就来计算新的时间,方法为把增加的时间值加到从函数get_master_clock中得到的时间值上。然后我们调用stream_seek函数来设置seek_pos等变量。我们把新的时间转换成为avcodec中的内部时间戳单位。在流中调用那个时间戳将使用帧而不是用秒来计算,公式为seconds = frames * time_base(fps)。默认的avcodec值为1,000,000fps(所以2秒的内部时间戳为2,000,000)。在后面我们来看一下为什么要把这个值进行一下转换。
    这就是我们的stream_seek函数。请注意我们设置了一个标志为后退服务:
    void stream_seek(VideoState *is, int64_t pos, int rel) {
     
      if(!is->seek_req) {
        is->seek_pos = pos;
        is->seek_flags = rel < 0 ? AVSEEK_FLAG_BACKWARD : 0;
        is->seek_req = 1;
      }
    }
    现在让我们看一下如果在decode_thread中实现跳转。你会注意到我们已经在源文件中标记了一个叫做“seek stuff goes here”的部分。现在我们将把代码写在这里。
    跳转是围绕着av_seek_frame函数的。这个函数用到了一个格式上下文,一个流,一个时间戳和一组标记来作为它的参数。这个函数将会跳转到你所给的时间戳的位置。时间戳的单位是你传递给函数的流的时基time_base。然而,你并不是必需要传给它一个流(流可以用-1来代替)。如果你这样做了,时基time_base将会是avcodec中的内部时间戳单位,或者是1000000fps。这就是为什么我们在设置seek_pos的时候会把位置乘以AV_TIME_BASER的原因。
    但是,如果给av_seek_frame函数的stream参数传递传-1,你有时会在播放某些文件的时候遇到问题(比较少见),所以我们会取文件中的第一个流并且把它传递到av_seek_frame函数。不要忘记我们也要把时间戳timestamp的单位进行转化。
    if(is->seek_req) {
      int stream_index= -1;
      int64_t seek_target = is->seek_pos;
     
      if     (is->videoStream >= 0) stream_index = is->videoStream;
      else if(is->audioStream >= 0) stream_index = is->audioStream;
     
      if(stream_index>=0){
        seek_target= av_rescale_q(seek_target, AV_TIME_BASE_Q,
                          pFormatCtx->streams[stream_index]->time_base);
      }
      if(av_seek_frame(is->pFormatCtx, stream_index,
                        seek_target, is->seek_flags) < 0) {
        fprintf(stderr, "%s: error while seeking\n",
                is->pFormatCtx->filename);
      } else {
        
    这里av_rescale_q(a,b,c)是用来把时间戳从一个时基调整到另外一个时基时候用的函数。它基本的动作是计算a*b/c,但是这个函数还是必需的,因为直接计算会有溢出的情况发生。AV_TIME_BASE_Q是AV_TIME_BASE作为分母后的版本。它们是很不相同的:AV_TIME_BASE * time_in_seconds = avcodec_timestamp而AV_TIME_BASE_Q * avcodec_timestamp = time_in_seconds(注意AV_TIME_BASE_Q实际上是一个AVRational对象,所以你必需使用avcodec中特定的q函数来处理它)。
     
    清空我们的缓冲
     
    我们已经正确设定了跳转位置,但是我们还没有结束。记住我们有一个堆放了很多包的队列。既然我们跳到了不同的位置,我们必需把队列中的内容清空否则电影是不会跳转的。不仅如此,avcodec也有它自己的内部缓冲,也需要每次被清空。
    要实现这个,我们需要首先写一个函数来清空我们的包队列。然后我们需要一种命令声音和视频线程来清空avcodec内部缓冲的办法。我们可以在清空队列后把特定的包放入到队列中,然后当它们检测到特定的包的时候,它们就会把自己的内部缓冲清空。
    让我们开始写清空函数。其实很简单的,所以我直接把代码写在下面:
    static void packet_queue_flush(PacketQueue *q) {
      AVPacketList *pkt, *pkt1;
     
      SDL_LockMutex(q->mutex);
      for(pkt = q->first_pkt; pkt != NULL; pkt = pkt1) {
        pkt1 = pkt->next;
        av_free_packet(&pkt->pkt);
        av_freep(&pkt);
      }
      q->last_pkt = NULL;
      q->first_pkt = NULL;
      q->nb_packets = 0;
      q->size = 0;
      SDL_UnlockMutex(q->mutex);
    }
    既然队列已经清空了,我们放入“清空包”。但是开始我们要定义和创建这个包:
    AVPacket flush_pkt;
     
    main() {
      ...
      av_init_packet(&flush_pkt);
      flush_pkt.data = "FLUSH";
      ...
    }
    现在我们把这个包放到队列中:
      } else {
        if(is->audioStream >= 0) {
          packet_queue_flush(&is->audioq);
          packet_queue_put(&is->audioq, &flush_pkt);
        }
        if(is->videoStream >= 0) {
          packet_queue_flush(&is->videoq);
          packet_queue_put(&is->videoq, &flush_pkt);
        }
      }
      is->seek_req = 0;
    }
    (这些代码片段是接着前面decode_thread中的代码片段的)我们也需要修改packet_queue_put函数才不至于直接简单复制了这个包:
    int packet_queue_put(PacketQueue *q, AVPacket *pkt) {
     
      AVPacketList *pkt1;
      if(pkt != &flush_pkt && av_dup_packet(pkt) < 0) {
        return -1;
      }
    然后在声音线程和视频线程中,我们在packet_queue_get后立即调用函数avcodec_flush_buffers:
        if(packet_queue_get(&is->audioq, pkt, 1) < 0) {
          return -1;
        }
        if(packet->data == flush_pkt.data) {
          avcodec_flush_buffers(is->audio_st->codec);
          continue;
        }
    上面的代码片段与视频线程中的一样,只要把“audio”换成“video”。
     
    就这样,让我们编译我们的播放器:
    gcc -o tutorial07 tutorial07.c -lavutil -lavformat -lavcodec -lz -lm`sdl-config --cflags --libs`
    试一下!我们几乎已经都做完了;下次我们只要做一点小的改动就好了,那就是检测ffmpeg提供的小的软件缩放采样。
    展开全文
  • 小程序播放视频 禁止快进 很简单的方法 一看就懂
  • jQuery可快进拖动切换幻灯片sampSlider是一款带左右箭头,快进进度条的jquery幻灯片代码。
  • MediaPlayer+SeekBar暂停快进快退首先是,如何能够播放一个视频(网络权限小伙伴们自己盘上)然后是进度条Seekbar然后是点击时改变视频播放进度最后是暂停和继续,INTERESTING!!! 今天学习了音乐播放器超低配版,但是...
  • 1、处理快进快退(seek)命令 本章我将给大家讲解怎么给我们的播放器添加快进、快退、定位功能,这也是几乎所有播放器都有的功能。为实现此功能,我们要用到av_seek_frame函数,这个函数非常简单易用。 我们用...
  • ffmpeg文档7:快进快退

    2016-08-24 17:09:07
    指导7:快进快退 处理快进快退命令 现在我们来为我们的播放器加入一些快进和快退的功能,因为如果你不能全局搜索一部电影是很让人讨厌的。同时,这将告诉你av_seek_frame函数是多么容易使用。 我们将在电影...
  • Youtube 开发通过遥控机控制实现快进快退功能 前言 本文目的如题,实现遥控器控制YouTube的快进快退功能。众所周知使用YouTube原生API开发中,限制条件颇多,比如当前设备上必须要先装4.2.16版本以上的YouTube ...
  • 招聘快进快出的可行性分析 问题 面试过程中发现不到合适的人选 有争议的候选人不招进来 急需要人力完成更多的项目 公司没有名气,简历质量差 即使在面试过程中发现的所谓人才,也有50%的概率在一年内离职 人才...
  • 如题 当视频暂停播放时 如果我长按快进的话 会出现声音很怪的情况 我发现其他应用基本都是暂停后快进 快退点击了就没反应了 这该如何实现 谢谢
  • python gstreamer 实现视频快进/快退/循环播放 关于视频快进/快退/循环播放的知识总结: 1.本地视频时长获取: Gst.Pad.query_duration官方函数介绍: def Gst.Pad.query_duration (self, format): #python wrapper ...
  • 视频文件不能快进

    2013-06-08 22:29:35
    如果您的视频不能快进,可以参考这个文件进行修改。
  • ffmpeg播放器快进快退(七)

    千次阅读 2016-06-25 22:23:50
    指导7:快进快退处理快进快退命令现在我们来为我们的播放器加入一些快进和快退的功能,因为如果你不能全局搜索一部电影是很让人讨厌的。同时,这将告诉你av_seek_frame函数是多么容易使用。我们将在电影播放中使用左...
  • 播放视屏:视屏当前的进度条,代表视屏当前播放的...第二个,由快进快退人为控制首先,先解决这个快进和快退的功能 /** * 快退 */ preSegmentBtn = new PlayButton(getContext()); preSegmentBtn.setOnClickList
  • 本篇博客介绍git push的快进式推送和非快进式推送,也可以在此处访问。首先记住,快进式推送是合理地,非快进式推送时不合理的。所谓的快进式推送(FastForwards),指的是git push时,远程版本库的最新提交是本地...
  • – 不能快进的太快,虽然他已经记录好了看过的时间,但是会回弹(烦躁) 本文采用 CC BY-NC-SA 4.0 许可协议,著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 作者:锡城小凯 来源:云班课...
  • 为QuickTime Player添加快进快退快捷键

    万次阅读 2016-03-20 01:23:53
    为QuickTime Player添加快进快退快捷键1.打开系统自带的Automator软件2.新建文稿,选择如图选项3.选择如图选项4.如图5.再如图,新建脚本文件添加快进脚本代码,这里我设置的是5秒on run {input, parameters} set ...
  • hls 快进快退

    2017-03-16 09:32:52
  • H5 Video禁止快进

    千次阅读 2018-05-28 22:39:46
    &lt;!doctype html&gt; &lt;html&gt; &lt;head&gt; &lt;meta charset="...H5 Video禁止快进&lt;/title&gt; &lt;/style&gt; &lt;/head&gt;
  • 一、环境 i.MX6平台+gstreamer。 二、实现 封装3个函数,play_fast_forward...分别对应快进、快退、正常播放。 gstreamer使用playbin管道。 1、play_fast_forward void play_fast_forward(GstElement *playbi...

空空如也

1 2 3 4 5 ... 20
收藏数 15,143
精华内容 6,057
关键字:

快进