French le mediaplayer et videoview

alan1968

Active Member
Licensed User
Longtime User
bonjour,
j'ai déjà posé la question en anglais mais je n'ai pas reçu de réponse qui me conviennent ,dans mon application "hmimm" j'ai ajouté un objet vidéo a la demande des certains utilisateurs ,j'ai donc inclus cette objet dans mon programme tout fonctionne bien ,le soucis c'est que je n’arrive pas a libéré le mediaplayer ,je ne trouve pas la fameuse fonction mediaplayer.release() du java et donc a chaque lancement je ré-ouvre une instance pour le mediaplayer et donc l’après plusieurs lancement les performances se dégrade si j'ai des pages avec 3-4 vidéo et je me retrouve avec x*3-4 mediaplayer ouvert,je le vois grace DALVIK DEBUG MONITOR
Qui a une solution ? car je voudrai ne plus avoir tout ces mediaplayers ouvert
Faut-il que je fasse ma propre librairie ?

Merci

alain
 

alan1968

Active Member
Licensed User
Longtime User
oui pour mediaplayer pour un son type mp3 le release existe,mais pour un videoview qui utilise indirectement le mediaplayer je ne sais pas comment faire,ce me turpine depuis une semaine

B4X:
Sub Globals
Dim vv As VideoView
End Sub

Sub Activity_Create(FirstTime As Boolean)
vv.Initialize("vv")
Activity.AddView(vv, 10dip, 10dip, 250dip, 250dip)
vv.LoadVideo(File.DirRootExternal, "somefile.mp4")
vv.Play
End Sub

Sub vv_Complete
Log("Playing completed")
End Sub

Sub Activity_KeyPress (KeyCode As Int) As Boolean
If (KeyCode = KeyCodes.KEYCODE_BACK) Then
If Msgbox2("EXIT ?", "", "YES", "", "NO", Null) = DialogResponse.POSITIVE Then
vv.release() <<---- comment faire ????
Activity.Finish
Return False
Else
Return True
End If
End If

End Sub
 
Last edited:

Informatix

Expert
Licensed User
Longtime User
bonjour,
j'ai déjà posé la question en anglais mais je n'ai pas reçu de réponse qui me conviennent ,dans mon application "hmimm" j'ai ajouté un objet vidéo a la demande des certains utilisateurs ,j'ai donc inclus cette objet dans mon programme tout fonctionne bien ,le soucis c'est que je n’arrive pas a libéré le mediaplayer ,je ne trouve pas la fameuse fonction mediaplayer.release() du java et donc a chaque lancement je ré-ouvre une instance pour le mediaplayer et donc l’après plusieurs lancement les performances se dégrade si j'ai des pages avec 3-4 vidéo et je me retrouve avec x*3-4 mediaplayer ouvert,je le vois grace DALVIK DEBUG MONITOR
Qui a une solution ? car je voudrai ne plus avoir tout ces mediaplayers ouvert
Faut-il que je fasse ma propre librairie ?

Comme Erel te l'a expliqué, VideoPlayer effectue lui-même le release du MediaPlayer quand tu appelles la fonction Stop(). Tu peux le vérifier facilement en regardant le code source d'Android (fonction stopPlayback()).
Il faut donc t'assurer que tu appelles bien Stop avant de sortir.
 

alan1968

Active Member
Licensed User
Longtime User
je fais bien un stop dans mon app

Voici ce que je fais avant chaque changement de page si j'ai des vidéos présente (index_video > 0)

B4X:
'raz video
If index_video > 0 Then 
For i=0 To index_video-1
videoproject(i).Stop
videoproject(i).MediaControllerEnabled=False
videoproject(i).RemoveView
Next
index_video=0
End If
 

alan1968

Active Member
Licensed User
Longtime User
Personnellement je mettrais videoproject(i) = Null après le RemoveView pour signifier explicitement au système qu'il n'y a plus de référence.
j'y avais déjà pensé mais sans résultat ...

peux-tu confimer mes dire ?

voici le code et un copie d'ecran du debuger

merci


B4X:
'Activity module
Sub Process_Globals
   'These global variables will be declared once when the application starts.
   'These variables can be accessed from all modules.

End Sub

Sub Globals
    Dim vv As VideoView
End Sub

Sub Activity_Resume

End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub


Sub Activity_Create(FirstTime As Boolean)
    vv.Initialize("vv")
    Activity.AddView(vv, 10dip, 10dip, 250dip, 250dip)
    vv.LoadVideo(File.DirRootExternal, "video-demo.mp4")
    vv.Play

End Sub
Sub vv_Complete
    Log("Playing completed")
End Sub

Sub Activity_KeyPress (KeyCode As Int) As Boolean 'return true if you want to consume the event
If (KeyCode = KeyCodes.KEYCODE_BACK) Then
   If Msgbox2("EXIT ?", "", "YES", "", "NO", Null) = DialogResponse.POSITIVE Then
   vv.Stop
   vv.RemoveView
   vv=Null
      Activity.Finish
      Return False
   Else
   Return True
   End If
End If

End Sub
 

Attachments

  • videoview.jpg
    videoview.jpg
    74.4 KB · Views: 308
Top