在 android 和 IOS 上加载什么 h.264 格式? [英] What h.264 format loads on android AND IOS?

查看:22
本文介绍了在 android 和 IOS 上加载什么 h.264 格式?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

理论上 IOS 和 ANDROID 都可以播放 h.264 文件,但我无法找出对它们进行编码的设置,因此它们实际上可以跨平台工作.有人知道如何使用一个文件为 Android 和 IOS 编码吗?

Theoretically both IOS and ANDROID will play h.264 files, but I can't figure out a setting to encode them so they actually work cross platform. Does anybody know how to encode for both Android and IOS using one file?

附言我对 html5 视频和后备源都了如指掌,我只是不想为每个出现问题的设备编码和托管一个新视频.

p.s. I know all about html5 video and the fallback sources, I just don't want to encode and host a new video for every device that comes down the pike.

推荐答案

这是我们用来在生产环境中转码为 MPEG-4 h.264 的 ffmpeg 命令行.我们已经在多个 Android 设备以及 iOS 上测试了输出.您可以将此作为起点,只需调整帧大小/帧速率和 qfactor 等内容即可.

Here's the ffmpeg command line we use to transcode to MPEG-4 h.264 in our production environment. We've tested the output on several Android devices, as well as iOS. You can use this as a starting point, just tweaking things like frame size/frame rate and qfactor.

ffmpeg -y 
-i #{input_file} 
-s 432x320 
-b 384k 
-vcodec libx264 
-flags +loop+mv4 
-cmp 256 
-partitions +parti4x4+parti8x8+partp4x4+partp8x8 
-subq 6 
-trellis 0 
-refs 5 
-bf 0 
-flags2 +mixed_refs 
-coder 0 
-me_range 16 
-g 250 
-keyint_min 25 
-sc_threshold 40 
-i_qfactor 0.71 
-qmin 10 -qmax 51 
-qdiff 4 
-acodec libfaac 
-ac 1 
-ar 16000 
-r 13 
-ab 32000 
-aspect 3:2 
#{output_file}

影响 Android 兼容性的一些重要选项是:

Some of the important options affecting Android compatibility are:

-coder 0      Uses CAVLAC rather than CABAC entropy encoding (CABAC not supported on Android)
-trellis 0    Should be shut off, requires CABAC
-bf 0         Turns off B-frames, not supported on Android or other h.264 Baseline Profile devices
-subq 6       Determines what algorithms are used for subpixel motion searching. 7 applies to B-frames, not supported on Android.
-refs 5       Determines how many frames are referenced prior to the current frame.  Increasing this number could affect compatibility

在我们使用此 ffmpeg 配方对视频进行编码后,我们还通过 qt-faststart 传递视频.此步骤将视频重新分块以进行流式传输.我们通过 HTTP 将其流式传输到我们 Android 应用程序中的嵌入式 VideoView.流式传输到我们知道的任何 Android 设备都没有问题.

After we encode our video with this ffmpeg recipe, we also pass the video through qt-faststart. This step rechunks the video for streaming. We stream it over HTTP to an embedded VideoView within our Android app. No problems streaming to any Android device we're aware of.

2013 年 6 月 17 日更新:我只想添加一条说明,最好坚持使用 H.264 编码的基线"配置文件,以便在所有 Android 设备上实现最大兼容性.上面的命令行没有明确指定 H.264 配置文件,但 ffmpeg 确实有一个 -profile 如果您正在使用其预设,则很有用的命令行标志.您可能不应该使用 -profile.我使用主要"而不是基线"配置文件(通过手刹)为我的 ASUS Transformer 300 平板电脑(Android 4.2)编码了视频.主要"配置文件会出现音频与播放视频不同步的问题.

Update 2013-06-17: I just wanted to add a note that it's best to stick with "baseline" profile for H.264 encoding for maximum compatibility across all Android devices. The above command line doesn't explicitly specify an H.264 profile, but ffmpeg does have a -profile command line flag that is useful if you are using its presets. You probably shouldn't mess with -profile. I have encoded videos for my ASUS Transformer 300 tablet (Android 4.2) using "main" rather than "baseline" profile (via Handbrake). The "main" profile gave problems with audio getting out of sync with video on playback.

这篇关于在 android 和 IOS 上加载什么 h.264 格式?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆