mp4の再生

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
駆け出し
記事: 25
登録日時: 8年前

mp4の再生

#1

投稿記事 by 駆け出し » 8年前

こんにちは。
*.mp4の再生について、質問があります.
Visual Stdio 2015, MCIを用いて,MP4を再生したいのですが、再生できないのでmciGetErrorStringWを呼び出すと次のような文字列が取得できました.
MCI の初期化で問題が発生しました。
そこで、Eternal Windowsさんのこちらのサイト(の下のほうです)にて公開されている方法を用いて、MCI Extensionsを出力させたところ、次の結果を得ました.(出力が少し違いますが、結果は同じ)

コード:

(前略)
'SoundPlayer.exe' (Win32): 'C:\Windows\System32\dwmapi.dll' が読み込まれました。PDB ファイルを開けないか、ファイルが見つかりません。
[01/23 Mon 16:42:39][Debug]{[main.cpp at WinProc(55)]}[Value,Data]aiff,MPEGVideo
[01/23 Mon 16:42:39][Debug]{[main.cpp at WinProc(55)]}[Value,Data]dat,MPEGVideo
[01/23 Mon 16:42:39][Debug]{[main.cpp at WinProc(55)]}[Value,Data]m2t,MPEGVideo
[01/23 Mon 16:42:39][Debug]{[main.cpp at WinProc(55)]}[Value,Data]mpa,MPEGVideo
[01/23 Mon 16:42:39][Debug]{[main.cpp at WinProc(55)]}[Value,Data]wmx,MPEGVideo
[01/23 Mon 16:42:39][Debug]{[main.cpp at WinProc(55)]}[Value,Data]wmv,MPEGVideo
[01/23 Mon 16:42:39][Debug]{[main.cpp at WinProc(55)]}[Value,Data]Mid,Sequencer
[01/23 Mon 16:42:39][Debug]{[main.cpp at WinProc(55)]}[Value,Data]m3u,MPEGVideo
[01/23 Mon 16:42:39][Debug]{[main.cpp at WinProc(55)]}[Value,Data]avi,avivideo
[01/23 Mon 16:42:39][Debug]{[main.cpp at WinProc(55)]}[Value,Data]ivf,MPEGVideo
[01/23 Mon 16:42:39][Debug]{[main.cpp at WinProc(55)]}[Value,Data]wvx,MPEGVideo
[01/23 Mon 16:42:39][Debug]{[main.cpp at WinProc(55)]}[Value,Data]m4v,MPEGVideo
[01/23 Mon 16:42:39][Debug]{[main.cpp at WinProc(55)]}[Value,Data]mts,MPEGVideo
[01/23 Mon 16:42:39][Debug]{[main.cpp at WinProc(55)]}[Value,Data]mp4v,MPEGVideo
[01/23 Mon 16:42:39][Debug]{[main.cpp at WinProc(55)]}[Value,Data]mp2v,MPEGVideo
[01/23 Mon 16:42:39][Debug]{[main.cpp at WinProc(55)]}[Value,Data]adts,MPEGVideo
[01/23 Mon 16:42:39][Debug]{[main.cpp at WinProc(55)]}[Value,Data]wma,MPEGVideo
[01/23 Mon 16:42:39][Debug]{[main.cpp at WinProc(55)]}[Value,Data]mpeg,MPEGVideo
[01/23 Mon 16:42:39][Debug]{[main.cpp at WinProc(55)]}[Value,Data]tts,MPEGVideo
[01/23 Mon 16:42:39][Debug]{[main.cpp at WinProc(55)]}[Value,Data]mpv2,MPEGVideo
[01/23 Mon 16:42:39][Debug]{[main.cpp at WinProc(55)]}[Value,Data]au,MPEGVideo
[01/23 Mon 16:42:39][Debug]{[main.cpp at WinProc(55)]}[Value,Data]3gpp,MPEGVideo
[01/23 Mon 16:42:40][Debug]{[main.cpp at WinProc(55)]}[Value,Data]m4a,MPEGVideo
[01/23 Mon 16:42:40][Debug]{[main.cpp at WinProc(55)]}[Value,Data]wax,MPEGVideo
[01/23 Mon 16:42:40][Debug]{[main.cpp at WinProc(55)]}[Value,Data]aif,MPEGVideo
[01/23 Mon 16:42:40][Debug]{[main.cpp at WinProc(55)]}[Value,Data]asx,MPEGVideo
[01/23 Mon 16:42:40][Debug]{[main.cpp at WinProc(55)]}[Value,Data]m2ts,MPEGVideo
[01/23 Mon 16:42:40][Debug]{[main.cpp at WinProc(55)]}[Value,Data]mov,MPEGVideo
[01/23 Mon 16:42:40][Debug]{[main.cpp at WinProc(55)]}[Value,Data]Wav,WaveAudio
[01/23 Mon 16:42:40][Debug]{[main.cpp at WinProc(55)]}[Value,Data]aac,MPEGVideo
[01/23 Mon 16:42:40][Debug]{[main.cpp at WinProc(55)]}[Value,Data]wpl,MPEGVideo
[01/23 Mon 16:42:40][Debug]{[main.cpp at WinProc(55)]}[Value,Data]3gp2,MPEGVideo
[01/23 Mon 16:42:40][Debug]{[main.cpp at WinProc(55)]}[Value,Data]mp4,MPEGVideo ...(☆)
[01/23 Mon 16:42:40][Debug]{[main.cpp at WinProc(55)]}[Value,Data]mp3,MPEGVideo
[01/23 Mon 16:42:40][Debug]{[main.cpp at WinProc(55)]}[Value,Data]mp2,MPEGVideo
[01/23 Mon 16:42:40][Debug]{[main.cpp at WinProc(55)]}[Value,Data]wm,MPEGVideo
[01/23 Mon 16:42:40][Debug]{[main.cpp at WinProc(55)]}[Value,Data]adt,MPEGVideo
[01/23 Mon 16:42:40][Debug]{[main.cpp at WinProc(55)]}[Value,Data]cda,CDAudio
[01/23 Mon 16:42:40][Debug]{[main.cpp at WinProc(55)]}[Value,Data]3g2,MPEGVideo
[01/23 Mon 16:42:40][Debug]{[main.cpp at WinProc(55)]}[Value,Data]asf,MPEGVideo
[01/23 Mon 16:42:40][Debug]{[main.cpp at WinProc(55)]}[Value,Data]mod,MPEGVideo
[01/23 Mon 16:42:40][Debug]{[main.cpp at WinProc(55)]}[Value,Data]m1v,MPEGVideo
[01/23 Mon 16:42:40][Debug]{[main.cpp at WinProc(55)]}[Value,Data]ts,MPEGVideo
[01/23 Mon 16:42:40][Debug]{[main.cpp at WinProc(55)]}[Value,Data]rmi,Sequencer
[01/23 Mon 16:42:40][Debug]{[main.cpp at WinProc(55)]}[Value,Data]mpg,MPEGVideo
[01/23 Mon 16:42:40][Debug]{[main.cpp at WinProc(55)]}[Value,Data]3gp,MPEGVideo
[01/23 Mon 16:42:40][Debug]{[main.cpp at WinProc(55)]}[Value,Data]aifc,MPEGVideo
[01/23 Mon 16:42:40][Debug]{[main.cpp at WinProc(55)]}[Value,Data]mpe,MPEGVideo
[01/23 Mon 16:42:40][Debug]{[main.cpp at WinProc(55)]}[Value,Data]m2v,MPEGVideo
[01/23 Mon 16:42:41][Debug]{[main.cpp at WinProc(55)]}[Value,Data]snd,MPEGVideo
(後略)
(☆)があるように、とりあえずMCIでもMP4は再生できるっぽいのです.(規格が適応していないだけかもしれないですが)
ただしMP3のようにID3のような再生に直接必要ないものが入っていると,再生できないかもしれないと考えたので、バイナリエディッタでそのファイルをのぞいてみました。

ファイルをのぞいてみると、
00 00 00 20 66 74,(続く)
というようになっているので検索してみたのですが、特に目ぼしいサイトは見つかりませんでした.(MP3のID3ヘッダはこれで結構出てきた記憶があります)
(検索結果)

前置きが長くなりましたが、質問は
(1)MP4にもMP3のID3のようなヘッダが存在しているのか
(2)もし存在しているならば、実際のMP4がどこから始まっているのかをどう割り出すのか
とりあえず、この2つにさせてください。

ご教示よろしくお願いします。

Math

Re: mp4の再生

#2

投稿記事 by Math » 8年前

MP4(エムピーフォー)https://ja.wikipedia.org/wiki/MP4はデジタルマルチメディアコンテナファイルフォーマットでありMP3(エムピースリー、英: MPEG-1 Audio Layer-3)https://ja.wikipedia.org/wiki/MP3は、デジタル技術によって音響データを扱うための圧縮技術の1つであり、それから作られる音声ファイルフォーマットである。もともと比較は無意味でMP4にはMP3もいれることができる。
m4aをmp4に変えても再生出来たり規格が複雑なので何を目的とした話なのかもう少しブレークダウンしてもらわないと話が見えないですよ。

駆け出し
記事: 25
登録日時: 8年前

Re: mp4の再生

#3

投稿記事 by 駆け出し » 8年前

ご返信ありがとうございます。
単刀直入に言えば、
現時点でMCIでは再生できないので、どうすれば再生するのか
この一点です。この目的を達成するために
  1. MP4にもMP3のID3のようなヘッダが存在しているのか
  2. もし存在しているならば、実際のMP4がどこから始まっているのかをどう割り出すのか
という質問をさせていただきました。

Math

Re: mp4の再生

#4

投稿記事 by Math » 8年前

富士通の方に(コンソルジェサービスに加入してる[1台保証中]です)リモートコントロールでWindos10に入ってもらい調べてもらった結果Windowsムービーメーカーのデフォルト出力はMP4(.H264)でありWindows Media PlayerはMP4,M4aとも再生できる。(VistaではWindowsムービーメーカーのデフォルト出力はWMVゆえ)MP4が動画のデファクトスタンダードとして認められたらしい。
http://e-words.jp/w/MP4.htmlここに
標準的なMP4ファイルの拡張子は「.mp4」だが、動画のみの場合は「.m4v」音声のみの場合は「.m4a」が使われることもある。携帯電話でメディアを扱う際の標準ファイル形式である3GPP形式、3GPP2形式もMP4の派生フォーマットになっており、拡張子はそれぞれ「.3gp」「.3g2」である。(私は3gp変換ツールを使っていました)
それからiPodのAACはm4aとほぼイコールだとのことです。
Windows Media PlayerはMP4,M4aとも再生可能故MCIでも可能とおもわれる。Media Control Interface —は
https://en.wikipedia.org/wiki/Media_Control_InterfaceOS/2がIBMのOSの名前になりIBMがWindowsを手放した頃からの技術みたいです。
結果m4a(mp4)はMCIで使えるとおもいます。(もう少し調べれば分かるかも..)

YuO
記事: 947
登録日時: 14年前
住所: 東京都世田谷区

Re: mp4の再生

#5

投稿記事 by YuO » 8年前

オフトピック
あまりMP4ファイル形式について詳しくないのですが……
MP3ファイルが特殊な形式なので,あまりMP3ファイルを前提に考えるのはやめた方がよいのですが……。

MP3ファイルは,Mpeg-1 audioのチャンクをそのまま保存した形式です。
後付けで,ID3tagやLame tagというものができていますが,基本的には「生データのみ」のものです。

それに対して,通常のマルチメディアフォーマットは,コンテナであり,「データに関する情報」と「データ」を分離して保存しています。
一般的にPCMのみに使われているWAVEファイルも,RIFFコンテナでfmt チャンクに情報を入れればMpeg-1 audioを入れる事も出来ます。
MP4というのも,このコンテナで,複数のboxからなるフォーマットになります。

さて,boxファイルのうち,データはmdat boxにある,というのは確定しています。
ただ,mdatに何が入っているかはmoov boxにあるようです。


コンテナ形式のファイルを再生しようとした場合,通常はその内部のデータ形式にあったcodecが必要になります。
MP4は通常H.264 (映像) + AAC (音声)の形式を持ちますが,H.264にもprofileやLevelがあり,同じH.264の動画でも再生できる場合と再生できない場合が出てきたりします。
# High@L4は再生できたけどHigh 444P@L4は再生できない,など。

再生しようとしているMP4ファイルの映像や音声の形式が本当に対応しているのか,調べてみてはいかがでしょうか。
オフトピック
個人的には,High@L4がだいたいの環境で使えると思っていますが……。
なお,私は動画ファイルの形式確認などにMediaInfoを使っています。

Math

Re: mp4の再生

#6

投稿記事 by Math » 8年前

[用語について]
[AAC]エーエーシー :Advanced Audio Coding:MP3よりも1.4倍ほど圧縮効率が高い:

[MPEG‐2 オーディオ規格 の一方式である] Advanced Audio Coding の略。MPEG‐2またはMPEG‐4で使われる音声圧縮方式。MPEG‐1に採用された音声圧縮方式であるMP3よりも1.4倍ほど圧縮効率が高い。MPEG‐1 オーディオ規格に対する下位互換性はないが、高圧縮率で高音質なフォーマットとして新たに策定された。日本のデジタルBS放送に採用され、地上デジタル放送やデジタルラジオにも採用された。AACのデータ量は標準ステレオ音声で144Kbps以下、高音質ステレオ音声で192〜256Kbps、5.1チャンネル音声で384Kbps以下。---
--------------------------------------------------------------------------------------
H.264(エイチにろくよん)、MPEG-4 AVC(エムペグフォーエーブイシー)は、動画圧縮規格の一つ。

ITU-Tでは「H.264」として、2003年初めに勧告された。ISO/IECでは、ISO/IEC 14496-10「MPEG-4 Part 10 Advanced Video Coding(通称:MPEG-4 AVC)」として規定されている。どちらも技術的には同一のものであり、ITU-TとISO/IECが共同で策定したため、両者の呼称を「H.264/MPEG-4 AVC」「MPEG-4 AVC/H.264」と併記することが多い。規格文書では「ITU-T Rec. H.264 | ISO/IEC 14496-10 Advanced Video Coding」と縦線で区切られているため、「H.264|MPEG-4 AVC」などとすることもある
https://ja.wikipedia.org/wiki/H.264
http://e-words.jp/w/H.264.html












Math

Re: mp4の再生

#7

投稿記事 by Math » 8年前

[再生について]
mciで再生するならmp4のスプリッタとAACのデコーダが必要です。
LAV Filtersかk-lite codecあたりをインストールしてください。
そしたら普通にmciで再生できるようになります。
-------------------------------------------------------
http://www.gigafree.net/media/codecpack ... lters.html
http://www.gigafree.net/media/codecpack ... cpack.html
--------------------------------------------------------
mci 録音時に音質を変更した wav ファイルを WMP で再生するためには、wav ファイルヘッダ情報のデータ再生速度を正しい値に変更してあげる必要があります。 具体的には、 mci によって出力されたファイルをバイナリモードで開き、データ再生速度の値を正しい値に上書きしてしまうわけです。

 データ再生速度の情報は wav ファイルの先頭付近、 wav ファイルヘッダ情報の中に記録されています。 wav ファイルフォーマット情報についてはいろいろなところで解説されていますが、あえてここでも紹介しておきます (ここでは mci を使って録音した CD 音質の wav ファイルを考えます)。 なお、ここでは mci で録音したファイルを再生できるようにすることが目的なので、個々のデータの意味について深くは言及しないことにします。

table 1. wav ファイルの構造


バイト数

内容

意味

4 Byte 'R', 'I', 'F', 'F' の4文字 WAVE ヘッダ
4 Byte ファイルサイズ - 8 これ以降のファイルサイズ (Byte)
4 Byte 'W', 'A', 'V', 'E' の4文字 RIFF ヘッダ
4 Byte 'f', 'm', 't', ' ' の4文字 フォーマットチャンクの始まり
4 Byte 16 フォーマットチャンクのデータサイズ (Byte)
2 Byte 1 フォーマット ID
2 Byte 2 チャンネル数 (モノラル: 1; ステレオ: 2)
4 Byte 44100 サンプリングレート (Hz)
4 Byte 8820 データ速度 (Byte/s)
2 Byte 4 ブロックサイズ (Byte/sample×チャンネル数)
2 Byte 16 1 サンプルあたりのビット数 (bit/sample)
4 Byte 'd', 'a', 't', 'a' の4文字 データチャンクの始まり
4 Byte データチャンクのバイト数 - 8 データチャンクのデータサイズ
データチャンクの
バイト数 - 8 Byte 波形データ

データ速度の値の意味は 「1 秒間に何バイトのデータを再生するか」 ということ。 これはサンプリングレート (Hz) × サンプルあたりのバイト数 (Byte) × チャンネル数 で計算されます。 したがって、 CD の音質で録音した場合、正しいデータ速度は 44100 (Hz) × 2 (Byte) × 2 (チャンネル数) = 176400 です。

 データ速度の値はファイルの先頭から 28 Byte 進んだところに記録されています。 ということは、ファイル先頭から 28 Byte 進んだところの値を 176400 に書き換えれば、正しく再生する wav ファイルを作ることができそうです。
-----------------------------------------------------------------------------------
[MP4タグについて]
http://eleken.y-lab.org/report/other/mp3tags.shtml

駆け出しtemp

Re: mp4の再生

#8

投稿記事 by 駆け出しtemp » 8年前

>>Yuoさん、ご返信ありがとうございます。mp4に規格がたくさんあるとは知りませんでした。そうすると、MCIで再生できる規格も調べなければなりませんが、これは調べることができますか?

>>Mathさん、いつも返信感謝です。どうやら、
faad2なるaacのデコーダーがあるようなので、そちらを使っていこう(GitHubで公開)と思います。完全手探りなので、また質問すると思いますが、よろしくお願いします。

閉鎖

“C言語何でも質問掲示板” へ戻る