=====================================================

最简单的基于FFmpeg的移动端样例系列文章列表:

最简单的基于FFmpeg的移动端样例:Android HelloWorld

最简单的基于FFmpeg的移动端样例:Android 视频解码器

最简单的基于FFmpeg的移动端样例:Android 视频解码器-单个库版

最简单的基于FFmpeg的移动端样例:Android 推流器

最简单的基于FFmpeg的移动端样例:Android 视频转码器

最简单的基于FFmpeg的移动端样例附件:Android 自带播放器

最简单的基于FFmpeg的移动端样例附件:SDL Android HelloWorld

最简单的基于FFmpeg的移动端样例:IOS HelloWorld

最简单的基于FFmpeg的移动端样例:IOS 视频解码器

最简单的基于FFmpeg的移动端样例:IOS 推流器

最简单的基于FFmpeg的移动端样例:IOS 视频转码器

最简单的基于FFmpeg的移动端样例附件:IOS自带播放器

最简单的基于FFmpeg的移动端样例:Windows Phone HelloWorld

=====================================================

前几篇文章记录的都是安卓平台下基于FFmpeg的多媒体程序。作为对照,本文记录一个基于安卓自带多媒体框架OpenCore的视频播放器。

安卓自带的多媒体框架的用法相对移植FFmpeg来说简单太多了,仅仅须要调用几个接口函数就能控制视频的播放。不再过多记录它的用法。

源码

项目的文件夹结构如图所看到的。

Java源码位于src文件夹。

Android程序Java端代码位于src\com\leixiaohua1020\sandroidplayer\MainActivity.java。例如以下所看到的。

/**
*
* 最简单的安卓视频播放器
* Simplest Android Player
*
* 雷霄骅 Lei Xiaohua
* leixiaohua1020@126.com
* 中国传媒大学/数字电视技术
* Communication University of China / Digital TV Technology
* http://blog.csdn.net/leixiaohua1020
*
* 本程序是基于安卓接口的视频播放器。 *
* Video player based on Android API.
*
*/
package com.leixiaohua1020.sandroidplayer; import android.os.Bundle;
import android.os.Environment;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.VideoView; public class MainActivity extends Activity { @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); final VideoView videoView = (VideoView) findViewById(R.id.videoView1); Button setButton = (Button) this.findViewById(R.id.button_set);
Button startButton = (Button) this.findViewById(R.id.button_start);
Button pauseButton = (Button) this.findViewById(R.id.button_pause);
Button stopButton = (Button) this.findViewById(R.id.button_stop);
final EditText urlEdittext= (EditText) this.findViewById(R.id.input_url); setButton.setOnClickListener(new OnClickListener() {
public void onClick(View arg0){
String folderurl=Environment.getExternalStorageDirectory().getPath();
String urltext=urlEdittext.getText().toString();
//Small FIX, Avoid '/'
if(urltext.charAt(0)=='/'){
urltext=urltext.substring(1);
}
String inputurl=folderurl+"/"+urltext;
Log.e("url",inputurl); videoView.setVideoPath(inputurl);
//videoView.setMediaController(new MediaController(MainActivity.this));
}
}); startButton.setOnClickListener(new OnClickListener() {
public void onClick(View arg0){
videoView.start();
}
}); pauseButton.setOnClickListener(new OnClickListener() {
public void onClick(View arg0){
videoView.pause();
}
}); stopButton.setOnClickListener(new OnClickListener() {
public void onClick(View arg0){
videoView.stopPlayback();
}
}); } @Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
} }

执行结果

App在手机上执行后的结果例如以下图所看到的。单击“Set”、“Start”、“Pause”、“Stop”几个按钮能够对视频做不同的操作。

注意须要把等待播放的视频文件拷贝至存储卡对应的文件夹中。比如对于以下截图的情况。须要将sintel.mp4拷贝至存储卡的根文件夹中。

下载

simplest ffmpeg mobile
项目主页

Github:https://github.com/leixiaohua1020/simplest_ffmpeg_mobile

开源中国:https://git.oschina.net/leixiaohua1020/simplest_ffmpeg_mobile

SourceForge:https://sourceforge.net/projects/simplestffmpegmobile/

CSDN工程下载地址:http://download.csdn.net/detail/leixiaohua1020/8924391

本解决方式包括了使用FFmpeg在移动端处理多媒体的各种样例:

[Android]
simplest_android_player: 基于安卓接口的视频播放器
simplest_ffmpeg_android_helloworld: 安卓平台下基于FFmpeg的HelloWorld程序
simplest_ffmpeg_android_decoder: 安卓平台下最简单的基于FFmpeg的视频解码器
simplest_ffmpeg_android_decoder_onelib: 安卓平台下最简单的基于FFmpeg的视频解码器-单库版
simplest_ffmpeg_android_streamer: 安卓平台下最简单的基于FFmpeg的推流器
simplest_ffmpeg_android_transcoder: 安卓平台下移植的FFmpeg命令行工具
simplest_sdl_android_helloworld: 移植SDL到安卓平台的最简单程序
[IOS]
simplest_ios_player: 基于IOS接口的视频播放器
simplest_ffmpeg_ios_helloworld: IOS平台下基于FFmpeg的HelloWorld程序
simplest_ffmpeg_ios_decoder: IOS平台下最简单的基于FFmpeg的视频解码器
simplest_ffmpeg_ios_streamer: IOS平台下最简单的基于FFmpeg的推流器
simplest_ffmpeg_ios_transcoder: IOS平台下移植的ffmpeg.c命令行工具
simplest_sdl_ios_helloworld: 移植SDL到IOS平台的最简单程序

最简单的基于FFmpeg的移动端样例附件:Android 自带播放器的更多相关文章

  1. 最简单的基于FFmpeg的移动端样例:Android 视频转码器

    ===================================================== 最简单的基于FFmpeg的移动端样例系列文章列表: 最简单的基于FFmpeg的移动端样例:A ...

  2. 最简单的基于FFmpeg的移动端样例:Android 视频解码器-单个库版

    ===================================================== 最简单的基于FFmpeg的移动端样例系列文章列表: 最简单的基于FFmpeg的移动端样例:A ...

  3. 最简单的基于FFmpeg的移动端样例附件:SDL Android HelloWorld

    ===================================================== 最简单的基于FFmpeg的移动端样例系列文章列表: 最简单的基于FFmpeg的移动端样例:A ...

  4. 最简单的基于FFmpeg的移动端样例:IOS 视频转码器

    ===================================================== 最简单的基于FFmpeg的移动端样例系列文章列表: 最简单的基于FFmpeg的移动端样例:A ...

  5. 最简单的基于FFmpeg的移动端样例:Android HelloWorld

    ===================================================== 最简单的基于FFmpeg的移动端样例系列文章列表: 最简单的基于FFmpeg的移动端样例:A ...

  6. 最简单的基于FFmpeg的移动端样例:IOS 视频解码器

    ===================================================== 最简单的基于FFmpeg的移动端样例系列文章列表: 最简单的基于FFmpeg的移动端样例:A ...

  7. 最简单的基于FFmpeg的移动端样例:Windows Phone HelloWorld

    ===================================================== 最简单的基于FFmpeg的移动端样例系列文章列表: 最简单的基于FFmpeg的移动端样例:A ...

  8. 最简单的基于FFmpeg的移动端样例:IOS 推流器

    ===================================================== 最简单的基于FFmpeg的移动端样例系列文章列表: 最简单的基于FFmpeg的移动端样例:A ...

  9. 最简单的基于FFmpeg的移动端样例:IOS HelloWorld

    ===================================================== 最简单的基于FFmpeg的移动端样例系列文章列表: 最简单的基于FFmpeg的移动端样例:A ...

随机推荐

  1. lambda calculus

    ;;;lambda calculus ;;;booleanstrue = \x.\y.xfalse = \x.\y.yif = \v.\t.\f. v t f ;;;exif true M N = M ...

  2. Video for Linux Two API Specification revision0.24【转】

    转自:http://blog.csdn.net/jmq_0000/article/details/7536805#t136 Video for Linux Two API Specification ...

  3. [BZOJ2223][BZOJ3524][Poi2014]Couriers 主席树

    3524: [Poi2014]Couriers Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 2436  Solved: 960[Submit][St ...

  4. (8)C#字符串

    一.字符串 为什么说string是一个不可变的字符序列. string a="me"; a="meeeee"; string b="me" ...

  5. Codeforces Round #446 (Div. 2) B. Wrath【模拟/贪心】

    B. Wrath time limit per test 2 seconds memory limit per test 256 megabytes input standard input outp ...

  6. hashmap hashtable

    作者:付佳豪链接:https://zhuanlan.zhihu.com/p/37607299来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 在面试的时候,java集合最 ...

  7. RMQ小结

    RMQ——区间最小查询,实际情况往往不是查询最小值,而是查询区间特定信息.一般要求在logn的级别实现查询or修改. RMQ三种实现 1.BIT BIT给我的感觉就是神迹一般数学的巧合,关于它的原理就 ...

  8. [POI2010]Blocks

    题目大意: 给你一个长度为n的数列,给你m个数k. 对于每个k,你可以进行若干次操作,每次把一个超过k的数的多余部分移到旁边一个数. 问对于每个k,进行若干次操作以后,最长的满足每个数都不小于k的区间 ...

  9. 每天一个linux命令9之crontab 定时任务

    crond 是linux用来定期执行程序的命令.当安装完成操作系统之后,默认便会启动此  任务调度命令.crond命令每分锺会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作. 1语法 ...

  10. iOS开发 Swift开发数独游戏(一)

    一.前言 我姥姥是一名退休数学老师,一直很喜欢玩数独游戏.我以前答应过她要给她写一个数独游戏.本来计划是写一个Android应用的,但恰好我学了好长时间iOS开发一直没做什么"大项目&quo ...