HTTP Live Streaming, FFMPEG & FFSERVER, et iPhone OS 3
dans l'iPhone OS 3, Apple a introduit HTTP Live Streaming qui devrait permettre le streaming en direct de la vidéo à partir de l'internet. J'utilise actuellement une webcam, qui se connecte à mon serveur, et qui est ensuite convertie en FLV stream par ffmpeg, puis rediffusée à l'aide de ffserver. Est-ce que quelqu'un sait comment configurer un flux vidéo que l'iPhone peut utiliser en utilisant ffmpeg et ffserver? Je devrais pouvoir ré-encoder dans n'importe quel format à la volée.
4 réponses
vous devrez construire une copie de ffmpeg avec une version >= e109a29d6ddb02b2dd58c6c385ebec27f2d23b58 (Git) ou 18793 (svn). Assurez-vous que vous spécifiez également le drapeau --enable-libx264 lorsque vous construisez. Une fois que vous l'avez mis en marche, vous pouvez faire à peu près ce qui suit:
ffmpeg -i <input video> -acodec libmp3lame -ac 1 -vcodec libx264 -s 320x240 \
-level 30 -f mpegts - | \
segmenter - 10 test test.m3u8 http://example.com/path/to/your/files/
c.-à-d. apporter un fichier d'entrée ou un flux dans ffmpeg et pipe une vidéo H. 264 avec audio MP3 dans segmenter D'Apple. Le segmenter crache des fichiers vidéo segmentés et des sélections M3U pointant vers le segmenté fichiers. Vous serviriez les fichiers segmentés et les sélections via un serveur Web comme Apache.
évidemment, vous voudrez modifier les options ffmpeg et segmenter substantiellement pour obtenir les résultats que vous recherchez.
pour ceux qui sont intéressés j'ai fourni un segmenter open source avec un script qui vous permettra d'utiliser ffmpeg pour le faire, voir mon segmenté en streaming sur iphone projet. Il peut faire des segments multi-bitrates pour les flux d'entrée et transférera les segments de flux vers une destination configurable via scp, ftp et même jusqu'à aws s3.
C'est un sujet assez ancien, mais le support HLS, une caractéristique apparemment nouvelle de FFmpeg pourrait être utile à quelqu'un.
Un exemple d'utilisation serait la suivante:
ffmpeg -i <input_file> -c:v libx264 -preset slow -map 0 -an -flags -global_header -f hls -hls_time <segment_length> <m3u8_file>
Si vous souhaitez faire du streaming en live, ce serait un autre exemple:
ffmpeg -i <input_stream> -c:v libx264 -preset ultrafast -map 0 -an -flags -global_header -f hls -hls_time <segment_length> -hls_list_size <playlist_entries> -hls_wrap <wrap> <m3u8_file>
-hls_list_size
argument limite le nombre de fichiers dans la liste de lecture, et le -hls-wrap
l'argument limite le nombre total de fichiers et enveloppera les noms de fichiers une fois qu'il atteint ce point (ex: test0.ts, test1.ts... test7.ts, test0.ts, test1.ts... quand wrap est 8).
Pour plus d'informations, voir la documentation. Veuillez noter que les exemples ci-dessus suppriment l'audio avec le -an
drapeau, comme je l'ai personnellement jamais eu besoin de lui.
Qu'y a-t-il de mal à utiliser QuickTime pour convertir des films au format "iPhone"? Vous ne faites que Fichier > Exporter > format iPhone... Ai-je raté quelque chose?
après conversion au format iPhone, je le découpe avec mediafilesegmenter (trouvé à Apple Developer Connection, Http Live Streaming Tools):
mediafilesegmenter -t 10 -f folderName/ nameOfInputFile.m4v
(Note: le folderName/ folder doit exister)
alors dirigez votre iPhone vers un site Web avec
<video src='folderName/prog_index.m3u8' height=45 width=70
controls='on'>Your browser does not support the video tag</video>