Nintendo Video: Difference between revisions
Vgturtle127 (talk | contribs) m Fix some stuff, add some notes about the service and some personal tests. |
DaniElectra (talk | contribs) m →Metadata: The metadata length is fixed |
||
(10 intermediate revisions by 2 users not shown) | |||
Line 115: | Line 115: | ||
== SD storage == | == SD storage == | ||
Downloaded videos are stored in the SD card [[Extdata]], from the decrypted [[SpotPass]] content payload. Country info is presumably stored in this metadata, region-lock is handled by the BOSS module via the programID in the [[SpotPass#Payload Content Header|payload header]] | Downloaded videos are stored in the SD card [[Extdata]], from the decrypted [[SpotPass]] content payload, adding an additional header to them. Country info is presumably stored in this metadata, region-lock is handled by the BOSS module via the programID in the [[SpotPass#Payload Content Header|payload header]]. | ||
While the SpotPass payload uses little-endian, the extra header added to the Extdata is stored in big-endian. | |||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
Line 126: | Line 125: | ||
|- | |- | ||
| 0x0 | | 0x0 | ||
| | | 0x4 | ||
| Unknown, value is 0x18 | | Unknown, value is 0x18 | ||
|- | |- | ||
| 0x4 | | 0x4 | ||
| 0x14 | | 0x14 | ||
|? | | ? | ||
|- | |- | ||
| 0x18 | | 0x18 | ||
| | | 0x8 | ||
| TitleID of Nintendo Video | | TitleID of Nintendo Video | ||
|- | |- | ||
| 0x20 | | 0x20 | ||
| 0x8 | | 0x8 | ||
|? | | ? | ||
|- | |- | ||
| 0x28 | | 0x28 | ||
| 0x4 | | 0x4 | ||
| | | File size | ||
|- | |||
| 0x2C | |||
| 0x4 | |||
| ? | |||
|- | |||
| 0x30 | |||
| 0x4 | |||
| Release date (integer, YYYYmmddhh) | |||
|- | |||
| 0x34 | |||
| | |||
| SpotPass payload | |||
|} | |||
== File format == | |||
The SpotPass content downloaded for Nintendo Video uses the [[SpotPass]] content container format, see the SpotPass page for info on the container format. At the end of the video file is a JPEG, which contains the video thumbnail, and various advertising metadata (interactive links) including the URL associated with the video. The text shown on the web browser button is also stored in the interactive links. | |||
Region info is stored in the decrypted SpotPass crypto layer, see above SD section. | |||
The following entries use little-endian. | |||
=== Header === | |||
{| class="wikitable" | |||
|- | |||
! Offset | |||
! Length | |||
! Notes | |||
|- | |||
| 0x0 | |||
| 0x4 | |||
| Start address of header? (0x0) | |||
|- | |||
| 0x4 | |||
| 0x4 | |||
| End address of header | |||
|- | |||
| 0x8 | |||
| 0x4 | |||
| Start address of metadata and video | |||
|- | |||
| 0xC | |||
| 0x4 | |||
| End address of metadata and video | |||
|- | |||
| 0x10 | |||
| 0x4 | |||
| Video thumbnail length | |||
|- | |||
| 0x14 | |||
| 0x4 | |||
| Unknown (padding?) | |||
|- | |- | ||
| | | 0x18 | ||
| | | | ||
| | | [[#Interactive links header|Interactive links header]] | ||
|- | |- | ||
| | | | ||
| | |||
| [[#Metadata|Metadata]] | |||
|} | |||
=== Metadata === | |||
{| class="wikitable" | |||
|- | |||
! Offset | |||
! Length | |||
! Notes | |||
|- | |||
| 0x0 | |||
| 0x4 | |||
| Metadata length (0x248) | |||
|- | |||
| 0x4 | |||
| 0x20 | | 0x20 | ||
| | | Video ID (M<shortvidtitle>video ID) | ||
|- | |- | ||
| | | 0x24 | ||
| | | 0x8 | ||
| | | [[#Timestamp|Release date]] | ||
|- | |||
| 0x2C | |||
| 0x8 | |||
| [[#Timestamp|Expire date]] | |||
|- | |- | ||
| | | 0x34 | ||
| 0x78 | | 0x78 | ||
| UTF-16 video title | | UTF-16 video title | ||
|- | |- | ||
| | | 0xAC | ||
| | | 0x8 | ||
|? | | ? | ||
|- | |||
| 0xB4 | |||
| 0x4 | |||
| Video length | |||
|- | |- | ||
| | | 0xB8 | ||
| 0x190 | | 0x190 | ||
| UTF-16 video description | | UTF-16 video description | ||
|- | |- | ||
| | | 0x248 | ||
| 0x20 | | 0x20 * number of links | ||
| | | Interactive link IDs (I<shortvidtitle>video ID) | ||
|- | |- | ||
| | | | ||
| Video size | | Video size | ||
| Mobiclip .moflex video data (first word here is little-endian magic number 0xABAA324C) | | Mobiclip .moflex video data (first word here is little-endian magic number 0xABAA324C) | ||
|- | |||
| | |||
| Thumbnail size | |||
| Video thumbnail | |||
|- | |||
| | |||
| Interactive links data size | |||
| [[#Interactive links data|Interactive links data]] | |||
|} | |} | ||
== | === Timestamp === | ||
The release and expire date are stored using a custom timestamp, where each value (year, month, day...) is stored as unique bytes. | |||
{| class="wikitable" | |||
|- | |||
! Offset | |||
! Length | |||
! Notes | |||
|- | |||
| 0x0 | |||
| 0x2 | |||
| Year | |||
|- | |||
| 0x2 | |||
| 0x1 | |||
| Month | |||
|- | |||
| 0x3 | |||
| 0x1 | |||
| Day | |||
|- | |||
| 0x4 | |||
| 0x1 | |||
| Hours | |||
|- | |||
| 0x5 | |||
| 0x1 | |||
| Minutes | |||
|- | |||
| 0x6 | |||
| 0x1 | |||
| Seconds | |||
|- | |||
| 0x7 | |||
| 0x1 | |||
| Padding? | |||
|} | |||
=== Interactive links === | |||
Interactive links are structures that store the advertising and thumbnail data that is displayed to the user during the video playback. | |||
==== Interactive links header ==== | |||
{| class="wikitable" | |||
|- | |||
! Offset | |||
! Length | |||
! Notes | |||
|- | |||
| 0x0 | |||
| 0x4 | |||
| Number of interactive links | |||
|- | |||
| 0x4 | |||
| 0x4 | |||
| Address of interactive link data | |||
|- | |||
| 0x8 | |||
| | |||
| Address of additional interactive links data | |||
|} | |||
==== Interactive links data ==== | |||
Interactive links store a thumbnail image as a JPEG image. | |||
{| class="wikitable" | |||
|- | |||
! Offset | |||
! Length | |||
! Notes | |||
|- | |||
| 0x0 | |||
| 0x4 | |||
| Metadata length (0x16C) | |||
|- | |||
| 0x4 | |||
| 0x30 | |||
| Interactive link ID (I<shortvidtitle>video ID) | |||
|- | |||
| 0x34 | |||
| 0x8 | |||
| Unknown | |||
|- | |||
| 0x3C | |||
| 0x100 | |||
| URL address of link. For eShop link, use (tiger://<TitleID>) | |||
|- | |||
| 0x13C | |||
| 0x4 | |||
| Button link color (RGBA) | |||
|- | |||
| 0x140 | |||
| 0x28 | |||
| UTF-16 button link text | |||
|- | |||
| 0x168 | |||
| 0x4 | |||
| Thumbnail length | |||
|- | |||
| | |||
| Thumbnail size | |||
| Thumbnail image | |||
|} | |||
== Server spoofing == | == Server spoofing == | ||
Line 197: | Line 376: | ||
This can be done with any DNS server and HTTP server, as long as you spoof everything correctly. It is possible on Windows. I have not tried Mac OS X. | This can be done with any DNS server and HTTP server, as long as you spoof everything correctly. It is possible on Windows. I have not tried Mac OS X. | ||
Unfortunately, this currently has little use since Nintendo shut the services down. However, they can still be spoofed if you have everything still on your 3DS. Spoofing your own videos could be possible, but you can already | Unfortunately, this currently has little use since Nintendo shut the services down. However, they can still be spoofed if you have everything still on your 3DS. Spoofing your own videos could be possible, but you can already watch videos with the web browser and something like Universal Media Server. | ||
== External links == | == External links == | ||
* [http://www.youtube.com/watch?v=Tl8QYofL1tg A video showing Nintendo Video server being spoofed] | * [http://www.youtube.com/watch?v=Tl8QYofL1tg A video showing Nintendo Video server being spoofed] |