10

要件:

一時停止と再開機能を備えたビデオ録画を備えたアプリを開発したい。

試してみました :

サーフェス ビューを使用してビデオを記録するまでアプリを開発しました。

すでに調査済み:

私はすでにすべてのサイトを検索しました、今のところ解決策を得ることができず、Androidにはビデオの一時停止と再開のためのデフォルトオプションがないことを知っており、ビデオをマージすることでそれを達成できることも知っています.

必要なもの:

利用可能な外部プラグインがある場合は共有してください。既に達成している場合はこれを達成する方法を教えてください。また、ビデオをマージする方法に関連するリソースを共有してください..検索しましたが、適切なリソースはありません私はあなたが見つけたら何かを共有してください..

4

1 に答える 1

6

最後に答えを見つけました:)
私はffmpegについて調査しましたが、それはより深く、さらに数日かけて掘り下げているようですが
、ffmepgの適切なリソースを取得できず、mp4parser libを使用しようとし、要件を正常に完了しました。

複数のビデオをマージするためのコード

public class MergeVide extends AsyncTask<String, Integer, String> {

    @Override
    protected void onPreExecute() {
        progressDialog = ProgressDialog.show(Video.this,
                "Preparing for upload", "Please wait...", true);
        // do initialization of required objects objects here
    };

    @Override
    protected String doInBackground(String... params) {
        try {
            String paths[] = new String[count];
            Movie[] inMovies = new Movie[count];
            for (int i = 0; i < count; i++) {
                paths[i] = path + filename + String.valueOf(i + 1) + ".mp4";
                inMovies[i] = MovieCreator.build(new FileInputStream(
                        paths[i]).getChannel());
            }
            List<Track> videoTracks = new LinkedList<Track>();
            List<Track> audioTracks = new LinkedList<Track>();
            for (Movie m : inMovies) {
                for (Track t : m.getTracks()) {
                    if (t.getHandler().equals("soun")) {
                        audioTracks.add(t);
                    }
                    if (t.getHandler().equals("vide")) {
                        videoTracks.add(t);
                    }
                }
            }

            Movie result = new Movie();

            if (audioTracks.size() > 0) {
                result.addTrack(new AppendTrack(audioTracks
                        .toArray(new Track[audioTracks.size()])));
            }
            if (videoTracks.size() > 0) {
                result.addTrack(new AppendTrack(videoTracks
                        .toArray(new Track[videoTracks.size()])));
            }

            BasicContainer out = (BasicContainer) new DefaultMp4Builder()
                    .build(result);

            @SuppressWarnings("resource")
            FileChannel fc = new RandomAccessFile(String.format(Environment
                    .getExternalStorageDirectory() + "/wishbyvideo.mp4"),
                    "rw").getChannel();
            out.writeContainer(fc);
            fc.close();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        String mFileName = Environment.getExternalStorageDirectory()
                .getAbsolutePath();
        mFileName += "/wishbyvideo.mp4";
        filename = mFileName;
        return mFileName;
    }

    @Override
    protected void onPostExecute(String value) {
        super.onPostExecute(value);
        progressDialog.dismiss();
        Intent i = new Intent(Video.this, VideoUpload.class);
        i.putExtra("videopath", value);
        i.putExtra("id", id);
        i.putExtra("name", name);
        i.putExtra("photo", photo);
        startActivity(i);
        finish();
        }
}


カウントはビデオファイル数に他なりませ ん。

上記のコードは、より多くのビデオをマージし、ビデオをプレビューすることにしたという点で、最終的なコードを別のアクティビティに送信します。
上記のコードを使用する前に、必ず mp4parser lib を使用してください。

于 2013-07-19T08:19:54.020 に答える