Skip to content

GitLab

  • Projects
  • Groups
  • Snippets
  • Help
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
VLCKit
VLCKit
  • Project overview
    • Project overview
    • Details
    • Activity
    • Releases
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 72
    • Issues 72
    • List
    • Boards
    • Labels
    • Service Desk
    • Milestones
  • Merge Requests 3
    • Merge Requests 3
  • CI / CD
    • CI / CD
    • Pipelines
    • Jobs
    • Schedules
  • Operations
    • Operations
    • Environments
  • Analytics
    • Analytics
    • CI / CD
    • Repository
    • Value Stream
  • Members
    • Members
  • Collapse sidebar
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
  • VideoLAN
  • VLCKitVLCKit
  • Issues
  • #80

Closed
Open
Opened Feb 20, 2017 by bobby@bobby
  • Report abuse
  • New issue
Report abuse New issue

Metadata change on radio stream and player state always buffering though playing

MobileVLCKit-3.0-pre-20161203-0659 Nightly

I am playing a shoutcast / icy cast radio but mediaMetaDataDidChange is only called a few times when the stream starts but not afterwards when title changes. Also even when I turn the network on my iPhone off, mediaPlayer.state is still buffering and mediaState.playing is always but but the time doesn't increase anymore.

Is there any to be immediately notified when VLC has no new data in the pipe / is unable to play currently in order to show correct icon (playing / paused) on the play button?

Thank you

func mediaPlayerStateChanged(aNotification: NSNotification!) {
    if mediaPlayer == nil {
        return
    }

    switch mediaPlayer.state {
    case .Buffering:
        print("buffering")
        break
    case .Playing:
        print("playing")
        break
    default: break
    }
    print(mediaPlayer.state.rawValue, mediaPlayer.playing, mediaPlayer.rate, mediaPlayer.time, mediaPlayer.media.state.rawValue, mediaPlayer.position)
    print(self.mediaPlayer.media.metaDictionary)
}

func mediaPlayerTitleChanged(aNotification: NSNotification!) {
    print("mediaPlayerTitleChanged")
    mediaPlayerStateChanged(aNotification)
}

func mediaMetaDataDidChange(aMedia: VLCMedia) {
    print("mediaMetaDataDidChange")
    print(mediaPlayer.media.metaDictionary)
}

func mediaDidFinishParsing(aMedia: VLCMedia) {
    print("mediaDidFinishParsing")
    print(mediaPlayer.media.metaDictionary)
}

func initVLC(media: VLCMedia) {
    if mediaPlayer == nil {
        mediaPlayer = VLCMediaPlayer()
        mediaPlayer.addObserver(self, forKeyPath: "time", options: .New, context: nil)
        mediaPlayer.addObserver(self, forKeyPath: "state", options: .New, context: nil)
        mediaPlayer.addObserver(self, forKeyPath: "playing", options: .New, context: nil)
        mediaPlayer.delegate = self
        NSTimer.schedule(repeatInterval: 5) { _ in
            self.mediaPlayerStateChanged(nil)
        }
    }
    mediaPlayer.stop()
    mediaPlayer.media = media
    mediaPlayer.media.delegate = self
}

override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
    print(keyPath)
    self.mediaPlayerStateChanged(nil)
}
Edited Sep 19, 2020 by Jean-Baptiste Kempf
To upload designs, you'll need to enable LFS and have admin enable hashed storage. More information
Assignee
Assign to
4.0
Milestone
4.0
Assign milestone
Time tracking
None
Due date
None
2
Labels
Bug VLC Core
Assign labels
  • View project labels
Reference: videolan/VLCKit#80