2017-02-14 2 views
0

je le cas d'utilisation suivante:nginx-RTMP + ffmpeg mouvement moov de mp4 à la tête à la volée

1) Alice publie flux sur le serveur nginx-rtmp

2) Le serveur convertir le flux de mp4 (valeur par défaut est flv si je comprends bien, et une transformation codec est nécessaire)

3) Bob devrait être en mesure de faire plage demande à ce fichier mp4 alors Alice publie encore

Cependant, il semble commande ffmpeg pour convertir un flv en MP4 ne peut être fait Lorsque le fichier mp4 est entièrement généré, ffmpeg effectue la deuxième passe et déplace "moov" vers la tête de son nouveau fichier

Notre cas d'utilisation est de permettre à Bob d'utiliser la demande de plage pour récupérer le fichier mp4 pendant qu'Alice publie encore (c'est à dire regarder la vidéo d'Alice le plus tôt possible) à partir de l'heure 0 (c'est-à-dire à partir de la seconde publication d'Alice). Ainsi, avec moov de mp4 à sa tête, il est simple de faire des demandes de gamme et d'implémenter la fonctionnalité. Raw RTMP ne semble pas résoudre notre problème, puisque nous ne pouvons pas laisser Bob regarder à partir du moment 0 de l'enregistrement d'Alice.

La question est: 1) Est-il possible de le faire alors que le fichier FLV n'est pas encore entièrement généré? 2) Une autre idée comment utiliser nginx-rtmp/ffmpeg pour obtenir la fonctionnalité que nous désirons?

Merci un bouquet

Répondre

2

Non, il est impossible (sauf si vous construisez un joueur tout à fait sur mesure, dans ce cas, pourquoi utiliser MP4 du tout). Ce dont vous avez besoin est un format streamable ou fragmenté comme HLS ou CMAF.

+0

Existe-t-il un moyen de "dynamiser" dynamiquement les octets d'une trame h.264 ou même d'une trame audio mpeg vers un décodeur de navigateur HTML5? Est-ce cela que Media Extensions (MSE) est? Permet-il de configurer la configuration spécifique du décodeur AVC et de l'audio (PPS et SPS)? Je ne vois pas pourquoi un FLV ne contenant que des données MPEG a/v n'est pas jouable dans le navigateur (puisqu'il s'agit maintenant essentiellement d'une variante du format mp4). –

+0

@ VC.One Juste essayé que FLV fonctionne dans ce scénario. c'est-à-dire que j'ai juste besoin de pointer le serveur http vers le flv enregistré, et toutes les conditions nécessaires sont remplies –

+0

FLV n'est certainement pas une variation sur MP4. MSE utilise CMAF, c'est pourquoi je l'ai dit dans ma réponse. (Ou voulez-vous dire f4v, parce que c'est une variation sur MP4, mais c'est juste adobe qui essaie de vous embrouiller. – szatmary