Media Foundation中的標準電影播放器似乎不支持流暢的擦洗。我希望這樣做的目的是,當您在手指上滑動手指時,顯示的視頻會不斷刷新,而不是像默認情況下那樣每隔幾秒就會跳躍一次。起初,我認爲默認控件可能會有某種內置的延遲,但使用我自己的滑塊來設置播放時間並沒有幫助。有任何想法嗎?iOS上的實況視頻擦洗
編輯:我仍在試驗,看起來有可能的清理開始點之間的設置時間間隔。也許有一些方法可以減少間隔。
Media Foundation中的標準電影播放器似乎不支持流暢的擦洗。我希望這樣做的目的是,當您在手指上滑動手指時,顯示的視頻會不斷刷新,而不是像默認情況下那樣每隔幾秒就會跳躍一次。起初,我認爲默認控件可能會有某種內置的延遲,但使用我自己的滑塊來設置播放時間並沒有幫助。有任何想法嗎?iOS上的實況視頻擦洗
編輯:我仍在試驗,看起來有可能的清理開始點之間的設置時間間隔。也許有一些方法可以減少間隔。
這對我有用。我在幻燈片更改中從視頻資產中抓取了一幀。見下面的代碼。它從我目前的項目中刪除了一個可能包含索姆錯誤,但你會明白。雖然希望沒關係,但它在Swift 1中。
var urlVideo :NSURL = NSURL()
var vidLength :CMTime = CMTime()
var durInSeconds: Float = 0.00
var timescale:CMTimeScale = CMTimeScale()
var videoInfo:NSDictionary = NSDictionary()
var chosePosSlider:UISlider = UISlider()
@IBOutlet weak var imgCont: UIImageView!
func generateThumnail(url : NSURL, fromTime:Float64) -> UIImage {
var asset :AVAsset = AVAsset.assetWithURL(url) as! AVAsset
var assetImgGenerate : AVAssetImageGenerator = AVAssetImageGenerator(asset: asset)
assetImgGenerate.appliesPreferredTrackTransform = true
assetImgGenerate.requestedTimeToleranceAfter = kCMTimeZero;
assetImgGenerate.requestedTimeToleranceBefore = kCMTimeZero;
var error : NSError? = nil
var time : CMTime = CMTimeMakeWithSeconds(fromTime, timescale)
var img : CGImageRef = assetImgGenerate.copyCGImageAtTime(time, actualTime: nil, error: &error)
var frameImg : UIImage = UIImage(CGImage: img)!
return frameImg
}
func sliderValueDidChange(sender:UISlider!) {
var newTime:Float = durInSeconds * sender.value
setFrame(newTime)
}
func setFrame(pos:Float) {
imgCont.image = generateThumnail(urlVideo, fromTime: Float64(pos))
}
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) {
self.dismissViewControllerAnimated(true, completion: nil)
videoInfo = info as NSDictionary
urlVideo = videoInfo.objectForKey(UIImagePickerControllerMediaURL) as! NSURL
var asset :AVAsset = AVAsset.assetWithURL(urlVideo) as! AVAsset
vidLength = asset.duration
durInSeconds = Float(CMTimeGetSeconds(vidLength))
timescale = vidLength.timescale
chosePosSlider = UISlider(frame:CGRectMake(20, 450, 340, 20))
chosePosSlider.minimumValue = 0
chosePosSlider.maximumValue = 1
chosePosSlider.continuous = true
chosePosSlider.tintColor = UIColor.greenColor()
chosePosSlider.value = 0
chosePosSlider.addTarget(self, action: "sliderValueDidChange:", forControlEvents: .ValueChanged)
self.view.addSubview(chosePosSlider)
setFrame(0.0)
}
與H264等格式結合使用時不可行 - 請確保您瞭解視頻壓縮的基本知識(i幀與p幀)。 – Till
你能澄清嗎?有我可以使用的格式嗎? – GoldenJoe
任何解決方案?我正在尋找山姆的答案。 – arpo