我需要获取这个在 h264 中但在 flv 容器中编码的文件,然后将其放入 mp4、3gp 或任何 android MediaPlayer 可以理解的文件格式。
我想在本地做这个。因为我不会解码或编码任何东西,所以我认为我不会浪费很多能量(我错了吗?)
我按照这里的说明http://www.roman10.net/?p=394并且可以成功编译和使用 ffmpeg 并将其与 mp4 和 3gp 文件一起使用。
但是当涉及到 flv 文件时,它会失败。我知道在 ffmpeg for android 的特定端口中没有 flv 文件的格式定义。
例如,没有 libavformat/flv.h 头文件。
也许这就是为什么它有效:
extern AVInputFormat ff_mov_demuxer;
av_register_input_format(&ff_mov_demuxer);
虽然这失败了:
extern AVInputFormat ff_flv_demuxer; av_register_input_format(&ff_flv_demuxer);
问题是,隧道尽头有灯吗?有人做过类似的事情吗?有用吗?我的意思是,我总是可以将 flv 媒体文件放入 Flash 播放器中,瞧.. 问题是这将是一个特殊的解决方案,因为它不适用于所有那些运行速度较慢的设备但还不能运行 Flash 的人.
尼尔森
PS。以防万一。以下是有关我正在谈论的文件的一些信息:
ffmpeg -i rio.flv
ffmpeg version N-32624-gea8de10, Copyright (c) 2000-2011 the FFmpeg developers
built on Sep 15 2011 23:31:42 with gcc 4.5.2
configuration: --enable-libfaac --enable-libmp3lame --enable-librtmp --enable-libtheora --enable-libx264 --enable-libxvid --enable-gpl --enable-nonfree
libavutil 51. 16. 0 / 51. 16. 0
libavcodec 53. 15. 0 / 53. 15. 0
libavformat 53. 12. 0 / 53. 12. 0
libavdevice 53. 3. 0 / 53. 3. 0
libavfilter 2. 42. 0 / 2. 42. 0
libswscale 2. 1. 0 / 2. 1. 0
libpostproc 51. 2. 0 / 51. 2. 0
Seems stream 0 codec frame rate differs from container frame rate: 2000.00 (2000/1) -> 14.99 (15000/1001)
Input #0, flv, from 'rio.flv':
Duration: 00:01:00.06, start: 0.000000, bitrate: 783 kb/s
Stream #0.0: Video: h264 (Main), yuv420p, 704x480 [SAR 10:11 DAR 4:3], 14.99 tbr, 1k tbn, 2k tbc