【问题标题】:how to play .mov format video file in android application如何在 Android 应用程序中播放 .mov 格式的视频文件
【发布时间】:2013-04-13 19:02:25
【问题描述】:

我正在开发一个 android 应用程序,它播放来自我们服务器的 iphone 和 android 上传的视频,问题是 iphone 录制的视频是 .mov 格式,android 不支持。我搜索了很多,但找不到任何解决方案。帮帮我。在此先感谢:)

【问题讨论】:

  • 将您的视频转换为 Android 可识别的格式。将 mov 提供给 iPhone,并将您决定的任何格式提供给 Android。
  • 或者使用mp4格式,安卓和iPhone都可以播放。
  • 对视频进行转码,这是最好的方式。如果你有足够的处理能力,动态转码是另一种方式

标签: android video mov


【解决方案1】:

我会建议您将格式从 iphone 更改为兼容的(即使打开会更好),因为服务器上两种不同格式的视频迟早会令人头疼。

如果可以,请使用ffmpeg 重新格式化您的视频,并以相同的格式将其全部保存在服务器上。

如果你做不到或者很难做到,你可以试试谷歌的 ExoPlayer 组件。 我已经尝试过像您这样的应用程序,设备(iPhone 和 Android)在其中录制视频并上传到服务器。 在服务器端重新格式化所有这些视频几乎是不可能的,因此我们最终决定在客户端应用旧视频的解决方案。

https://google.github.io/ExoPlayer/

ExoPlayer 的设置比 VideoView 大,但操作简单。

    private var player: ExoPlayer = initPlayer()

    private fun initPlayer(): ExoPlayer {
        val bandwidthMeter = DefaultBandwidthMeter()
        val videoTrackSelectionFactory = AdaptiveTrackSelection.Factory(bandwidthMeter)
        val trackSelector = DefaultTrackSelector(videoTrackSelectionFactory)
        return ExoPlayerFactory.newSimpleInstance(context, trackSelector)
    }

fun setup() {

        videoExo.setPlayer(player)
        videoExo.useController = false

        val dataSourceFactory = DefaultDataSourceFactory(
            context,
            Util.getUserAgent(context, context?.packageName), DefaultBandwidthMeter()
        )

        val videoSource = ExtractorMediaSource.Factory(dataSourceFactory).createMediaSource(videoUri)

        player.addListener(object: Player.EventListener {
            override fun onPlayerStateChanged(playWhenReady: Boolean, playbackState: Int) {
                if (playbackState == Player.STATE_READY) {
                    startCallback()
                }
            }
            override fun onPlaybackParametersChanged(playbackParameters: PlaybackParameters?) {}
            override fun onSeekProcessed() {}
            override fun onTracksChanged(trackGroups: TrackGroupArray?, trackSelections: TrackSelectionArray?) {}
            override fun onPlayerError(error: ExoPlaybackException?) {}
            override fun onLoadingChanged(isLoading: Boolean) {}
            override fun onPositionDiscontinuity(reason: Int) {}
            override fun onRepeatModeChanged(repeatMode: Int) {}
            override fun onShuffleModeEnabledChanged(shuffleModeEnabled: Boolean) {}
            override fun onTimelineChanged(timeline: Timeline?, manifest: Any?, reason: Int) {}
        })

        player.prepare(videoSource)
        player.playWhenReady = true
        player.repeatMode = REPEAT_MODE_ALL

    }

希望对你有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多